# Prism2 USB: Unresolved symbols?

## roothorick

After upgrading from  2.6.9-gentoo-r9 to 2.6.10-gentoo-r1, all of a sudden the driver for my WLAN adapter (a D-Link DWL-122, USB pocket adapter) won't load.

```
prodigy /usr/src/linux # modprobe prism2_usb

WARNING: Error inserting p80211 (/lib/modules/2.6.10-gentoo-r1/kernel/drivers/net/p80211.ko): Unknown symbol in module, or unknown parameter (see dmesg)

FATAL: Error inserting prism2_usb (/lib/modules/2.6.10-gentoo-r1/kernel/drivers/net/prism2_usb.ko): Unknown symbol in module, or unknown parameter (see dmesg)

prodigy /usr/src/linux # dmesg | tail -n 8

p80211: Unknown symbol hotplug_path

p80211: Unknown symbol dev_get

prism2_usb: Unknown symbol p80211netdev_rx

prism2_usb: Unknown symbol register_wlandev

prism2_usb: Unknown symbol wlan_unsetup

prism2_usb: Unknown symbol unregister_wlandev

prism2_usb: Unknown symbol p80211netdev_hwremoved

prism2_usb: Unknown symbol wlan_setup

```

After looking around online, it sounds like they changed something drastic in 2.6.10 that broke a lot of things, and there's no patch available yet. (I can't use the in-kernel driver -- it only supports ISA, PCI, and PCMCIA adaptors, it can't do anything with USB.) Anyone have any other revelations?

-EDIT- ARGH! Some mod please move this to Kernel & Hardware. How did I do that?

----------

## elefantenfloh

linux-wlan-ng uses some obsolete kernel code. Patch your 2.6.10-Kernel with the patch below, rebuild your kernel and re-emerge linux-wlan-ng and everything should work.

The next release of linux-wlan-ng (0.2.1_pre24) will fix the problem.

```

diff -Nur linux/include/linux/netdevice.h linux-2.6.10-rc3-oldhotplug/include/linux/netdevice.h

--- linux/include/linux/netdevice.h   2004-12-04 09:57:58.000000000 +0100

+++ linux-2.6.10-rc3-oldhotplug/include/linux/netdevice.h   2004-12-14 23:32:39.000000000 +0100

@@ -531,6 +531,15 @@

 extern void      dev_remove_pack(struct packet_type *pt);

 extern void      __dev_remove_pack(struct packet_type *pt);

 

+// still provide dev_get for compatibility to older kernel drivers

+// *ugly*, it would be better to convert the 3rd party software :-(

+extern int   __dev_get(const char *name);

+static inline int __deprecated dev_get(const char *name)

+{

+        return __dev_get(name);

+}

+   

+

 extern struct net_device   *dev_get_by_flags(unsigned short flags,

                     unsigned short mask);

 extern struct net_device   *dev_get_by_name(const char *name);

diff -Nur linux/lib/kobject_uevent.c linux-2.6.10-rc3-oldhotplug/lib/kobject_uevent.c

--- linux/lib/kobject_uevent.c   2004-12-04 09:57:58.000000000 +0100

+++ linux-2.6.10-rc3-oldhotplug/lib/kobject_uevent.c   2004-12-14 23:15:59.000000000 +0100

@@ -178,6 +178,11 @@

 

 #ifdef CONFIG_HOTPLUG

 char hotplug_path[HOTPLUG_PATH_LEN] = "/sbin/hotplug";

+

+// be compatible to older kernel drivers (e.g. linux-wlan-ng-0.2.1pre23) 

+// as long as they are not fully converted to the new hotplug calls

+EXPORT_SYMBOL(hotplug_path);

+

 u64 hotplug_seqnum;

 static spinlock_t sequence_lock = SPIN_LOCK_UNLOCKED;

 

diff -Nur linux/net/core/dev.c linux-2.6.10-rc3-oldhotplug/net/core/dev.c

--- linux/net/core/dev.c   2004-12-04 09:57:58.000000000 +0100

+++ linux-2.6.10-rc3-oldhotplug/net/core/dev.c   2004-12-15 00:19:00.000000000 +0100

@@ -520,6 +520,31 @@

    return dev;

 }

 

+

+// ***** this is deprecated and has been removed already *****

+// ***** it is just back to provide compatibility *****

+/**

+*      dev_get -       test if a device exists

+*      @name:  name to test for

+*

+*      Test if a name exists. Returns true if the name is found. In order

+*      to be sure the name is not allocated or removed during the test the

+*      caller must hold the rtnl semaphore.

+*

+*      This function exists only for back compatibility with older

+*      drivers.

+*/

+int __dev_get(const char *name)

+{

+   struct net_device *dev;

+

+   read_lock(&dev_base_lock);

+   dev = __dev_get_by_name(name);

+   read_unlock(&dev_base_lock);

+   return dev != NULL;

+}                 

+

+

 /**

  *   __dev_get_by_index - find a device by its ifindex

  *   @ifindex: index of device

@@ -3208,6 +3233,7 @@

 subsys_initcall(net_dev_init);

 

 EXPORT_SYMBOL(__dev_get_by_index);

+EXPORT_SYMBOL(__dev_get);

 EXPORT_SYMBOL(__dev_get_by_name);

 EXPORT_SYMBOL(__dev_remove_pack);

 EXPORT_SYMBOL(__skb_linearize);

```

