在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Linux內核的Makefile、Kconfig和.config文件

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:嵌入式ARM ? 2020-11-12 17:31 ? 次閱讀

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

三者的作用:

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

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

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

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

三者的語法

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作為模塊編譯,即執行make modules時才會被編譯。

2、Kconfig

每個config菜單項都有類型定義: bool布爾類型、 tristate三態(內建、模塊、移除)、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時會根據依賴關系,進行規則的檢查,直接修改.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再燒寫到開發板。

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

責任編輯:xj

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

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

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

    關注

    3

    文章

    1410

    瀏覽量

    41146
  • 開發板
    +關注

    關注

    25

    文章

    5564

    瀏覽量

    102704
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    19598

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

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    迅為RK3568開發板內核模塊實現-編寫 Makefile

    編譯驅動程序還需要使用 Makefile 文件。我們為 helloworld.c 編寫一個簡單的 MakefileMakefile 文件
    發表于 04-24 13:36

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-開發板適配之藍牙

    \\ 02-1 驅動源碼\\08_realtek\\bluetooth\\rtkbt中將這幾個文件復制到內核源碼的drivers/bluetooth/目錄下。另外在ELF 1開發板資料包\\02-Linux
    發表于 03-04 16:52

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

    \\ 02-1 驅動源碼\\08_realtek\\bluetooth\\rtkbt中將這幾個文件復制到內核源碼的drivers/bluetooth/目錄下。另外在ELF 1開發板資料包\\02-Linux
    發表于 03-03 09:56

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

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

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

    創建usr文件夾,在其中建立usr_dev.c,將上述的源代碼保存在其中。 3.2KConfigmakefile設置 Linux Kernel的編譯系統kbuild采用
    發表于 02-17 21:24

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

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

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

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

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

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

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

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

    全志T113雙核異構處理器的使用基于Tina Linux5.0——RTOS系統定制開發

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

    Linux文件系統的掛載過程

    Linux文件系統(rootfs)是Linux系統中所有其他文件系統和目錄的起點,它是內核啟動時掛載的第一個
    的頭像 發表于 10-05 16:50 ?865次閱讀

    linux驅動程序如何加載進內核

    Linux系統中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。 驅動程序的編寫 驅動程序的編寫是Linux驅動開發的基礎。在編
    的頭像 發表于 08-30 15:02 ?999次閱讀

    Linux內核測試技術

    Linux 內核Linux操作系統的核心部分,負責管理硬件資源和提供系統調用接口。隨著 Linux 內核的不斷發展和更新,其復雜性和代碼規
    的頭像 發表于 08-13 13:42 ?937次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>測試技術

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

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

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

    /kconfig.cmake:76 (file): file problem creating directory: /config Call Stack (most recent call first
    發表于 06-26 06:16
    主站蜘蛛池模板: 成人一级毛片 | 日韩精品一区二区三区毛片 | 亚洲二区在线观看 | 国产亚洲视频在线播放大全 | 人色网| 奇米狠狠干 | 亚洲欧美日韩国产一区二区三区精品 | 欧美性一区二区三区 | 国产精品美女一级在线观看 | 四虎永久精品视频在线 | 欧美色视频日本片免费高清 | 国产精品久久女同磨豆腐 | 日本在线黄| 日日干夜夜骑 | 爱爱帝国亚洲一区二区三区 | 久久国产午夜精品理论篇小说 | 日本三级吹潮 | 一区二区三区免费视频网站 | 久久riav二区三区 | 在线色网站| 成熟妇女毛耸耸性视频 | 性欧美xxxxhd| 午夜影院普通 | 乱码中文字幕人成在线 | 一本大道一卡二卡 | 97爱爱| 久久久国产在线 | 黄色大片视频网站 | 99精品热视频 | 中国一级做a爰片久久毛片 中韩日欧美电影免费看 | 久久久成人影院 | 黄色在线视频免费 | 在线观看国产精美视频 | 国产成人午夜精品影院游乐网 | 国产区一区二区三 | 一级看片免费视频 | 好男人社区www在线资源视频 | 久久久午夜视频 | 中文字幕一区二区三区永久 | 性夜黄 a 爽免费看 性夜黄a爽影免费看 | 天天舔夜夜操 |