1

All before having any manually installed drivers, my wireless card was not working properly and I decided to download and install Broadcom BCM43225 drivers. It was a hard process for such a newbie like me to understand that 'readme' file that comes with download to build a driver from source but I did it (woah such a long sentence).

I was able to use wireless as normal for a long time but somehow it's not successfully loaded on boot anymore (not sure when it stopped working).

I built the same driver from source just in case an update made a kernel-level change or something but it seems like every boot there is another clean-build required to get that driver working because trying to insert previously built module result with:

insmod wl.ko
Unknown symbol in module

I'm able to get it working with this bash script:

lspci -n | grep 14e4
cd /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248
make clean
make
lsmod | grep "brcmsmac\|b43\|ssb\|bcma\|wl"
rmmod b43
rmmod brcmsmac
rmmod ssb
rmmod bcma
rmmod wl
modprobe lib80211
modprobe cfg80211
insmod wl.ko

for i in `find /lib /var -name wl\.ko`; do mv $i ${i}.orig; done
cp wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless

Here is the output just in case you're interested in build messages and such:

user@pc:~$ sudo -i
[sudo] password for user: 
root@pc:~# lspci -n | grep 14e4
02:00.0 0280: 14e4:4357 (rev 01)
root@pc:~# cd /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# make clean
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` clean
make[1]:`/usr/src/linux-headers-3.13.0-48-generic' dizinine giriliyor
CFG80211 API is prefered for this kernel version
/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/Makefile:85: Neither CFG80211 nor Wireless Extension is enabled in kernel
  CLEAN   /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/.tmp_versions
  CLEAN   /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/Module.symvers
make[1]: `/usr/src/linux-headers-3.13.0-48-generic' dizininden çıkılıyor
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# make CONFIG_DEBUG_SECTION_MISMATCH=y
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]:`/usr/src/linux-headers-3.13.0-48-generic' dizinine giriliyor
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  LD      /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/built-in.o
  CC [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/src/shared/linux_osl.o
  CC [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/src/wl/sys/wl_linux.o
  CC [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/src/wl/sys/wl_iw.o
  CC [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/src/wl/sys/wl_cfg80211_hybrid.o
  LD [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o
WARNING: modpost: missing MODULE_LICENSE() in /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o
see include/linux/module.h for more information
WARNING: /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o(.data+0x150f40): Section mismatch in reference from the variable wl_pci_driver to the function .init.text:wl_pci_probe()
The variable wl_pci_driver references
the function __init wl_pci_probe()
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console

  Building modules, stage 2.
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  MODPOST 1 modules
WARNING: modpost: missing MODULE_LICENSE() in /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o
see include/linux/module.h for more information
WARNING: /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o(.data+0x150f40): Section mismatch in reference from the variable wl_pci_driver to the function .init.text:wl_pci_probe()
The variable wl_pci_driver references
the function __init wl_pci_probe()
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console

  CC      /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.mod.o
  LD [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.ko
make[1]: `/usr/src/linux-headers-3.13.0-48-generic' dizininden çıkılıyor
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# lsmod | grep "brcmsmac\|b43\|ssb\|bcma\|wl"
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod b43
rmmod: ERROR: Module b43 is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod brcmsmac
rmmod: ERROR: Module brcmsmac is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod ssb
rmmod: ERROR: Module ssb is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod bcma
rmmod: ERROR: Module bcma is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod wl
rmmod: ERROR: Module wl is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# modprobe lib80211
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# modprobe cfg80211
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# insmod wl.ko
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# exit
çıkış

Every reboot makes previous built driver to not work. I still have that modeprobe wl command in rc.local file and again it used work like a charm and still the driver itself works but I have no idea why I can't make them load on boot.

Edit:

Here is super-detailed-diagnostic wireless info created with this script. Alternatively, this output received before manually inserting wl module.

1 Answers1

0

First you are using an incorrect driver for your kernel version, lets get rid of the wrong driver and load the correct driver for starters.

sudo apt-get purge bcmwl-kernel-source
gksu gedit /etc/modprobe.d/blacklist.conf

remove blacklist brcmsmac and blacklist bcma then save the file and close it. You may have to install gksu it does not come preinstalled in 14.04. Reboot

Wild Man
  • 8,187
  • 4
  • 34
  • 44
  • I said I have a "modprobe wl" command in 'rc.local'... It didn't work either and it's not the problem as you can understand from the question => problem is I have to rebuild the driver after every boot it's the only way I could find and puting "make" commands in 'rc.local' cause a horrible long boot time. – Ahmet Sait Mar 29 '15 at 12:00
  • I know you said you have it in rc.local which is not ideal, it belongs in /etc/modules and without more information to go on I had to go with the fact that 99 percent of the time the command I posted will fix it. But you did not even try it. Please run the script that is in the accepted answer in the link below so we may see the information needed to help diagnose the issue. <askubuntu.com/questions/425155/… what-can-i-do> – Wild Man Mar 29 '15 at 16:23
  • When I said "It didn't work either" I meant "I tried your script with no luck", sorry for misunderstanding. I added info that you wanted – Ahmet Sait Mar 30 '15 at 14:23
  • Is there a reason you are not using brcmsmac is work best in later versions of ubuntu. – Wild Man Mar 30 '15 at 17:48
  • brcmsmac is not working in most cases; I can't connect to internet when I'm actually connected to a wifi access point which is not close to me -> low signal handling is impossible with brcmsmac but wl is perfect... I made a script containing make commands and it's executed at startup instead of boot time so I'm happy enough I could find a workaround. Thanks anyway! – Ahmet Sait Apr 04 '15 at 13:11