WIFI驱动移植
实验平台
内核版本:Linux-4.19.5
开发板:SAMSUNG JZ2440
WIFI模块:Ralink rt3070
查看WIFI设备的PID
直接将WIFI模块接到电脑的USB插口,然后在windows的设备管理器->网络适配器中可以看到插入的USB-WIFI设备
右键属性->详细信息->硬件ID
可以看到这款WIFI模块的PID为0x3070。
通过这个网站 http://linuxwireless.sipsolutions.net/en/users/Devices/USB/,我们可以看一下目前内核是否可以支持这个usb设备
配置内核
在内核的无线网络目录下搜索该WIFI模块的PID“0x3070”,grep "0x3070" -nR
说明支持该WIFI模块的文件为rt2800usb.c,所以我们要把该文件编译到内核里面去,到对应的目录**rt2x00/**下打开Makefile文件可以看到
说明我们需要配置 CONFIG_RT2800USB这个选项。
通过make menuconfig
中的search功能,可以知道需要配置哪些选项
这边给出我用的Ralink rt3070 WIFI模块的配置项
接着编译内核make uImage
和模块make modules
查看相应的模块文件
最后把uImage和4个模块文件放到网络文件夹下等待测试。
测试WIFI模块
用新内核启动开发板,挂载开发板的文件系统到虚拟机上,加载4个模块文件。这边需要注意一定要按顺序,不然在加载模块的时候会报错。
模块全部加载完成以后我们插入USB-WIFI模块
使用ifconfig wlan0 192.168.9.123
给模块配置IP地址,发现会报错
原来是每一个WIFI模块厂家都配备了一个固件库,我这边用的是rt2870.bin,只要把这个文件放到 /lib/firmware/ 目录下就行。
我们重新执行一次ifconfig wlan0 192.168.9.123
,然后查看一下IP
发现IP配置成功,并且WIFI模块的指示灯在闪烁。