, 假如選擇編譯成內核模塊,則會在.config中生成一個 CONFIG_HELLO_MODULE=m的配置,選擇Y就是直接編進內核,會在.config中生成一個 CONFIG_HELLO_MODULE=y的配置項。Tristate后的字符串是make menuconfig時顯示的配置項名稱。" />

色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺談內核的Makefile、Kconfig和.config文件

strongerHuang ? 來源:百問科技 ? 作者:strongerHuang ? 2020-11-29 10:40 ? 次閱讀

Linux內核源碼文件繁多,搞不清Makefile、Kconfig、.config間的關系,不了解內核編譯體系,編譯修改內核有問題無從下手,自己寫的驅動不知道怎么編進內核,不知道怎么配置內核,這些問題都和Makefile、Kconfig、.config有關,下面簡單談談Makefile、Kconfig和.config。希望對你有啟發(fā)。

1

三者的作用

簡單來說就是去飯店點菜:Kconfig是菜單,Makefile是做法,.config就是你點的菜。

Makefile:一個文本形式的文件,編譯源文件的方法。

Kconfig:一個文本形式的文件,內核的配置菜單。

.config:編譯內核所依據的配置。

2

三者的語法

1.Makefile

參考:linux-3.4.2/drivers/Makefile

作用:用來定義哪些內容作為模塊編譯,哪些條件編譯等。子目錄Makefile被頂層Makefile包含。

(1)直接編譯

obj-y += xxx.o

表示由xxx.c或xxx.s編譯得到xxx.o并直接編進內核。

(2)條件編譯

obj -$(CONFIG_HELLO) += xxx.o

根據.config文件的CONFIG_XXX來決定文件是否編進內核。

(3)模塊編譯

obj-m +=xxx.o

表示xxx作為模塊編譯,即執(zhí)行make modules時才會被編譯。

2、Kconfig

每個config菜單項都有類型定義: bool布爾類型、 tristate三態(tài)(內建、模塊、移除)、string字符串、 hex十六進制、integer整型。

作用:決定make menuconfig時展示的菜單項,

參考:linux-3.4.2/drivers/leds/ kconfig:

config LEDS_S3C24XX

tristate "LED Support for Samsung S3C24XX GPIO LEDs"

depends on LEDS_CLASS

depends on ARCH_S3C24XX

help

This option enables support for LEDs connected to GPIO lines

on Samsung S3C24XX series CPUs, such as the S3C2410 and S3C2440.

LEDS_S3C24XX:配置選項的名稱,省略了前綴"CONFIG_"

Tristate:

表示該項是否編進內核、編成模塊。顯示為< > , 假如選擇編譯成內核模塊,則會在.config中生成一個 CONFIG_HELLO_MODULE=m的配置,選擇Y就是直接編進內核,會在.config中生成一個 CONFIG_HELLO_MODULE=y的配置項。Tristate后的字符串是make menuconfig時顯示的配置項名稱。

bool:

此類型只能選中或不選中,make menuconfig時顯示為[ ],即無法配置成模塊。

dependon:

該選項依賴于另一個選項,只有當依賴項被選中時,當前配置項的提示信息才會出現,才能設置當前配置項。

select:

反向依賴關系,該選項選中時,同時選中select后面定義的那一項。

help:

幫助信息。

目錄層次迭代:

Kconfig中有類似語句:source "drivers/usb/Kconfig",用來包含(或嵌套)新的Kconfig文件,使得各個目錄管理各自的配置內容,不必把那些配置都寫在同一個文件里,方便修改和管理。

3、.config

參考:linux-3.4.2/.config

通過前倆個文件的分析,.config的含義已經很清晰:內核編譯參考文件,查看里面內容可以知道哪些驅動被編譯進內核。

配置內核方式有3種(任選其一):

(1)make menuconfig

(2)make xxx_defconfig

(3)直接修改.config

注意:如果直接修改.config,不一定會生效,因為有些配置可能存在依賴關系,make時會根據依賴關系,進行規(guī)則的檢查,直接修改.config有時無效,所以不推薦直接修改。

