<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux內核驅動(dòng)程序的配置

Linux內核驅動(dòng)程序的配置

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò ) 收藏

Linux 2.6 內核的配置系統由以下 3 個(gè)部分組成:

本文引用地址:http://dyxdggzs.com/article/201610/305943.htm

> Makefile:分布在 Linux 內核源代碼中的 Makefile,定義 Linux 內核的編譯規則

> 配置文件 Kconfig:給用戶(hù)提供配置選擇的功能

> 配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進(jìn)行解釋)和配置用戶(hù)界面(提供字符界面和圖形界面)。這些配置工具都是使用腳本語(yǔ)言編寫(xiě)的,如 Tcl/TK、perl 等。

在Linux 內核中增加程序需要完成以下 3 項工作:

> 1. 將編寫(xiě)的源代碼復制到 Linux 內核源代碼的相應目錄

> 2. 在目錄的Kconfig 文件中增加新源代碼對應項目的編譯配置選項

> 3. 在目錄的 Makefile 文件中增加對新源代碼的編譯條目

1. 實(shí)例引導:S3C2440 處理器的RTC 與 LED 驅動(dòng)配置。

首先,在Linux/drivers/char 目錄中包含了 S3C2410 處理器的 RTC 設備驅動(dòng)源代碼 s3c2410-rtc.c.而在該目錄的 Kconfig 文件中包含 S3C2410_RTC 的配置項目:config S3C2410_RTC bool S3C2410 RTC Driver depends on ARCH_S3C2410 help RTC (Realtime Clock)driver for the clock inbuilt into the Samsung S3C2410. This can provide periodic interrupt rates from 1Hz to 64Hz for user programs, and wakeup from Alarm.上述 Kconfig 文件的這段腳本意味著(zhù)只有在 ARCH_S3C2410 項目被配置的情況下,才會(huì )出現 S3C2410_RTC 配置項目,這個(gè)配置項目為布爾型(要么編譯入內核,要么不編譯,選擇 Y 或 N ),菜單撒很難過(guò)顯示的字符串為 S3C2410 RTC Driver,help 后面的內容為幫助信息。

除了布爾型的配置項目外,還存在一種三態(tài)型(tristate)配置選項,它意味著(zhù)要么編譯入內核,要么編譯為內核模塊,選項為Y、M“ 或N.在目錄的Makefile 中關(guān)于 S3C2410_RTC 的編譯腳本為:obj-$(CONFIG_S3C2410_RTC) += s3c2410-rtc.o上述腳本意味著(zhù)如果 S3C2410——RTC 配置選項背選擇為 Y 或 M,即 obj-$(CONFIG_S3C2410_RTC) 等同于 obj-y 或 obj-m 時(shí),則編譯 s3c2410-rtc.c,選擇 Y 的情況直接會(huì )將生成的目標代碼直接連接到內核,為M 的情況則生成模塊 s3c2410-rtc.ko(由于 S3C2410_RTC 為布爾型,實(shí)際不會(huì )為M);如果 S3C2410_RTC 配置選項將選擇為 N,即 obj-$(CONFIG_S3C2410_RTC) 等同于 obj-n 時(shí),則不編譯 s3c2410-rtc.c.一般而言,驅動(dòng)工程師在內核源代碼的 drviers 目錄的相應子目錄中增加新設備驅動(dòng)的源代碼,并增加或修改 Kconfig 配置腳本和Makefile 腳本,完全仿照上述過(guò)程執行即可。

再如,為S3C2410 的LED 編寫(xiě)了驅動(dòng),源代碼為 s3c2410-led.c,為使內核能支持對該模塊的編譯配置,應進(jìn)行如下 3 項處理。

> 將編寫(xiě)的 s3c2410-led.c 源代碼復制到 linux/drivers/char 目錄

> 在目錄的 Kconfig 文件中增加 LED 的編譯配置選項,如下所示:

config S3C2410_LED bool S3C2410 LED Driver depends on ARCH_S3C2410 help LED driver for the Samsung S3C2410.

> 在目錄的 Makefile 文件中增加對 s3c2410-led.c 源代碼的編譯,如下所示:

obj-$(CONFIG_S3C2410_LED) += s3c2410-led.o 2. Makefile下面對內核源代碼各級子目錄中的 kbuild Makefile 進(jìn)行介紹,這部分是內核模塊或設備驅動(dòng)的開(kāi)發(fā)者最常接觸到的。

kbuild Makefile 的語(yǔ)法包括如下幾個(gè)方面。

(1)目標定義目標定義用來(lái)定義哪些內容要作為模塊編譯,哪些要編譯并連接進(jìn)內核。

例如:obj-y += foo.o表示要由 foo.c 或者 foo.s 文件編譯得到 foo.o 并連接進(jìn)內核,而 obj-m 則表示該文件要作為模塊編譯。除了y、m 以外的 obj-x 形式的目標都不會(huì )被編譯。

而更常見(jiàn)的做法是根據 .config 文件的 CONFIG 變量來(lái)決定文件的編譯方式,如下表示:obj-$(CONFIG_ISDN) += isdn.o obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o除了 obj- 形式的目標以外,還有 lib-y library庫、hostprogs-y 主機程序等目標,但是基本都應用在特定的目錄和場(chǎng)合下。

(2)多文件模塊的定義如果一個(gè)模塊由多個(gè)文件組成,這時(shí)候應采用模塊名加 -objs 后綴或者 -y 后綴的形式來(lái)定義模塊的組成文件。如下面的例子所示:obj-$(CONFIG_EXT2_FS) += ext2.o ext2-y := balloc.o bitmap.o ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o模塊的名字為 ext2,由 balloc.o 和 bitmap.o 兩個(gè)目標文件最終連接生成 ext2.o 直至 ext2.ko 文件,是否包括 xattr.o 取決于內核配置文件的配置情況。如果 CONFIG_EXT2_FS 的值是 y 也沒(méi)有關(guān)系,在此過(guò)程中生成的 ext2.o 將被連接進(jìn) built-in.o 最終連接進(jìn)內核。這里需要注意的一點(diǎn)是,該 kbuild Makefile 所在的目錄中不能再包含和模塊名相同的源文件和 ext2.c/ext2.s.或者寫(xiě)如 -objs 的形式:obj-$(CONFIG_ISDN) +=isdn.o isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o(3)目錄層次的迭代示例:obj-$(CONFIG_EXT2_FS) += ext2/當 CONFIG_EXT2_FS 的值為 y 或 m時(shí),kbuild 將會(huì )把 ext2 目錄列入向下迭代的目標中,具體 ext2 目錄下的文件是要作為模塊編譯還是鏈入內核由 ext2 目錄下的 Makefile 文件的內容決定。

3. Kconfig(1)菜單入口大多數的內核配置選項都對應 Kconfig 中的一個(gè)菜單入口,如下所示:config MODVERSIONS bool Set version information on all module symbols depends on MODULES help Usually, modules have to be recompiled whenever you switch to a new kernel……

config 關(guān)鍵字定義新的配置選項,之后的幾行定義了該配置選項的屬性。配置選項的屬性包括類(lèi)型、數據范圍、輸入提示、依賴(lài)關(guān)系(及反向依賴(lài)關(guān)系)、幫助信息和默認值等。

每個(gè)配置選項都必須制定類(lèi)型,類(lèi)型包括bool、tristate、string、hex 和 int,其中 tristate 和string 是兩種基本的類(lèi)型,其他類(lèi)型都基于這兩種基本類(lèi)型。類(lèi)型定義后可以緊跟輸入提示,下面的兩段腳本是等價(jià)的。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>