IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Kconfig Kbuild -> 正文阅读

[系统运维]Kconfig Kbuild

代码工程中常常会见到一些名为Kconfig Kbuild的文件
这种文件的作用是:面向编译脚本,屏蔽硬件的差异。Kconfig 并不是一种特殊的脚本,而是一种解决问题的方法,他可以用任何方法实现:python、shell+makfefile(linux kernal、Busybox)。

  1. 引子

    对于嵌入式或者OS而言,面对的是成百上千的硬件类型,举个例子。
    假如有两个I2C硬件需要适配,常见的做法:

    • 方法1 (不建议滥用这种方法,1 新增单板时会修改同一文件,有误修改风险 2 不利于阅读)

      一个.c中通过宏区分 然后编译脚本/编译宏来区分
      #ifdef I2C_A_HARDWARE
      void i2c_write()
      #endif

      #ifdef I2C_B_HARDWARE
      void i2c_write()
      #endif

    • 方法2

      通过文件区分 i2c_ahardware.c i2cb_hardware.c 最后也是通过编译脚本区分

      对于第二种方法,当添加一种硬件后,构建的脚本需要修改:

      if I2C_A_芯片
      i2c_ahardware.c 参与构建
      else if I2C_B_芯片
      i2c
      bhardware.c 参与构建
      else if I2C_X_芯片
      i2c
      x_hardware.c 参与构建

      else if 芯片xxx



      endif

    可以想象当有成百上千个芯片时,makefile会成为什么样子,更别说还有if else嵌套的场景、文件路径修改、文件名修改、代码整合,所引发的编译脚本的修改,实在。。。。

    想一想
    linux kernal如何一套代码适配了成千上万的板子
    U-boot如何支持了上千种单板

  2. Kconfig的工作方式

    Kconfig的工作步骤
    1)读取当前目录下的.config文件(没有的话则按照Kconfig文件默认配置)
    2)根据.config的内容,显示相应的界面
    3)程序员通过界面选中本单板将要参与构建的组件
    4)退出Kconfig界面,会保存两个文件:.config、autoconf.h

    Kconfig文件:
    在这里插入图片描述
    Kconfig文件运行后界面:使用者来选择(*代表选择)
    在这里插入图片描述
    生成的.config文件(该文件既可以用来初始化Kconfig界面,也可以保存为不同硬件的配置文件。通过不同的配置文件来替代复杂的if else)
    在这里插入图片描述

    Kbuild文件:将选择的文件进行包含和排除
    在这里插入图片描述
    当选择I2C_A, 最终的obj-y = i2c_a_hardware.o 这个就是编译脚本的输入。

    autoconf.h (根据Kconfig的选择结果生成,可以作为方法1的宏定义文件)
    在这里插入图片描述
    Kconfig的python实现代码可以参考:
    github 项目ulfalizer/Kconfiglib
    该库的使用:
    https://blog.csdn.net/u010018991/article/details/81867316

  3. 总结

    • Kconfig相当于将编译脚本的功能进行分层,屏蔽掉了各种单板、芯片的差异
    • 原先的if else分支仍然"存在",只是被多个硬件单板分支的.config配置文件替代
    • Kconfig也可应用于纯软件场景,可以支持纯软件的裁剪和定制

    有两种方法在自己的工程中使用Kconfig
    Linux Kernel使用了一堆脚本,在scripts目录下,属于GPL协议。
    Kconfiglib是另一个选择,它使用Python脚本来实现Kconfig,这个库的License对商业软件更友好。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:59:27  更:2022-03-24 01:01:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:49:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码