成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

同驅動編譯相關的三類文件:Makefile、Config和Kconfig

原創 精選
開發 開發工具
在本文中,我將主要說明該如何修改與驅動編譯相關的三類文件Makefile、Config和Kconfig,并簡要闡述這三者的關系。

作者 |趙青窕

審校 |孫淑娟

在驅動開發時,有時候讓我們最頭疼的不是驅動代碼的編寫,反而是代碼的編譯。目前有不少同事向我反饋,已經修改了對應的Config和Makefile文件,但驅動仍無法被正常編譯到,這種問題經排查是因為沒有修改對應的Kconfig而導致的。

在本文中,我將主要說明該如何修改與驅動編譯相關的三類文件Makefile,Config和Kconfig,并簡要闡述這三者的關系。

1.如何修改這三類文件從而編譯我們的驅動

制作文件

我們可以通過Makefile文件,來編寫驅動編譯的規則。下面是四種常見的較為簡單的編譯規則,此處假如我們的驅動文件是test.c,且默認已正常包含需要的庫,頭文件等,僅在此處說明Makefile與config和Kconfig的關系,不過多說明Makefile更多細節:

  • obj –y += test.o
  • obj-n += test.o
  • obj-m += test.o
  • obj-($CONFIG_TEST) += test.o

obj-y表示需要把test.c編譯進內核,當我們不知道如何配置config和Kconfig,或者是配置后但驅動仍無法編譯到,就可以采用這種配置方式。這種方式的好處就是僅僅在Makefile中編寫規則,且Makefile能被編譯系統加載到,其對應的驅動不再受config和Kconfig約束,就可以被編譯進內核。

obj-n表示默認不編譯,該配置幾乎用不到,畢竟一般情況下,我們不會寫一個不進行編譯的代碼。但當多項目,或者多平臺復用代碼時,可能會根據項目或者平臺來進行選擇項的編譯,此時不需要編譯的代碼就可以采用obj-n的方式來進行配置。

obj-m表示默認編譯為模塊,需要注意當執行make模塊時才會被編譯。當發現驅動沒有進行編譯時,可以查看是否是采用obj-m,且是以執行make模塊的方式進行編譯的。

obj-($CONFIG_TEST),我把該方式稱之為條件編譯,根據CONFIG_TEST的配置來進行編譯,我們可以在項目對應的config中配置CONFIG_TEST為m,y或者n,從而obj-($CONFIG_TEST)可變為obj-m,obj-y,obj-n。通常情況下,均采用obj-($CONFIG_TEST) += test.o的方式進行配置。

配置

實際上config文件分為兩大類,此處我以kernel-4.19,arm平臺為例來說明,其中一類是位于kernel-4.19/arch/arm/configs,另一類是一個隱藏文件,位于kernel-4.19/.config路徑下,這兩類文件格式相同,如下圖所示:

圖片

從上圖可以看出,該類文件就是定義了一些配置項,在Makefile小節說到的CONFIG_TEST就是需要在config文件中進行配置,當采用文件kernel-4.19/arch/arm/configs進行配置時,比較簡單,直接打開對應的config文件,增加CONFIG_TEST=(y/n/m)即可。當采用kernel-4.19/.config配置時,建議不要直接修改.config文件,可以采用make menuconfig的方式來進行配置,該命令將在后面的小節中進行描述。

在Linux內核編譯時,是根據.config文件,結合Makefile進行驅動編譯的,kernel-4.19/arch/arm/configs會通過其相應的make命令生成對應的.config。此時設想一下,假如我們的kernel-4.19/arch/arm/configs和.config都配置了CONFIG_TEST,那最后CONFIG_TEST是采用哪種配置呢?實際上kernel-4.19/arch/arm/configs下的配置會覆蓋.config中的配置,因此我個人喜歡直接修改kernel-4.19/arch/arm/configs。但當kernel-4.19/arch/arm/configs中沒有配置CONFIG_TEST時,.config中會采用Kconfig中配置的CONFIG_TEST作為默認值。

Kconfig

此處仍以CONFIG_TEST為例來說明,Kconfig共有兩處需要修改,其一是該test.c對應的Kconfig文件,其二是要包含該Kconfig文件。

