日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android编译系统中的Kconfig,Makefile,.config编译系统浅析

發布時間:2025/4/16 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android编译系统中的Kconfig,Makefile,.config编译系统浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?在對Android進行編譯時,用的就是Linux下的Makefile和Kconfig編譯系統,對整個系統進行編譯。當然還包括很多配置命令,比如make defconfig, make oldconfig以及各種編譯的腳本,共同構成Android的整個編譯系統!

跟make menuconfig這個命令相關的文件,包括三類,包括.config,Kconfig,Makefile。為什么不說三個,而說三類呢?因為 Kconfig和Makefile是配合使用的,在很多的子目錄都存在,而.config只存在于根目錄中。這三個文件的作用分別是:

Kconfig:定義了配置項

**defconfig:對配置項進行賦值

Makefile:建立配置項的生成法則

???????? 看到這里,可能有人就頭疼了,到底什么是配置項,什么是生成法則。這里要求具有理解Makefile的能力,如果不懂的話,可以去找Makefile的相關資料。

如果使用舉例的話,比較容易理解。比如,我編寫了一個新設備的驅動文件sprd_sim.c,這里不關心sprd_sim.c的內容。如果想把sprd_sim.c編譯到Android系統中,需要按照以下的步驟來完成。

1)?????? 將sprd_sim.c放到Android系統驅動中的一個相關目錄中,這個目錄只要求已存在Kconfig和Makefile中,比如源碼kernel目錄/kernel/driver/目錄中。

2)?????? 在這個目錄的Kconfig中添加

[html]?view plaincopy
  • menu?"SPRD_SIM?support"??
  • config?SPRD_SIM??
  • ????bool?"Support?for?SPRD_SIM"??
  • ????help??
  • ??????Say?Y?here?to?add?support?for?leadexd?SPRD_SIM??
  • ??
  • if?SPRD_SIM??
  • config?SPRD_SIM_LEADEXCEED??
  • ????tristate?"LEADEXD?Sprd?SIM?Driver"??
  • ????depends?on?HAS_IOMEM??
  • ????help??
  • ?????Leadexceed?sprd?SIM?Driver?implemented?by?Jobs-Hu.??
  • ??
  • endif??
  • endmenu??


  • 3)?????? 在Makefile中添加

    [html]?view plaincopy
  • #??
  • #??Makefile?for?the?sim?detect?device?drivers.??
  • #??
  • #?16?May?2014,?hu<Jobs.Hu@leadexd.com>??
  • #??
  • #??Object?files?in?subdirectories??
  • obj-$(CONFIG_SPRD_SIM_LEADEXD)????+=?sprd_sim.o??
  • obj-y?????

  • ? ?

    4)?????? 在.config中可以添加?

    [html]?view plaincopy
  • CONFIG_SPRD_SIM=y??
  • CONFIG_SPRD_SIM_LEADEXD=y??

  • 或者在執行make menuconfig時,找到顯示名為MY_DRIVER的選項,使用空格選中。但是這個一般不需要我們自己去執行,一般執行相關的編譯腳本后,這些配置信息便會

    自動解析到相關的config文件里

    5)在board.c中加入該設備

    [html]?view plaincopy
  • static?struct?platform_device?*devices[]?__initdata?=?{??
  • #ifdef?CONFIG_ION??
  • ????&sprd_ion_dev,??
  • #endif??
  • ????&sprd_emmc_device,??
  • ????&sprd_sdio0_device,??
  • ????????&sprd_sim_device,??
  • ?????????????....??
  • ???????? 總而言之,就是如果需要向系統內核中添加一個功能,那么首先定義一個配置項對應于這個功能,添加到特定的Kconfig文件中。然后在Makefile 里,定義這個配置項需要編譯哪些文件。最后就可以通過make menuconfig或者直接修改.config來使能這個配置項。????????

    其實,.config就是將執行make menuconfig后,對配置項的修改保存到一個文件中而已。當然,各個公司會按照自己的工作需要,加入一些編譯腳本,執行新的編譯指令,也會生成.config文件,如果沒有.config時,make menuconfig會按照默認值來顯示。
    參考文檔:http://blog.chinaunix.net/uid-24227137-id-3277449.html
    http://shunfengwei.blog.163.com/blog/static/17522511720123494332301/
    http://blog.csdn.net/estate66/article/details/5886816

    http://blog.csdn.net/dianhuiren/article/details/6917132


    總結

    以上是生活随笔為你收集整理的Android编译系统中的Kconfig,Makefile,.config编译系统浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

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