----------

## xenfasa

Thanks for posting this patch.  It fixed things for me.

I did not even have to reboot. 

After applying, compiling, re-emerging...

 I just restarted /etc/init.d/pcmcia and typed  iwconfig and my senao prism2 card was there.    :Smile: 

mobile gentoo linux on my laptop!  After running linux servers for 10 years, Gentoo and KDE convinced me to completely do away with all my windows machines. Desktops and servers.  I only run windows in vmware when needed.

I'm much more productive now that I don't have crashes everyday and have all the cool tools, utils and programs to make me more effieicient.

thanks,

xen

----------

## elefantenfloh

I created an ebuild for the latest linux-wlan-ng release 0.2.1_pre25:

https://bugs.gentoo.org/show_bug.cgi?id=76350

Changelog

- works with Kernel-2.6.10 without extra Kernel-Patch

- Lot of USB-Bugfixes

----------

## hevtig

Hi,

I´m new to Linux and tried to install my DWL-122 but it didn´t work.

I tried it with this description => https://forums.gentoo.org/viewtopic.php?t=143921&highlight=dwl122

I use the kernel 2.6.10. "emerge linux-wlan-ng" doesn´t work => ends with an error message, gotta see, something like it cannot load for this kernel :/

I tried the description above even with the current linux-wl-ng 0.2.1pre25.

But when I "tail /var/log/messages -f" there ain´t  no error messages, or even no message about prism2_usb :/

Propably you´ve got a hint?

Sry for my english  :Wink: 

----------

## elefantenfloh

 *hevtig wrote:*   

> Hi,
> 
> I´m new to Linux and tried to install my DWL-122 but it didn´t work.
> 
> I tried it with this description => https://forums.gentoo.org/viewtopic.php?t=143921&highlight=dwl122
> ...

 

Please post the Emerge-Output.

thx

----------

## hevtig

This is the message:

```

emerge linux-wlan-ng

Calculating dependencies ...done!

>>> emerge (1 of 1) net-wireless/linux-wlan-ng-0.2.0-r3 to /

>>> md5 src_uri ;-) linux-wlan-ng-0.2.0.tar.gz

>>> md5 src_uri ;-) linux-wlan-ng-gentoo-init.gz

>>> Unpacking source...

 * This version of linux-wlan-ng will NOT work with 2.6 kernels

 * Please use linux-wlan-ng-0.2.1_pre17 for 2.6 kernels.

 * For now, you will need to disable sandbox to get this to merge.

 * See bug #32737 for info on work being done to fix this.

!!! ERROR: net-wireless/linux-wlan-ng-0.2.0-r3 failed.

!!! Function src_unpack, Line 39, Exitcode 0

!!! This version of linux-wlan-ng does not support 2.6 kernels

!!! If you need support, post the topmost build error, NOT this status message.

```

I don´t know what I did wrong.  emerge linux-wlan-ng seems to try emerging an old package.

----------

## hevtig

Sorry, now it seems to work.

I thought it would start automatically, I remember with an old kernel it did.

modprobe prism2_usb seems to work.  :Very Happy: 

----------

## elefantenfloh

 *hevtig wrote:*   

> This is the message:
> 
> ```
> 
> emerge linux-wlan-ng
> ...

 

Perhaps the 0.2.1-packages are masked with "~x86"-Keyword.

To load the module automatically on every system boot, add "prism2_usb" to /etc/modules.autoload/kernel-2.6.

----------

