本文整理一下在学习wifi驱动安装过程中的一些笔记。本来想研究无线网卡驱动源码的,但水太深了,目前认知还不够,为有留待后续再说(这个“后续”一般都是无下文的伏笔)。
一般地,无线网卡需要驱动和对应的固件才能正常使用。而固件一般只有二进制格式的bin文件。本文使用的系统是ubuntu14.04,这个系统上的KO比较多(在/lib/modules/3.13.0-32-generic/)、固件也比较多(在/lib/firmware目录),一般常见的驱动都会支持。但一些新的硬件没有及时被支持,可以选择更新系统——话说现在ubutun都到16.04了。如果最新的系统都不支持,只好自己找资源,自己编译搜索了。
常用的系统,都支持用户空间固件加载,内核配置如下:
Device Drivers --->
Generic Driver Options --->
-*- Userspace firmware loading support
下面介绍三款常见的无线网卡在ubuntu系统的识别过程(不是使用)。
Intel的无线网卡使用ilwifi驱动,Intel官网有其驱动固件,在http://linuxwireless.org/en/users/Drivers/iwlwifi/上面也有部分固件文件。Intel的固件文件形式是iwlwifi-xxx.ucode,比如7260的固件文件名称是iwlwifi-7265-9.ucode。把固件拷贝到系统的/lib/firmware目录,命令如下:
# cp iwlwifi-*.ucode /lib/firmware
除了固件,还需要驱动的支持。幸运的是,ubuntu14.04已经有7260的支持了,用lspci查看一下:
$ lspci | grep 7260
03:00.0 Network controller: Intel Corporation Wireless 7260 (rev bb)
如果没有输出信息说明没有驱动支撑,则要自己编译iwlwifi了。本文不涉及。
$ lspci
....
03:00.0 Network controller: Broadcom Corporation BCM4352 802.11ac Wireless Network Adapter (rev 03)
...
Atheros公司(Atheros 被高通收购了)的QCA988x芯片使用的驱动是ath10k。Linux下有一系列的Atheros驱动,如ath6k,ath9k。最新的是ath10k,它驱动支持802.11n和802.11ac。幸运的是,ubuntu14.04已经安装有ath10k的驱动,支持qca988x,用lspci查看:
# lspci
...
04:00.0 Network controller: Qualcomm Atheros QCA988x 802.11ac Wireless Network Adapter
...
类似地,还要看固件的支持,如果固件不存在或版本不对,在系统启动时会提示错误信息,下面是固件文件不存在的错误信息:
参考资料:
1、http://linuxwireless.org/en/users/Drivers/iwlwifi/
2、http://linuxwireless.org/en/users/Drivers/ath10k
3、https://github.com/kvalo/ath10k-firmware
4、http://zh-cn.broadcom.com/support/?gid=1
5、Linux固件大本营:http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git
李迟 2016.7.21 周四 夜