目录
- 1 编译环境及源码版本
- 2 移植Linux 5.15.71遇到问题
- 2.1 imx-sdma 20ec000.dma-controller: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -2
- 2.2 cfg80211: failed to load regulatory.db
 
1 编译环境及源码版本
 1. uboot-alientek-v2022.04
 2. linux-alientek-5.15.71.tar
 3. buildroot-2024.02.4
 4. Ubuntu-18.04.6
2 移植Linux 5.15.71遇到问题
2.1 imx-sdma 20ec000.dma-controller: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -2
 系统启动完成后,出现如上错误,如下图所示:

 百度下出现上述错误信息原因如下:
 Linux-4.9.88 目录下有目录 firmware,是用来存放不开源的固件的;对与 5.x 的内核,将这个目录去除了,因此对于Linux 5.15.71版本的源码需要手动增加此目录,sdma-imx6q.bin 是 NXP官方的 sdma 固件,没有开源。
 1. 在Linux 5.15.71源码文件中搜索imx-sdma 20ec000,在mx6ul.dtsi 文件中找到如下代码下图所示:

- 在Linux源码目录下新建 firmware/imx/sdma 目录,如下图所示:

 3. 下载sdma-imx6q.bin文件,打开Kernel.org git repositories网站,点击plain下载sdma-imx6q.bin文件,如下图所示:

 3. 将下载好的sdma-imx6q.bin文件拷贝到firmware/imx/sdma目录下,如图所示:

 4. 修改Linux配置文件(imx_alientek_emmc_defconfig),增加以下两条语句,如下图所示:
CONFIG_EXTRA_FIRMWARE_DIR="firmware"
CONFIG_EXTRA_FIRMWARE="imx/sdma/sdma-imx6q.bin"

 5. 对修改的Linux源码重新编译,编译过程如下图所示:

 6. 将编译好的Linux镜像文件(zImage)和设备树文件(imx6ull-alientek-emmc.dtb)下载到ALIENTEK开发板,启动完成后如下图所示:

 由上图可知, ”imx-sdma 20ec000.dma-controller: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -2“ 错误已经解决,但是又出现了 ”cfg80211: failed to load regulatory.db“ 错误。
2.2 cfg80211: failed to load regulatory.db
 这个错误信息表明Linux内核的cfg80211配置组件在尝试加载规范数据库regulatory.db时失败了。cfg80211是无线电规范配置的核心部分,regulatory.db文件包含了各种国家和地区的无线电规范规定。这个问题通常发生在加载内核模块时,比如在启动过程中或者通过modprobe命令手动加载cfg80211模块时。
 可能的原因包括:
-  regulatory.db文件缺失或损坏。 
-  文件系统权限问题,导致内核无法读取该文件。 
-  内核配置问题,可能是内核编译时未包含相应的配置。 解决方法: 
-  确认文件存在:检查 /lib/firmware/目录下是否有regulatory.db文件。
-  文件权限:确保内核有足够的权限去读取regulatory.db文件。 
-  重新编译内核:如果是内核配置问题,可能需要重新编译内核,确保包含了无线电规范的支持。 
-  手动加载文件:尝试手动加载regulatory.db文件,可以使用 modprobe命令。
-  更新固件:有时候固件更新能解决这类兼容性问题。 
 通过检查Linux 5.15.71内核源码,发现/lib目录下并没有firmware目录,解决办法是手动创建/lib/firmware/目录并从https://mirrors.edge.kernel.org/网站下载最新的包,解压后将文件 regulatory.db 和 regulatory.db.p7s 复制到新建的/lib/firmware中,如下图所示:




 修改Linux内核配置文件imx_alientek_emmc_defconfig中CONFIG_CFG80211=y 修改为 CONFIG_CFG80211=m,即将内核加载 regulatory database 更改为模块加载 regulatory database ,修改内容如下图所示:

 重新编译Linux内核源码,将编译好的Linux镜像文件下载到ALIENTEK-ALPHA开发板,重启后如下图所示:

 由上图可知, “cfg80211: failed to load regulatory.db“ 错误已经解决。










![[数据结构] 万字解析排序算法](https://img-blog.csdnimg.cn/img_convert/0ae1f7056d7684149654bd0887328adf.png)








