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

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

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

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

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

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

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

三者的作用:

簡(jiǎn)單來說就是去飯店點(diǎn)菜:Kconfig是菜單,Makefile是做法,.config就是你點(diǎn)的菜。

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

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

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

三者的語(yǔ)法

Makefile

參考:linux-3.4.2/drivers/Makefile

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

(1)直接編譯

obj-y += xxx.o

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

(2)條件編譯

obj -$(CONFIG_HELLO) += xxx.o

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

(3)模塊編譯

obj-m +=xxx.o

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

2、Kconfig

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

作用:決定make menuconfig時(shí)展示的菜單項(xiàng),

參考: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:配置選項(xiàng)的名稱,省略了前綴"CONFIG_"

Tristate:

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

bool:

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

dependon:

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

select:

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

help:

幫助信息。

目錄層次迭代:

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

3、.config

參考:linux-3.4.2/.config

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

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

(1)make menuconfig

(2)make xxx_defconfig

(3)直接修改.config

注意: 如果直接修改.config,不一定會(huì)生效,因?yàn)橛行┡渲每赡艽嬖谝蕾囮P(guān)系,make時(shí)會(huì)根據(jù)依賴關(guān)系,進(jìn)行規(guī)則的檢查,直接修改.config有時(shí)無效,所以不推薦直接修改。

以上可能有點(diǎn)抽象,下面舉例說明:

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

步驟:

(1)在drivers目錄下新建hello文件夾,里面實(shí)現(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時(shí)顯示的名字

(2)修改上一級(jí)(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)核啟動(dòng)Log,偉大的helloworld 出來了!說明hello.c成功編進(jìn)內(nèi)核

責(zé)任編輯:xj

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

文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    3

    文章

    1379

    瀏覽量

    40358
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5116

    瀏覽量

    97917
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19199

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

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

    飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核編譯之初次編譯

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

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

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

    Linux文件系統(tǒng)的掛載過程

    Linux文件系統(tǒng)(rootfs)是Linux系統(tǒng)中所有其他文件系統(tǒng)和目錄的起點(diǎn),它是內(nèi)核啟動(dòng)時(shí)掛載的第一個(gè)
    的頭像 發(fā)表于 10-05 16:50 ?477次閱讀

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    Linux系統(tǒng)中,驅(qū)動(dòng)程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們?cè)试S內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的控制和管理。 驅(qū)動(dòng)程序的編寫 驅(qū)動(dòng)程序的編寫是Linux驅(qū)動(dòng)開發(fā)的基礎(chǔ)。在編
    的頭像 發(fā)表于 08-30 15:02 ?549次閱讀

    linux驅(qū)動(dòng)程序的編譯方法有哪兩種

    Linux驅(qū)動(dòng)程序的編譯方法主要可以歸納為兩種: 手動(dòng)編譯 和 使用內(nèi)核構(gòu)建系統(tǒng)(Makefile)自動(dòng)編譯 。 1. 手動(dòng)編譯 手動(dòng)編譯驅(qū)動(dòng)程序通常涉及直接使用GCC(GNU Compiler
    的頭像 發(fā)表于 08-30 14:39 ?870次閱讀

    Linux內(nèi)核測(cè)試技術(shù)

    Linux 內(nèi)核Linux操作系統(tǒng)的核心部分,負(fù)責(zé)管理硬件資源和提供系統(tǒng)調(diào)用接口。隨著 Linux 內(nèi)核的不斷發(fā)展和更新,其復(fù)雜性和代碼規(guī)
    的頭像 發(fā)表于 08-13 13:42 ?544次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>測(cè)試技術(shù)

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

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

    esp32生成makefile的時(shí)候,始終提示出錯(cuò),為什么?

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

    在全志V851SE開發(fā)板TinyVision上 使用 SyterKit 啟動(dòng) Linux 6.7 主線內(nèi)核

    TinyVision 使用 SyterKit 啟動(dòng) Linux 6.7 主線內(nèi)核 SyterKit SyterKit 是一個(gè)純裸機(jī)框架,用于 TinyVision 或者其他 v851se/v851s
    發(fā)表于 05-20 09:35

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

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

    I.MX6ULL-ElfBoard ELF1板卡- Uboot目錄結(jié)構(gòu)介紹

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

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

    Makefile可以根據(jù)指定的依賴規(guī)則和文件是否有修改來執(zhí)行命令。常用來編譯軟件源代碼,只需要重新編譯修改過的文件,使得編譯速度大大加快。
    的頭像 發(fā)表于 01-25 11:18 ?754次閱讀
    主站蜘蛛池模板: 高清不卡伦理电影在线观看| 午夜影院和视费x看| 欧美激情一区二区三区视频| 无码专区aaaaaa免费视频| 在线观看视频亚洲| 国产成人久久精品AV| 久久这里只有精品国产99| 我在厨房摸岳的乳HD在线观看| 在线精品视频免费观看| 国产香蕉视频| 日韩亚洲欧美中文高清在线| 2021久久最新国产精品| 国产亚洲精品97在线视频一| 欧美激情性AAAAA片欧美 | 伊人热| 国产精品久久人妻无码网站一区L| 欧美zzzoooxxx| 亚洲色大成网站WWW永久麻豆| 成人毛片一区二区三区| 免费99精品国产人妻自在线| 亚洲一卡二卡三卡四卡2021麻豆| 国产99视频精品免费播放| 年轻的母亲4线在线观看完整| 亚洲在线2018最新无码| 好吊妞国产欧美日韩视频| 偷拍自怕亚洲在线第7页| 成人免费视频在线播放| 欧美97色伦综合网| 中文字幕亚洲综合小综合在线| 韩国伦理三级| 性直播免费| 国产精品1区在线播放| 日本无卡无吗在线| 把极品白丝老师啪到腿软| 年轻的母亲4线在线观看完整| 69久久国产露脸精品国产| 久久久久久久久亚洲| 亚洲婷婷天堂综合国产剧情| 果冻传媒视频在线播放| 亚洲欧洲自拍偷拍| 久久国内精品视频|