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

99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

3天內(nèi)不再提示

淺談內(nèi)核的Makefile、Kconfig和.config文件

strongerHuang ? 來源:百問科技 ? 作者:strongerHuang ? 2020-11-29 10:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1

三者的作用

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

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

Kconfig:一個文本形式的文件,內(nèi)核的配置菜單。

.config:編譯內(nèi)核所依據(jù)的配置。

2

三者的語法

1.Makefile

參考:linux-3.4.2/drivers/Makefile

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

(1)直接編譯

obj-y += xxx.o

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

(2)條件編譯

obj -$(CONFIG_HELLO) += xxx.o

根據(jù).config文件的CONFIG_XXX來決定文件是否編進內(nèi)核。

(3)模塊編譯

obj-m +=xxx.o

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

2、Kconfig

每個config菜單項都有類型定義: bool布爾類型、 tristate三態(tài)(內(nè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:

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

bool:

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

dependon:

該選項依賴于另一個選項,只有當(dāng)依賴項被選中時,當(dāng)前配置項的提示信息才會出現(xiàn),才能設(shè)置當(dāng)前配置項。

select:

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

help:

幫助信息。

目錄層次迭代:

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

3、.config

參考:linux-3.4.2/.config

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

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

(1)make menuconfig

(2)make xxx_defconfig

(3)直接修改.config

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

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

寫一個簡單的入口函數(shù)輸出hello world的驅(qū)動并編譯進內(nèi)核。

步驟:

(1)在drivers目錄下新建hello文件夾,里面實現(xiàn)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ā)板。

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

歡迎參考本文實驗,相信你對內(nèi)核的組織結(jié)構(gòu)會有更清晰的認識。

責(zé)任編輯:lq

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

    關(guān)注

    7

    文章

    2788

    瀏覽量

    50465
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11512

    瀏覽量

    213914
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    34033

原文標題:淺談內(nèi)核的Makefile、Kconfig和.config文件

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    使用ENV工具進行menuconfig找不到路徑怎么解決?

    to the empty string. 但是rt-thread文件夾下確實存在Kconfig文件 報錯來源的Kconfig文件如下
    發(fā)表于 06-12 07:51

    飛凌嵌入式ElfBoard ELF 1板卡-Uboot目錄結(jié)構(gòu)介紹

    Makefile:一個致力于工程編譯的文件,將來整個uboot編譯的時候就是用這個Makefile來編譯管理的Kconfig:用于生成內(nèi)核
    發(fā)表于 05-22 10:53

    迅為RK3568開發(fā)板內(nèi)核模塊實現(xiàn)-編寫 Makefile

    編譯驅(qū)動程序還需要使用 Makefile 文件。我們?yōu)?helloworld.c 編寫一個簡單的 Makefile, Makefile 文件
    發(fā)表于 04-24 13:36

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-開發(fā)板適配之藍牙

    /Makefile文件,添加如下內(nèi)容:obj-$(CONFIG_BT_HCIBTUSB_RTLBTUSB) := rtk_btusb.ortk_btusb-objs := rtk_bt.o
    發(fā)表于 03-04 16:52

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-開發(fā)板適配之wifi

    的驅(qū)動,以及KconfigMakefile文件。elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga/drivers/net/wireless
    發(fā)表于 03-03 10:01

    飛凌嵌入式ElfBoard ELF 1板卡-開發(fā)板適配之藍牙

    /Makefile文件,添加如下內(nèi)容:obj-$(CONFIG_BT_HCIBTUSB_RTLBTUSB) := rtk_btusb.ortk_btusb-objs := rtk_bt.o
    發(fā)表于 03-03 09:56

    飛凌嵌入式ElfBoard ELF 1板卡-開發(fā)板適配之wifi

    的驅(qū)動,以及KconfigMakefile文件。elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga/drivers/net/wireless
    發(fā)表于 02-28 09:08

    【ELF 2學(xué)習(xí)板試用】1、快速入門、簡單模塊編譯和運行

    創(chuàng)建usr文件夾,在其中建立usr_dev.c,將上述的源代碼保存在其中。 3.2KConfigmakefile設(shè)置 Linux Kernel的編譯系統(tǒng)kbuild采用KConfig
    發(fā)表于 02-17 21:24

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-初識設(shè)備樹之Makefile修改

    /Makefile:我們使用的是i.MX6ULL平臺,所以,編譯器會編譯生成CONFIG_SOC_IMX6ULL命令下.dtb文件,這些.dtb都應(yīng)有其對應(yīng)的.dts文件。如果我們因為
    發(fā)表于 01-13 09:09

    飛凌嵌入式ElfBoard ELF 1板卡-初識設(shè)備樹之Makefile修改

    /Makefile:我們使用的是i.MX6ULL平臺,所以,編譯器會編譯生成CONFIG_SOC_IMX6ULL命令下.dtb文件,這些.dtb都應(yīng)有其對應(yīng)的.dts文件。如果我們因為
    發(fā)表于 01-10 09:23

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之Kconfig介紹

    一下Kconfig語法規(guī)則。 Kconfig語法 Kconfig文件描述了菜單選項,每行都是以關(guān)鍵字開頭,我們逐一解釋關(guān)鍵字意義: config
    發(fā)表于 01-06 10:02

    飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之Kconfig介紹

    一下Kconfig語法規(guī)則。Kconfig語法Kconfig文件描述了菜單選項,每行都是以關(guān)鍵字開頭,我們逐一解釋關(guān)鍵字意義:configconfig
    發(fā)表于 01-04 10:18

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

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

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

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

    關(guān)于Makefile自動生成-autotools的使用

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