zoukankan      html  css  js  c++  java
  • 在 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

  • 相关阅读:
    C++ 多线程 (4) 互斥量(mutex)与锁(lock)
    C++ 多线程(3)std::thread 详解
    c++ 多线程(2)创建线程对象的方法
    CMake解决c++11的phread库问题:undefined reference to `pthread_create’
    生成对抗网络--Generative Adversarial Networks (GAN)
    语义分割(semantic segmentation)——U-Net
    目标检测SSD: Single Shot MultiBox Detector
    基于内容的图像检索(CBIR) ——以图搜图
    去噪自动编码器
    利用Chrome开发者工具功能进行网页整页截图的方法
  • 原文地址:https://www.cnblogs.com/xingboy/p/14977729.html
Copyright © 2011-2022 走看看