日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【转】Kconfig,Makefile 和 .config

發布時間:2025/5/22 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】Kconfig,Makefile 和 .config 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文網址:http://blog.csdn.net/nxh_love/article/details/11846861

最新在做Sensor驅動移植的時候,發現了Android driver 中有Kconfig,Makefile文件。在查看編譯后的文件時,又發現還存在.config文件。自己對這幾個文件不明白,用度娘來整理下網友對這幾個文件的理解。

? ? ? ? 分布在各目錄下的Kconfig構成了一個分布式的內核配置數據庫,每個Kconfig分別描述了所屬目錄源文件相關的內核配置菜單。在內核配置make menuconfig(或xconfig等)時,從Kconfig中讀出配置菜單,用戶配置完后保存到.config(在頂層目錄下生成)中。在內核編譯時,主Makefile調用這個.config,就知道了用戶對內核的配置情況。Kconfig就是對應著內核的配置菜單。假如要想添加新的驅動到內核的源碼中,可以通過修改Kconfig來增加對我們驅動的配置菜單,這樣就有途徑選擇我們的驅動,假如想使這個驅動被編譯,還要修改該驅動所在目錄下的Makefile。

Kconfig

? ? 先來看下一個相對完整的Kconfig文件:

?

[html]?view plaincopy
  • menuconfig?MISC_DEVICES??
  • ????????bool?"Misc?devices"??
  • ????????---help---??
  • ??????????Say?Y?here?to?get?to?see?options?for?device?drivers?from?various??
  • ??????????different?categories.?This?option?alone?does?not?add?any?kernel?code.??
  • ??
  • ??????????If?you?say?N,?all?options?in?this?submenu?will?be?skipped?and?disabled.??
  • ??
  • if?MISC_DEVICES??
  • ??
  • config?ST_L3GD20_GYR??
  • ????????tristate?"L3GD20_GYR?gyroscope?sensor?support"??
  • ????????depends?on?I2C=y??
  • ????????help??
  • ??????????If?you?say?yes?here?you?get?support?for?ST's??
  • ??????????gyroscope?sensors?L3GD20_GYR.??
  • ??
  • choice??
  • ????????prompt?"Preemption?Model"??
  • ????????depends?on?SENSORS_AFA750??
  • ????????default?CALI_NONE??
  • ??
  • config?CALI_NONE??
  • ????????bool?"None"??
  • ????????help??
  • ??????????Say?yes?here?to?disable?calibration?function?for?AFA750??
  • ??
  • config?CALI_POSITIVE??
  • ????????bool?"positive?calibration"??
  • ????????help??
  • ??????????Say?yes?here?when?the?afa750?and?LCD?are?laid?towared?the?same?direction?on?your?board??
  • ??
  • endchoice??
  • ??
  • config?SENSORS_LSM303D??
  • ????????tristate?"LSM303?sensor?driver"??
  • ????????depends?on?I2C=y??
  • ????????help??
  • ??????????Say?yes?here?to?support?the?sensor??
  • ??
  • endif??
  • 1.語法:
    ? ? ? ? ? ?config ? symbol
    ? ? ? ? ? ? ? ? ? ? ? ? ?options
    ? ? ? ? ? ?symbol是一個新的標記的菜單項,options是在這個新的菜單項下的屬性和選項。

    ?

    2.菜單結構:

    ? ? ? ? ? 配置文件描述了菜單選項,每行都是以一關鍵字開頭(除了幫助信息)。下面的關鍵字結束一菜單選項:
    ? ? ? ? ?- config
    ? ? ? ? - menuconfig
    ? ? ? ? - choice/endchoice
    ? ? ? ? - comment
    ? ? ? ? - menu/endmenu
    ? ? ? ? - if/endif
    ? ? ? ? - source
    2.options類型定義:
    ? ? ? ? 每個config菜單項都要有類型定義:bool布爾類型、 tristate三態(內建、模塊、移除)、 string字符串、 hex十六進制、 integer整型。

    ? ? ? ? 例如:

    [html]?view plaincopy
  • config?CALI_NONE??
  • ????????bool?"None"??
  • ? ? ? ? ?bool類型的只能選中或不選中,tristate類型的菜單項多了編譯成內核模塊的選項,如果選擇編譯成內核模塊,則會在.config中生成一個CONFIG_CALI_NONEE=m的配置,如果選擇內建,就是直接編譯成內核影響,就會在.config中生成一個CONFIG_CALI_NONE=y的配置.

    3.依賴型定義depends on或requires
    ? ? ? ? ? ?指此菜單的出現與否依賴于另一個定義

    [html]?view plaincopy
  • config?SENSORS_LSM303D??
  • ????????????tristate?"LSM303?sensor?driver"??
  • ?????????????depends?on?I2C=y??
  • ? ? ? ? ? 這個例子表明SENSORS_LSM303D這個菜單項只I2C有效。

    4.select與depends on是相反的邏輯關系。
    ? ? ? ? ? ?A depends on B
    ? ? ? ? ? ?那么只有在B選中才能選A
    ? ? ? ? ? ?A select B
    ? ? ? ? ? 那么只要選中A就會選中B
    5.幫助性定義
    ? ? ? ? ? ?只是增加幫助用關鍵字help或者---help---,"---help---" 和 "help" 在實現的作用上沒有區別,"---help---" 有助于將文件中的配置邏輯與給開發人員的提示分開。

    6.prompt?--輸入提示

    Makefile

    1.頂層的Makefile文檔讀取 .config文檔的內容,并總體上負責build內核和模塊。
    2.Arch Makefile則提供補充體系結構相關的信息。?
    3.scripts目錄下的Makefile文檔包含了任何用來根據kbuild Makefile 構建內核所需的定義和規則。
    ? ? ? ? ? ? 其中.config的內容是在make menuconfig的時候,通過Kconfig文檔配置的結果,在/Documentation/kbuild目錄下有詳細的介紹有關kernel makefile的知識。

    舉個例子:

    假設想把G-sensor LSM303D驅動code加載到工程中,配置內核時該怎么辦呢?
    1:將您寫的lsm303d.c 文檔添加到/driver/misc/ 目錄下。
    2:修改/driver/misc/ 目錄下的kconfig文檔:

    [html]?view plaincopy
  • config?SENSORS_LSM303D??
  • ????????tristate?"LSM303?sensor?driver"??
  • ????????depends?on?I2C=y??
  • ????????help??
  • ??????????Say?yes?here?to?support?the?sensor??
  • 3:修改該目錄下makefile文檔。
    添加code:

    [html]?view plaincopy
  • obj-$(CONFIG_SENSORS_LSM303D)???+=?lsm303d.o??
  • 從上述分析知道CONFIG_SENSORS_LSM303D 是從.config 中讀出的。
    4.配置kernel下configs/XXXX_defconfig文件
    添加code:

    [html]?view plaincopy
  • CONFIG_SENSORS_LSM303D=y??
  • 當您編譯內核時,將會讀取.config文檔,當發現CONFIG_SENSORS_LSM303D=y,系統在調用/driver/misc下的makefile 時,將會把 lsm303d.o 加入到內核中。即可達到您的目的。

    ?

    ?

    主要參考文章:http://blog.sina.com.cn/s/blog_4a377e150100c896.html

    轉載于:https://www.cnblogs.com/wi100sh/p/4613584.html

    總結

    以上是生活随笔為你收集整理的【转】Kconfig,Makefile 和 .config的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。