以上可能有點抽象,下面舉例說明:

寫一個簡單的入口函數輸出hello world的驅動并編譯進內核。

步驟:

(1)在drivers目錄下新建hello文件夾,里面實現hello.c、Makefile、Kconfig。

hello.c:

#include #include #include static int first_drv_init(void) { printk("------------------hello world !--------------------"); return 0; } static void first_drv_exit(void) { printk("------------------exit hello world !--------------------"); } module_init(first_drv_init); module_exit(first_drv_exit); MODULE_LICENSE("GPL");

Makefile:

obj-$(CONFIG_HELLO) += hello.o

Kconfig:

config HELLO

tristate "Hello World for fengyuwuzu"

help

Hello for fengyuwuzu

config HELLO決定名字:CONFIG_HELLO。

Hello World for fengyuwuzu:決定了在make menuconfig時顯示的名字

(2)修改上一級(Linux-3.4.2/drivers下)的Makefile、Kconfig。

Makefile:

obj-y += hello/

Kconfig:

source "drivers/hello/Kconfig"

(3)make menuconfig

(4)make uImage再燒寫到開發(fā)板。

查看內核啟動Log,偉大的helloworld 出來了!說明hello.c成功編進內核

歡迎參考本文實驗,相信你對內核的組織結構會有更清晰的認識。

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2716

    瀏覽量

    47526
  • Linux
    +關注

    關注

    87

    文章

    11312

    瀏覽量

    209697
  • 編譯
    +關注

    關注

    0

    文章

    659

    瀏覽量

    32890

