Linux5.15.71编译问题处理

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

​ 系统启动完成后,出现如上错误,如下图所示:

15

​ 百度下出现上述错误信息原因如下:

​ 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 文件中找到如下代码下图所示:

Screenshot 2024-08-03 191652

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

Screenshot 2024-08-03 190318

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

Screenshot 2024-08-03 171008

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

Screenshot 2024-08-03 190425

​ 4. 修改Linux配置文件(imx_alientek_emmc_defconfig),增加以下两条语句,如下图所示:

CONFIG_EXTRA_FIRMWARE_DIR="firmware"
CONFIG_EXTRA_FIRMWARE="imx/sdma/sdma-imx6q.bin"

Screenshot 2024-08-03 190914

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

Screenshot 2024-08-03 192251

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

Screenshot 2024-08-03 201111

​ 由上图可知, ”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模块时。

​ 可能的原因包括:

  1. regulatory.db文件缺失或损坏。

  2. 文件系统权限问题,导致内核无法读取该文件。

  3. 内核配置问题,可能是内核编译时未包含相应的配置。

    解决方法:

  4. 确认文件存在:检查/lib/firmware/目录下是否有regulatory.db文件。

  5. 文件权限:确保内核有足够的权限去读取regulatory.db文件。

  6. 重新编译内核:如果是内核配置问题,可能需要重新编译内核,确保包含了无线电规范的支持。

  7. 手动加载文件:尝试手动加载regulatory.db文件,可以使用modprobe命令。

  8. 更新固件:有时候固件更新能解决这类兼容性问题。

​ 通过检查Linux 5.15.71内核源码,发现/lib目录下并没有firmware目录,解决办法是手动创建/lib/firmware/目录并从https://mirrors.edge.kernel.org/网站下载最新的包,解压后将文件 regulatory.db 和 regulatory.db.p7s 复制到新建的/lib/firmware中,如下图所示:

Screenshot 2024-08-03 205746

Screenshot 2024-08-03 210138

Screenshot 2024-08-03 210420

Screenshot 2024-08-03 210511

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

Screenshot 2024-08-03 210726

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

Screenshot 2024-08-03 211942

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

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 内核 v5.15.149 是 Linux 内核系列的一个特定版本,主要用于提供操作系统的核心功能和驱动程序给各种硬件平台。安装 Linux 内核的具体步骤可能会因系统环境、你想要的安装方法(源代码编译还是预编译的二进制包)以及目标发行版(如 Ubuntu、CentOS 或 Debian 等)的不同而有所不同。以下是一个一般的安装流程概述: 1. **选择安装方式**: - **预编译包**:如果你使用的是像 Ubuntu 这样的基于 Debian 的发行版,可以在 apt 或者 yum 中查找并安装相应的内核版本。 - **源代码编译**:适用于想要自定义内核或者学习编译过程的用户,需要从 kernel.org 下载源代码,配置选项,然后编译和安装。 2. **下载内核源码**: - 访问 <https://www.kernel.org/>,下载对应版本的Linux内核源代码,通常是tar.gz格式的文件。 3. **解压和配置**: - 使用 `tar` 解压缩下载的文件,进入解压后的目录。 - 运行 `make xconfig` (对于源代码编译) 或 `make menuconfig` (对于早期版本),根据屏幕提示进行配置,选择你需要的模块和配置选项。 4. **编译和安装**: - 运行 `make` 开始编译,这可能需要一些时间,取决于你的系统性能。 - 编译完成后,运行 `sudo make modules_install` 和 `sudo make install` 来安装内核模块和新内核。 5. **更新内核配置**: - 如果是替换当前内核,可能需要更新 GRUB 启动引导器的配置,确保新内核可以作为启动选项。 6. **重启系统**: - 安装完成后,重启电脑,系统会在启动时自动加载新的内核v5.15.149。 7. **验证**: - 启动后,可以通过 `uname -r` 命令检查当前使用的内核版本确认是否成功安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值