1. 平台 还是rk3399(am40)
2. 内核:linux5.10
3. 文件系统: firefly ubuntu20.04
4. 需要加载的驱动 rtl8822be (pci)接口
一、错误的提示:提示这个固件rtw88/rtw8822b_fw.bin无法加载
root@firefly:~# dmesg | grep 8822
[ 6.983329] rtw_8822be 0000:01:00.0: Direct firmware load for rtw88/rtw8822b_fw.bin failed with error -2
[ 6.992886] rtw_8822be 0000:01:00.0: enabling device (0000 -> 0002)
[ 7.006063] rtw_8822be 0000:01:00.0: failed to request firmware
[ 7.012028] rtw_8822be 0000:01:00.0: failed to load firmware
[ 7.017706] rtw_8822be 0000:01:00.0: failed to setup chip efuse info
[ 7.024072] rtw_8822be 0000:01:00.0: failed to setup chip information
[ 7.034789] rtw_8822be: probe of 0000:01:00.0 failed with error -22
1.1 我查了一些资料,在网上把这个bin文件下载到了下来。
放到了/lib/firmware/rtw88/目录下(没有目录的则新建一个)
重启后,无法加载,故障提示依旧。
1.2 后来又看到资料说要放到/usr/local/lib/firmware/rtw88/目录下
又拷贝了一份到这个目录中
重启后,无法加载,故障提示依旧。
1.3 后来我把8822的驱动编译成模块
等到系统启动后,再分别加载对应的4个驱动,成功了。
1.4 再遇到这个问题,就是加载cdn_dp的时候,又一次碰到了这个问题
cdn-dp fec00000.dp: Direct firmware load for rockchip/dptx.bin failed with error -2
但是,这个驱动不能改为模块了!!!!没法加载了
明明在/lib/firmware目录有这个文件,同时我也复制一份到/usr/local/lib下,
重启,故障依旧。
1.5 晚上洗澡的时候,我突然想到了原因。
这个驱动加载的时候,文件系统还没有挂载,肯定没法找到对应的固件了。
那就必须把这个固件编译到内核中才行。说干就干!!!
1.6 解决
1.6.1 在kernel的目录下新建一个firmware目录
firmware目录里面放两个文件夹(目前我只需要两个),分别是rockchip和rtw88
然后把对应的bin文件放到对应的目录中
1.6.2 修改config
make menuconfig
-> Device Drivers
-> Generic Driver Options
-> Firmware loader
-> Firmware loading facility (FW_LOADER [=y])
多个固件按空格分开,需要包含目录
1.6.3 保存后退出,重新编译内核。
烧录后,加载成功。
二、总结
2.1 开始一直是在想应该放在哪个目录才能加载呢?其实方向错了,那个时间点,文件系统还没有挂载,放哪都找不到
2.2 对于Direct firmware load for xxxxxxx failed with error -2 这种类似的错误,应该都可以用这个方法解决。
2.3 cdn-dp的问题没有解决,驱动是成功加载了bin文件,但是依然是不能显示,待查吧。