下面是對應的Kconfig配置方式,其中第一行中的config TEST與config中CONFIG_TEST是對應的,注意在Kconfig中需要去掉CONFIG,僅僅配置為TEST;第二行中的tristate表示該項是否編進內核或者編成模塊,倘若第二行中的tristate改為bool,則可以配置test.c是否編譯進內核,但不能以模塊的形式編譯;第三行設置了默認值,此處表示默認編譯進內核;第四行是說明信息。

config TEST
tristate "THIS IS TEST DRIVER"
default y
help
this is just for test

當我們配置好Kconfig,則需要把Kconfig包含進系統中。假如Kconfig位于路徑drivers/input/test/下,則采用語句源 “drivers/input/test/Kconfig”即可包含該Kconfig文件。

2.Makefile、Config和Kconfig三者間的關系

其中一種內核裁剪的辦法就是通過命令make menuconfig,該命令就會獲取Kconfig的信息,然后以下圖中的形式從終端中展示出來。

圖片

上圖看上去同我們在飯店看到的菜單類似,因此我們可以把Kconfig比喻為菜單,Makefile比喻為菜譜,config比喻為我們點的菜,make menuconfig就是展示菜單的命令。

當我們編寫好驅動代碼之后,需要編寫菜譜,并把該驅動添加到菜單中,然后通過config或者make menuconfig進行點菜,這樣驅動才能進行正常的編譯。

3.常見錯誤

比較常見的錯誤有以下兩大類:

  • 只進行點菜和菜譜配置,但忘記把菜名添加到菜單中,導致驅動無法編譯;
  • 點菜時使用了錯誤的語法格式,有些程序員因為編寫代碼的習慣,通常會在等號左右量表預留空格,但在使用config點菜時,其等號兩邊不能有空格。

4.總結

本文著重闡述了驅動編譯需要配置的三類文件:Makefile,Kconfig和config,希望驅動開發者掌握這些內容后,可以在開發過程中重點關注驅動本身,而不會在編譯部分耗費時間。

作者介紹

趙青窕,51CTO社區編輯,從事多年驅動開發。研究興趣包含安全OS和網絡安全領域,發表過網絡相關專利。

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2010-07-30 16:06:41

2012-05-03 08:34:15

LinuxKconfig

2010-07-19 13:49:52

autoTelnet

2010-09-16 16:13:14

2010-09-26 16:10:03

數據加密產品

2010-06-12 16:41:59

網絡核心協議

2016-11-29 12:01:39

數據驅動大數據

2021-09-01 15:48:50

API漏洞應用程序安全

2014-12-29 10:25:34

MEFNFVSDN

2017-03-06 16:15:17

Linux文件作用與區別

2023-06-07 17:04:48

集群Standalone

2018-04-24 09:00:00

開發自動化軟件架構

2011-08-16 16:20:33

Linuxkconfigmakefile

2021-08-17 14:39:00

鴻蒙HarmonyOS應用

2012-03-26 10:10:56

云計算

2010-09-28 15:33:18

DHCP服務器應用

2010-09-25 15:54:23

SQL存儲過程

2018-07-05 22:43:24

2010-07-16 10:58:21

云計算

2010-03-01 16:40:40

Linux Makef
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩二三区 | 日韩一区二区三区av | 拍戏被cao翻了h承欢 | 国产精品小视频在线观看 | 日韩精品视频在线 | 懂色av一区二区三区在线播放 | 美国一级毛片a | 成人欧美一区二区三区 | 美女黄视频网站 | 国产婷婷色一区二区三区 | 国产精品乱码一区二三区小蝌蚪 | 久久久久久一区 | 久久国产精品一区二区三区 | 亚洲人在线 | 伊人伊人伊人 | 国产一区二区视频在线观看 | 国产电影一区二区三区爱妃记 | 久久99精品国产 | 国精产品一区一区三区免费完 | 香蕉国产在线视频 | 一区二区三区四区不卡 | 欧美在线视频二区 | 欧美日韩专区 | 欧美午夜剧场 | 成人片免费看 | 嫩草视频在线看 | 国产一级片在线播放 | 亚洲成人中文字幕 | 日本中文字幕一区 | 97久久精品午夜一区二区 | 91视频在线 | 精品在线一区二区 | 天天艹天天干天天 | 91精品久久| 国产精品色 | 久久久久中文字幕 | 五月免费视频 | 国产精品99久久久久久www | 免费日本视频 | 日本在线视频不卡 | 狠狠干网站 |