当前位置:网站首页>Kconfig Kbuild

Kconfig Kbuild

2022-07-06 12:01:00 csdndulala

In code engineering, we often see some projects called Kconfig Kbuild The file of
The purpose of this document is : Compile oriented script , Shield hardware differences .Kconfig It's not a special script , It's a way to solve the problem , He can do it in any way :python、shell+makfefile(linux kernal、Busybox).

  1. Introduction

    For embedded or OS for , Faced with hundreds of hardware types , for instance .
    If there are two I2C The hardware needs to be adapted , Common practice :

    • Method 1 ( It is not recommended to abuse this method ,1 The same file will be modified when adding a board , Risk of incorrect modification 2 Not conducive to reading )

      One .c Distinguish by macro Then compile the script / Compile macros to distinguish
      #ifdef I2C_A_HARDWARE
      void i2c_write()
      #endif

      #ifdef I2C_B_HARDWARE
      void i2c_write()
      #endif

    • Method 2

      Distinguish by file i2c_ahardware.c i2cb_hardware.c Finally, it is also distinguished by compiling scripts

      For the second method , When adding a hardware , The built script needs to be modified :

      if I2C_A_ chip
      i2c_ahardware.c Participate in building
      else if I2C_B_ chip
      i2c
      bhardware.c Participate in building
      else if I2C_X_ chip
      i2c
      x_hardware.c Participate in building

      else if chip xxx



      endif

    You can imagine when there are hundreds of chips ,makefile What will it be like , Let alone if else Nested scenes 、 File path modification 、 File name modification 、 Code integration , The modification of the compiled script caused by , really ....

    Think about it
    linux kernal How a set of code fits thousands of boards
    U-boot How to support thousands of boards

  2. Kconfig How it works

    Kconfig Working steps of
    1) Read... In the current directory .config file ( If not, follow Kconfig File default configuration )
    2) according to .config The content of , Display the corresponding interface
    3) The programmer selects the components of the board to be built through the interface
    4) sign out Kconfig Interface , Two files will be saved :.config、autoconf.h

    Kconfig file :
     Insert picture description here
    Kconfig Interface after file operation : Users choose (* For choice )
     Insert picture description here
    Generated .config file ( This file can be used to initialize Kconfig Interface , It can also be saved as configuration files of different hardware . Use different configuration files to replace complex if else)
     Insert picture description here

    Kbuild file : Include and exclude the selected files
     Insert picture description here
    When choosing I2C_A, The final obj-y = i2c_a_hardware.o This is the input of the compilation script .

    autoconf.h ( according to Kconfig The selection result of , It can be used as a method 1 Macro definition file )
     Insert picture description here
    Kconfig Of python Implementation code can refer to :
    github project ulfalizer/Kconfiglib
    The use of this library :
    https://blog.csdn.net/u010018991/article/details/81867316

  3. summary

    • Kconfig It is equivalent to layering the functions of the compiled script , Shielding all kinds of boards 、 Chip differences
    • The original if else Branch still " There is ", It is only branched by multiple hardware boards .config Profile substitution
    • Kconfig It can also be applied to pure software scenarios , It can support cutting and customization of pure software

    There are two ways to use in your own project Kconfig
    Linux Kernel Used a bunch of scripts , stay scripts Under the table of contents , Belong to GPL agreement .
    Kconfiglib Is another option , It USES Python Script to achieve Kconfig, This library License More friendly to business software .

原网站

版权声明
本文为[csdndulala]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060913337374.html