背景:在适配RTL8822ce时,将驱动默认编译进内核了,在实际内核启动过程中看到,在启动3秒到4秒时,wifi驱动就已经开始加载了,问题来了,现在文件系统还没有开始挂载,所以找不到/lib/firmware的文件路径,导致驱动加载失败。这时如果还想将驱动默认编译进内核,就需要如下的配置。本次以3588的Linux系统为例。
在内核中配置固件新建firmware文件夹 OK3588_Linux_fs/kernel$ mkdir firmware 之后自行将文件夹中的rtw88固件放入firmware文件夹中,这里就不做过的演示了。 文件结构: $ tree firmware/ firmware/ └── rtw88 ├── README ├── rtw8723d_fw.bin ├── rtw8821c_fw.bin ├── rtw8822b_fw.bin ├── rtw8822c_fw.bin └── rtw8822c_wow_fw.bin 1 directory, 6 files 下面将固件配置进编译选项: OK3588_Linux_fs/kernel$ make menuconfig ARCH=arm64 依次打开如下选项 -> Device Drivers -> Generic Driver Options -> Firmware loader -> Firmware loader 在Build named firmware blobs into the kernel 选项中写入固件路径: rtw88/rtw8822c_fw.bin rtw88/rtw8822c_wow_fw.bin 在Firmware blobs root director 选项中写入查找目录 firmware 注:上面固件路径多个固件中间加空格,查找目录中是以kernel目录为根目录进行查找的,还需要注意firmware后面不要加"/",系统编译时会自动补全。
将内核文件配置进defconfig中需要将.comfig拷贝到OK3588-Linux_defconfig中: OK3588_Linux_fs/kernel$ cp .config arch/arm64/configs/OK3588-Linux_defconfig 注:此操作需要将内核提前编译一遍之后才可使用。
编译镜像验证编译方法参考编译手册,本次为了验证功能,只演示编译内核。 OK3588_Linux_fs$ sudo ./build.sh kernel 编译过程中会有如下信息提示: UPD drivers/base/firmware_loader/builtin/rtw88/rtw8822c_fw.bin.gen.S AS drivers/base/firmware_loader/builtin/rtw88/rtw8822c_fw.bin.gen.o UPD drivers/base/firmware_loader/builtin/rtw88/rtw8822c_wow_fw.bin.gen.S AS drivers/base/firmware_loader/builtin/rtw88/rtw8822c_wow_fw.bin.gen.o 有以上打印信息,说明已将固件加载上。下面自行将镜像刷到系统中进行验证。 查看驱动加载情况: root@ok3588:/# dmesg | grep "8822" [ 3.040421] rtw_8822ce 0004:41:00.0: Firmware version 9.9.15, H2C version 15 [ 3.040439] rtw_8822ce 0004:41:00.0: Firmware version 9.9.4, H2C version 15 [ 3.040501] rtw_8822ce 0004:41:00.0: enabling device (0000 -> 0003) [ 5.003557] input: headset-keys as /devices/platform/nau8822-sound/input/input1 [ 5.110267] input: rockchip-nau8822 Headset as /devices/platform/nau8822-sound/sound/card0/input2 [ 6.301570] #0: rockchip-nau8822 查看网络节点: root@ok3588:/# ifconfig -a wlan0 Link encap:Ethernet HWaddr F0:C8:14:89:D6:04 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
|