在 LInux 的 Kernel 中添加驱动

  我们在做系统移植的过程中,从一些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 注意:路径是: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/ 目录下。

  不同设备的设备树配置不同,需要看该设备挂载在哪个节点上,再在相对应的节点添加改驱动的设备节点信息,一些设备信息配置官网会给出相应的文档,一些没有的就需要自己去查,还有一些设备信息可以在Linux 源码目录 /Documentation/devicetree/bindings里查看。

  例如, 这里举例的例子的设备树就在 :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

原文地址:https://www.cnblogs.com/xingboy/p/14977729.html