在编译内核时添加驱动的固件

最近调驱动时,无法正常加载引导。

使用的内核5.10

内核启动先于文件系统,内核启动时驱动无法访问固件文件,所以无法加载驱动。

有2个办法,可以解决,一是驱动编译KO模块,系统启动后,再动态加载。

这次,说一下第2种方法,驱动固件编译到内核中,

-> Device Drivers
  -> Generic Driver Options  --->

  firmware blobs to build into the kernel binary     # 指定须要载入的固件
  (./firmware) Firmware blobs root directory      # 指定固件所在的(根)文件夹。与上面选项搭配指定详细固件

这种方式比较省事,集成度高一点。

Linux系统中编译内核驱动模块和设备树是嵌入式开发和系统定制中的常见任务。这一过程涉及到多个步骤,包括准备内核源码、配置编译选项、编译内核、模块和设备树等。以下是详细的指导步骤。 ### 准备工作 首先,确保已经获取了适合的Linux内核源代码。可以从官方站点下载,例如[Linux官方镜像](https://mirrors.edge.kernel.org/pub/linux/kernel/),或者从芯片厂商、开发板厂商获取特定版本的内核源码[^4]。接下来,需要安装必要的编译工具和依赖项。在基于Debian的系统上,可以使用如下命令安装: ```bash sudo apt-get update sudo apt-get install build-essential libncurses-dev flex bison libssl-dev ``` ### 配置内核 进入内核源码目录后,可以通过`make menuconfig`命令启动图形化配置界面,选择需要编译内核的功能和模块。对于新手来说,建议先从默认配置开始,逐步添加需要的功能。如果目标平台有特定的配置文件,也可以直接复制该配置文件到源码根目录并命名为`.config`。 ### 编译内核和模块 配置完成后,执行以下命令开始编译内核和模块: ```bash make -j$(nproc) make modules -j$(nproc) ``` 这里的`-j$(nproc)`参数用于指定并行编译的线程数,加快编译速度。编译完成后,内核映像通常位于`arch/x86/boot/bzImage`(具体路径取决于目标架构)。 ### 编译设备树 对于ARM架构等需要设备树的平台,还需要单独编译设备树文件(.dts)。这可以通过指定目标设备树名称来完成: ```bash make dtbs ``` 或者编译特定的设备树: ```bash make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- imx6q-sabresd.dtb ``` 这里`ARCH`指定了目标架构,`CROSS_COMPILE`指定了交叉编译器前缀,`imx6q-sabresd.dtb`是要编译的设备树文件名。 ### 安装模块和设备树 编译完成后,需要将模块安装到指定目录,通常为`/lib/modules`,设备树文件则通常放置在`/boot`或特定的固件目录下: ```bash sudo make modules_install dt_install ``` ### 更新引导配置 最后,更新GRUB或其他引导加载程序的配置,以便能够从新编译内核启动。在基于Debian的系统上,可以运行: ```bash sudo update-grub ``` 完成以上步骤后,重启系统并选择新编译内核进行启动即可。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值