原文標題:淺談內核的Makefile、Kconfig和.config文件

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    飛凌嵌入式ElfBoard ELF 1板卡-Linux內核移植之Makefile介紹

    前面我們編譯內核時,那么多.c文件最終生成一個zImage鏡像。其實是make工具通過解析Makefile文件進行一系列編譯操作,最終生成我們想要的鏡像
    發(fā)表于 01-03 09:39

    飛凌嵌入式ElfBoard ELF 1板卡-內核編譯之初次編譯

    /linux-4.1.15-elf1$ make menuconfig 此圖形界面所呈現的配置選項的菜單列表來源于Kconfig文件(下面章節(jié)會講到),這些配置選擇,就是根據.config讀取出來的,我們也
    發(fā)表于 12-17 09:34

    全志T113雙核異構處理器的使用基于Tina Linux5.0——RTOS系統(tǒng)定制開發(fā)

    分組成,源文件MakefileKconfig,如下: hello_world ├──hello_world.c ├──Kconfig └──Ma
    發(fā)表于 11-22 09:36

    關于Makefile自動生成-autotools的使用

    在Linux應用開發(fā)中,編寫Makefile是一項必備技能,因為它定義了工程中所有文件的編譯順序、規(guī)則和依賴關系,決定了哪些文件需要編譯以及它們的編譯順序。 雖然對初級開發(fā)者而言,編寫復雜
    的頭像 發(fā)表于 07-25 15:50 ?1514次閱讀
    關于<b class='flag-5'>Makefile</b>自動生成-autotools的使用

    SDK 1.0移植到eclipse失敗,如何修改makefile文件呢?

    虛擬機編譯太麻煩,想把SDK 1.0移植到安信可的eclipse編譯環(huán)境,出現如下錯誤,是否需修改makefile文件?如何修改? 錯誤信息錯誤.png (5.31 KiB) Viewed 4998 times 另外,官方什么時候能推出基于eclipse的SDK呢?方
    發(fā)表于 07-12 11:08

    ESP8266 ESP-AT環(huán)境搭好之后,打不開menuconfig怎么解決?

    menuconfig\"... [100%] Built target mconf-idf Loading defaults file /home/esp/esp-at/module_config
    發(fā)表于 06-27 06:57

    esp32生成makefile的時候,始終提示出錯,為什么?

    /kconfig.cmake:76 (file): file problem creating directory: /config Call Stack (most recent call first
    發(fā)表于 06-26 06:16

    快來用Makefile管理工程,提高工作效率!

    一、makefile簡介Makefile是一種特別設計用來幫助項目的構建管理的文件。它定義了編譯器和IDE工程管理系統(tǒng)自動執(zhí)行的命令集合,主要用于自動化編譯,減輕重復性任務的負擔。Makefi
    的頭像 發(fā)表于 05-18 08:10 ?347次閱讀
    快來用<b class='flag-5'>Makefile</b>管理工程,提高工作效率!

    linux系統(tǒng)中Makefile的使用方法

    Makefile是一種編譯控制文件,廣泛用于項目的自動化構建。它定義了一系列的規(guī)則來指導構建的過程。通過Makefile,開發(fā)者可以輕松管理大型項目的編譯鏈接、清理等任務。本文將從Makefi
    的頭像 發(fā)表于 05-11 08:49 ?683次閱讀

    C語言Makefile入門到精通全攻略

    Makefile是一種編譯控制文件,廣泛用于項目的自動化構建。它定義了一系列的規(guī)則來指導構建的過程。
    發(fā)表于 04-28 15:02 ?1387次閱讀

    全志XR806 FreeRTOS快速開發(fā)入門

    文件 ├── chip.mk ├── config.mk ├── gcc.mk ├── Kconfig ├── Makefile ├── include # 頭
    發(fā)表于 03-01 10:49

    I.MX6ULL-ElfBoard ELF1板卡- Uboot目錄結構介紹

    build.sh:編譯腳本,直接執(zhí)行此腳本即可完成工程編譯 Makefile:一個致力于工程編譯的文件,將來整個uboot編譯的時候就是用這個Makefile來編譯管理的 Kconfig
    發(fā)表于 01-26 15:27

    嵌入式學習-ElfBoard ELF 1板卡- Uboot目錄結構介紹

    build.sh:編譯腳本,直接執(zhí)行此腳本即可完成工程編譯 Makefile:一個致力于工程編譯的文件,將來整個uboot編譯的時候就是用這個Makefile來編譯管理的 Kconfig
    發(fā)表于 01-26 15:24

    Makefile可以做什么?Makefile的基本格式

    Makefile可以根據指定的依賴規(guī)則和文件是否有修改來執(zhí)行命令。常用來編譯軟件源代碼,只需要重新編譯修改過的文件,使得編譯速度大大加快。
    的頭像 發(fā)表于 01-25 11:18 ?718次閱讀

    全面而詳細的Makefile使用手冊

    Makefile是一種編譯控制文件,廣泛用于項目的自動化構建。它定義了一系列的規(guī)則來指導構建的過程。
    的頭像 發(fā)表于 01-24 12:35 ?943次閱讀
    主站蜘蛛池模板: 国产一区内射最近更新| 亚洲无人区码二码三码区别图| 动漫成人片| 一品道门在线视频高清完整版| 青草伊人久久| 久久香蕉国产线看观看精品| 成在线人免费| 67194成网页发布在线观看| 亚洲a免费| 日本亚洲精品色婷婷在线影院| 久久九九日本韩国精品| 国产乱码免费卡1卡二卡3卡四卡| 91香蕉福利一区二区三区| 亚洲国产高清在线观看视频| 日本肉肉口番工全彩动漫| 另类专区hy777| 娇小亚裔被两个黑人| 国产精品高清在线观看93| adc高清在线观看| 最新快播网站| 一级毛片全部免| 亚洲精品理论电影在线观看| 乌克兰美女x?x?y?y| 日韩精品一区二区三区AV在线观看| 伦 乱真实故事| 久久免费国产| 久久成人亚洲| 精品久久伊人| 黄 色 网 站 免 费 涩涩屋| 国产免费久久爱久久啪| 国产不卡无码高清视频| 俄罗斯兽交XXXXX在线| 超碰免费视频caopoom9| www色视频在线观看| caoporn 超碰在线视频| 9久高清在线不卡免费无吗视频| 19十主播福利视频| 2019天天射干| 99久久精品国产国产毛片| 99精彩免费观看| 99精品电影一区二区免费看|