日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuà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間的關系,不了解內(nèi)核編譯體系,編譯修改內(nèi)核有問題無從下手,自己寫的驅(qū)動不知道怎么編進內(nèi)核,不知道怎么配置內(nèi)核,這些問題都和Makefile、Kconfig、.config有關,下面簡單談談Makefile、Kconfig和.config。希望對你有啟發(fā)。

三者的作用:

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

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

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

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

三者的語法

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:

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

select:

反向依賴關系,該選項選中時,同時選中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,不一定會生效,因為有些配置可能存在依賴關系,make時會根據(jù)依賴關系,進行規(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)核

責任編輯:xj

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

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

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

    關注

    4

    文章

    1476

    瀏覽量

    43099
  • 開發(fā)板
    +關注

    關注

    26

    文章

    6433

    瀏覽量

    121217
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    20494

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在 Yocto-sdk 中為 Lasyerscaper processo (ls1028a) 啟用 menuconfig 任務?

    消息: 錯誤:linux-qoriq-6.6.52 git-r0 do_menuconfig:do_menuconfig已禁用,請檢查KCONFIG_CONFIG_ENABLE_MENUCONFIG變量
    發(fā)表于 04-20 08:48

    如何理解Linux內(nèi)核中的PCIe驅(qū)動

    我們習慣了用 Verilog 去死磕 PCIe 的底層協(xié)議狀態(tài)機。但一旦越過硬件邊界來到操作系統(tǒng)層面,Linux 內(nèi)核是如何接管并驅(qū)動這些 PCI/PCIe 設備的呢?由于不同的 CPU 架構(gòu)實現(xiàn)了
    的頭像 發(fā)表于 04-11 17:22 ?1289次閱讀

    如何通過修改內(nèi)核配置來啟用CONFIG_TUN?

    有沒有人嘗試通過修改內(nèi)核配置來啟用CONFIG_TUN?或者如果我們想要此功能,有人知道解決方法嗎?
    發(fā)表于 03-12 06:51

    內(nèi)核.config文件:嵌入式開發(fā)的“底層配置密碼”,90%的開發(fā)者都在靠它掌控系統(tǒng)核心

    在嵌入式 Linux 開發(fā)中,尤其是瑞芯微 RK3588 這類高性能平臺的底層開發(fā),內(nèi)核編譯是繞不開的核心環(huán)節(jié)。
    的頭像 發(fā)表于 02-09 17:07 ?1594次閱讀
    <b class='flag-5'>內(nèi)核</b>.<b class='flag-5'>config</b><b class='flag-5'>文件</b>:嵌入式開發(fā)的“底層配置密碼”,90%的開發(fā)者都在靠它掌控系統(tǒng)核心

    Linux 6.8 內(nèi)核 - 錯誤:找不到 cmdline 扁平化設備樹怎么解決?

    我正在嘗試一個新的 6.8 linux 內(nèi)核,但我在啟動時收到這個錯誤: 從0x44000000到0x40200000的移動圖像,end=41724000 錯誤:未找到 cmdline 扁平化設備樹
    發(fā)表于 02-09 07:13

    深入剖析ARM64內(nèi)核關鍵文件:kernel-6.1/arch/arm64/kernel/head.S

    在 ARM64 架構(gòu)的 Linux 內(nèi)核開發(fā)中,arch/arm64/kernel/head.S是一個繞不開的關鍵文件—— 它是內(nèi)核啟動早期的 “橋梁”,承接 Bootloader 與
    的頭像 發(fā)表于 02-04 17:35 ?1408次閱讀
    深入剖析ARM64<b class='flag-5'>內(nèi)核</b>關鍵<b class='flag-5'>文件</b>:kernel-6.1/arch/arm64/kernel/head.S

    深入RK3588內(nèi)核:rockchip_linux_defconfig的作用與調(diào)試價值

    在 RK3588 芯片的 Linux 開發(fā)中,有一個文件始終是開發(fā)者繞不開的核心 ——kernel/arch/arm64/configs/rockchip_linux_defconfig。無論是首次
    的頭像 發(fā)表于 02-03 15:56 ?1397次閱讀
    深入RK3588<b class='flag-5'>內(nèi)核</b>:rockchip_<b class='flag-5'>linux</b>_defconfig的作用與調(diào)試價值

    內(nèi)核配置項引發(fā)網(wǎng)絡性能下降的深度剖析

    在嵌入式系統(tǒng)開發(fā)中,內(nèi)核配置對系統(tǒng)性能起著關鍵作用。近期在對基于 Rockchip 平臺的 Linux 內(nèi)核配置調(diào)試時,發(fā)現(xiàn)三個內(nèi)核跟蹤器配置項(C
    的頭像 發(fā)表于 02-01 16:48 ?1837次閱讀
    <b class='flag-5'>內(nèi)核</b>配置項引發(fā)網(wǎng)絡性能下降的深度剖析

    Linux系統(tǒng)內(nèi)核參數(shù)調(diào)優(yōu)實戰(zhàn)指南

    Linux 內(nèi)核參數(shù)調(diào)優(yōu)是系統(tǒng)性能優(yōu)化的核心環(huán)節(jié)。隨著云原生架構(gòu)的普及和硬件性能的飛速提升,默認的內(nèi)核參數(shù)配置往往無法充分發(fā)揮系統(tǒng)潛力。在高并發(fā) Web 服務、大數(shù)據(jù)處理、容器化部署等場景下,合理的
    的頭像 發(fā)表于 01-28 14:27 ?758次閱讀

    【「Linux 設備驅(qū)動開發(fā)(第 2 版)」閱讀體驗】Linux內(nèi)核開發(fā)基礎

    感謝電子發(fā)燒友論壇提供的《Linux設備驅(qū)動開發(fā)(第2版)》閱讀機會,測評將從Linux內(nèi)核開發(fā)基礎、Linux內(nèi)核平臺抽象和設備驅(qū)動程序、
    發(fā)表于 01-12 22:45

    Linux內(nèi)核模塊的加載機制

    格式 Linux內(nèi)核模塊通常是.ko文件,也就是Kernel Object的縮寫。這些文件是ELF格式的,但和用戶空間的程序不同,它們包含的是特定于
    發(fā)表于 11-25 06:59

    蜂鳥hbird sdk的Makefile架構(gòu)分析

    一.前言 簡介: 蜂鳥系列的MCU開發(fā)工具分為基于SDK和圖形化的IDE兩種開發(fā)方式,我們采用了基于SDK的開發(fā)方式, SDK的構(gòu)建主要由多個Makefile文件組成,本文主要介紹了各個
    發(fā)表于 10-30 07:15

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

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

    如何配置和驗證Linux內(nèi)核參數(shù)

    Linux系統(tǒng)運維和性能優(yōu)化中,內(nèi)核參數(shù)(sysctl)的配置至關重要。合理的參數(shù)調(diào)整可以顯著提升網(wǎng)絡性能、系統(tǒng)穩(wěn)定性及資源利用率。然而,僅僅修改參數(shù)是不夠的,如何驗證這些參數(shù)是否生效同樣關鍵。
    的頭像 發(fā)表于 05-29 17:40 ?1403次閱讀

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

    Makefile:一個致力于工程編譯的文件,將來整個uboot編譯的時候就是用這個Makefile來編譯管理的Kconfig:用于生成內(nèi)核
    發(fā)表于 05-22 10:53
    侯马市| 鱼台县| 娄烦县| 南城县| 江川县| 天全县| 桂林市| 罗甸县| 镇巴县| 汕尾市| 巫山县| 西充县| 阿坝县| 黎川县| 布拖县| 昭平县| 阿坝县| 闵行区| 社旗县| 新平| 天水市| 潮安县| 错那县| 阳信县| 宣威市| 平江县| 顺昌县| 伊宁市| 营山县| 安泽县| 乾安县| 万州区| 贡觉县| 调兵山市| 长寿区| 莫力| 贡嘎县| 青神县| 东丽区| 武定县| 盘山县|