我们在做系统移植的过程中,从一些arm官网上下载的kernel一般都是只有一些常规的驱动的,很多时候需要我们添加一些新的其他IC的驱动,这里就简单说明一下。
1. 配置Kernel编译环境
主要就是配置交叉编译器。
如果是 arm 的产品,就是 export ARCH=arm
如果是 ARM64 的产品,就是 export ARCH=arm64
其他的配置按常规交叉编译环境配置即可
2. 找到Kernel配置的配置
找到编译 Kernel需要的配置。如果是 ARM 架构的 CPU ,一般位置在 Kernel 目录下的:arch/arm/configs/
如果是 ARM64, 一般配置的位置在kernel目录下的:arch/arm64/configs/
3. 加载配置
像 Amlogic的 A311D 芯片,通过上步的路径找到他的配置 arch/arm64/configs/aplex_cmi_aa158_defconfig (注意:官网下载的源码里该芯片的配置文件文件名并不是这个,这个文件名是我修改过的)
接着加载配置的方法就是:make aplex_cmi_aa158_defconfig ARCH=arm64(ARCH=arm64是指定编译64位的,一般这个 ARCH=arm64 会放在 ~/.bashrc 里面,放在编译这里也行)。
make aplex_cmi_aa158_defconfig ARCH=arm64,这个步骤就是把 arch/arm64/configs/aplex_cmi_aa158_defconfig 里面的配置写到了,Linux 代码目录下的 .config 文件里面。
4. 打开 menuconfig
执行 make menuconfig ARCH=arm64 (或者是32位平台的话,执行 make menuconfig ARCH=arm 根据你的平台来决定) ,把 menuconfig 操作就是把 .config 文件里面的配置读取出来,然后显示在一个可视化的界面里:
如果没有执行 make aplex_cmi_aa158_defconfig ARCH=arm64 的话,那么执行 make menuconfig 可能加载的就是 X86 架构的配置。在 make menuconfig 里面,可以配置自己想要添加的驱动。Exit的时候要选择保存
5. 保存配置
如果是 ARM32 的CPU ,就在 Kernel 目录执行 make savedefconfig ARCH=arm。
如果是 ARM64 的CPU ,就在 Kernel目录执行 make savedefconfig ARCH=arm64。
执行完毕之后,会生成一个保存的配置文件为: defconfig 。
再把 defconfig 文件配置覆盖先前的配置(步骤3加载的配置)。执行指令 cp defconfig arch/arm64/configs/aplex_cmi_aa158_defconfig -rf 这样,配置就保存下来了。
6. menuconfig 添加 HYM8653 RTC 驱动举例
先加载原始的配置:make aplex_cmi_aa158_defconfig 在打开 make menuconfig 找到 RTC 的驱动。
按 Enter是选择目录。按空格键 是切换是否选择, * 代表驱动加载到 Kernel里面去,M 代表编译成模块。空白表示不操作。退出之后保存。执行 make savedefconfig 指令保存配置,再将保存好的 defconfig文件保存在arch/arm64/configs/ 目录下的对应文件:执行指令 cp defconfig arch/arm64/configs/aplex_cmi_aa158_defconfig -rf 进行保存,这样 make 编译的时候就会将 RTC HYM8563 的驱动编译进去。
7. 配置设备树 dts
这一步步骤放在4、5、6步骤前后操作都可以,设备树文件一般的位置:
像 ARM 的CPU ,一般的位置在 Kernel 的 arch/arm/boot/dts/ 目录下。
像 ARM64 的CPU,一般的位置在 Kernel 的 arch/arm64/boot/dts/ 目录下。
不同设备的设备树配置不同,需要看该设备挂载在哪个节点上,再在相对应的节点添加改驱动的设备节点信息。
例如, 这里举例的例子的设备树就在 :arch/arm64/boot/dts/aplex/ (aplex文件夹是我自己添加的,一般官网下载的源码,设备树文件都保存到dts文件夹)目录下:
关于设备树的说明可以参考我另一个文档:https://www.cnblogs.com/xingboy/p/14898899.html
例如 添加 RTC 的设备节点就在: arch/arm64/boot/dts/aplex/cmi_aa158.dts 如下位置:
8. 编译Kernel
一般官网下载的Kernel的编译都有其写好对应的脚本,每个Kernel编译的方法都有一点点不同,如果系统全部是你自己制作的,编译可以参考我另一个博客文章:https://www.cnblogs.com/xingboy/p/14858853.html