了解 Broadcom 設定和內核文件

了解 Broadcom 設定和內核文件

我經常透過 USB/CD 安裝 Linux 發行版。為此,我希望能夠在沒有任何網路連線的情況下設定我的無線網路。我有一個博通晶片組:

$ lspci -k
04:00.0 Network controller: Broadcom Corporation BCM43228 802.11a/b/g/n

我下載了該bcmwl-kernel-source套件及其依賴項 ( dkms)。我可以離線安裝它們並使我的 wifi 正常工作。不過我想了解它在幕後是如何運作的。

.ko模組資料夾中有一個檔案列表:

$ ls /lib/modules/`uname -r`/kernel/net/wireless/
cfg80211.ko             lib80211_crypt_tkip.ko  lib80211.ko
lib80211_crypt_ccmp.ko  lib80211_crypt_wep.ko

我備份並刪除了它們

$ rm /lib/modules/`uname -r`/kernel/net/wireless/*.ko
$ reboot

重啟後,wifi就不能用了。看來這些.ko文件是完成wl工作的重要文件。

我嘗試重新加載,wl但它不再被識別:

$ modprobe wl
modprobe: ERROR: ../libkmod/libkmod-module.c:180 kmod_module_parse_depline() ctx=0x7f9f5375d010 path=/lib/modules/3.13.0-35-generic/kernel/net/wireless/lib80211.ko error=No such file or directory
modprobe: ERROR: ../libkmod/libkmod-module.c:180 kmod_module_parse_depline() ctx=0x7f9f5375d010 path=/lib/modules/3.13.0-35-generic/kernel/net/wireless/lib80211.ko error=No such file or directory
modprobe: ERROR: could not insert 'wl': Unknown symbol in module, or unknown parameter (see dmesg)

我嘗試了這些命令以確保這些.ko文件與模組有關wl

$ apt-get autoremove bcmwl-kernel-source 
$ modprobe wl
modprobe: FATAL: Module wl not found.

看起來很正常,我重新安裝了bcmwl-kernel-source

$ sudo dpkg -i bcmwl-kernel-source_6.30.223.141+bdcom-0ubuntu2_amd64.deb 
Selecting previously unselected package bcmwl-kernel-source.
(Reading database ... 396932 files and directories currently installed.)
Preparing to unpack .../bcmwl-kernel-source_6.30.223.141+bdcom-0ubuntu2_amd64.deb ...
Unpacking bcmwl-kernel-source (6.30.223.141+bdcom-0ubuntu2) ...
Setting up bcmwl-kernel-source (6.30.223.141+bdcom-0ubuntu2) ...
Loading new bcmwl-6.30.223.141+bdcom DKMS files...
Building only for 3.13.0-35-generic
Building for architecture x86_64
Building initial module for 3.13.0-35-generic
Done.

wl:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/3.13.0-35-generic/updates/dkms/

depmod........

DKMS: install completed.
modprobe: ERROR: could not insert 'wl': Unknown symbol in module, or unknown parameter (see dmesg)
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools (0.103ubuntu4.2) ...
update-initramfs: Generating /boot/initrd.img-3.13.0-35-generic

自動安裝bcmwl套件會嘗試wl透過插入modprobe。但是它失敗了,就像我手動嘗試時失敗一樣:

$ modprobe wl
modprobe: ERROR: could not insert 'wl': Unknown symbol in module, or unknown parameter (see dmesg)

如果我恢復.ko先前從/lib/modules/uname -r中刪除的文件/kernel/net/wireless/ ,然後重新安裝bcmwl-kernel-source,腳本會自動插入wl( modprobe wl) 並且我的 wifi 卡會再次工作。

我的問題是:

1)這一切是如何運作的,無線.ko檔案又是如何產生的?

2) 如果我從 Ubuntu live USB 啟動,這些.ko檔案已經產生。如果我遇到這些文件不存在的情況該怎麼辦?它們在 Linux 發行版之間是否相容,以便我可以備份它們?

相關內容