




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、題_Camera驅(qū)動在Linux內(nèi)核的移植Camera驅(qū)動在Linux內(nèi)核的移植 Linux 3.0.8 內(nèi)核的配置系統(tǒng)由以下3個部分組成:Makefile :分布在Linux內(nèi)核源代碼中的 Makefile ,定義Linux內(nèi)核的編譯規(guī)則配置文件 Kconfig :給用戶提供配置選擇的功能配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進(jìn)行解釋)和配置用戶界面(提供字符界面和圖形界面)。這些配置工具都是使用腳本語言編寫的,如 Tcl/TK、perl等。在Linux內(nèi)核中增加程序需要完成以下 3項工作:1.將編寫的源代碼復(fù)制到Linux內(nèi)核源代碼的相應(yīng)目錄2.在目錄的Kconfig文件
2、中增加新源代碼對應(yīng)項目的編譯配置選項3.在目錄的 Makefile文件中增加對新源代碼的編譯條目.實例引導(dǎo):S3C2440處理器的RTC與LED驅(qū)動配置。首先,在Linux/drivers/char 目錄中包含了 S3C2410 處理器的 RTC設(shè)備驅(qū)動源代碼 s3c2410-rtc.c 。而在該目錄的 Kconfig 文件中包含 S3C2410_RTC的配置項目:config S3C2410_RTCbool S3C2410 RTC Driverdepends on ARCH_S3c2410helpRTC (Realtime Clock ) driver for the clock inbui
3、lt into the Samsung S3C2410. This can provide periodic interrupt rates from 1Hz to 64Hz for user programs, and wakeup from Alarm. |上述 Kconfig文件的這段腳本意味著只有在 ARCH_S3c2410 項目被配置的情況下,才會出現(xiàn) S3C2410_RTC 配置項目,這個配置項目為布爾型(要么編譯入內(nèi)核,要么不編譯,選擇 Y或N), 菜單撒很難過顯示的字符串為 S3C2410 RTC Driver , help后面的內(nèi)容為幫助信息。除了布爾型的配置項目外,還存在一
4、種三態(tài)型( tristate )配置選項,它意味著要么編譯入內(nèi)核,要么編譯 為內(nèi)核模塊,選項為Y、M或N。在目錄的Makefile中關(guān)于S3C2410_RTC 的編譯腳本為:obj-$(CONFIG_S3C2410_RTC) += s3c2410-rtc.o上述腳本意味著如果 S3C2410RTC 配置選項背選擇為 Y 或 M,即 obj-$(CONFIG_S3C2410_RTC) 等同于 obj-y 或 obj-m 時,則編譯 s3c2410-rtc.c ,選擇Y的情況直 接會將生成的目標(biāo)代碼直接連接到內(nèi)核,為 M的情況則生成模塊 s3c2410-rtc.ko (由于S3C2410_RTC
5、為布爾型,實際不會為M);如果 S3C2410_RTC 配置選項將選擇為 N,即 obj-$(CONFIG_S3C2410_RTC) 等同于 obj-n 時,則不編譯 s3c2410-rtc.c 。一般而言,驅(qū)動工程師在內(nèi)核源代碼的drviers目錄的相應(yīng)子目錄中增加新設(shè)備驅(qū)動的源代碼,并增加或修改Kconfig配置腳本和Makefile腳本,完全仿照上述過程執(zhí)行即可。再如,為S3c2410的LED編寫了驅(qū)動,源代碼為s3c2410-led.c,為使內(nèi)核能支持對該模塊的編譯配置, 應(yīng)進(jìn)行如下3項處理。將編寫的 s3c2410-led.c源代碼復(fù)制到linux/drivers/char 目錄在目
6、錄的 Kconfig文件中增加LED的編譯配置選項,如下所示:config S3C2410_LED bool S3C2410 LED Driver depends on ARCH_S3c2410 helpLED driver for the Samsung S3C2410.在目錄的Makefile文件中增加對 s3c2410-led.c 源代碼的編譯,如下所示:obj-$(CONFIG_S3C2410_LED) += s3c2410-led.oMakefile下面對內(nèi)核源代碼各級子目錄中的kbuild Makefile 進(jìn)行介紹,這部分是內(nèi)核模塊或設(shè)備驅(qū)動的開發(fā)者最常接觸到的。kbuild M
7、akefile 的語法包括如下幾個方面。(1)目標(biāo)定義目標(biāo)定義用來定義哪些內(nèi)容要作為模塊編譯,哪些要編譯并連接進(jìn)內(nèi)核O 例如:obj-y += foo.o表示要由foo.c或者foo.s文件編譯得到foo.o并連接進(jìn)內(nèi)核,而obj-m則表示該文件要作為模塊編譯。 除了 v、m以外的o呼x形式的目標(biāo)都不會被編譯。而更常見的做法是根據(jù).config 文件的CONFIG變量來決定文件的編譯方式,如下表示:obj-$(CONFIG_ISDN) += isdn.oob 課題 _Camera 驅(qū) 動在 Linux 內(nèi)核 的 移植 _ 文檔下 載 HYPERLINK /b-004408600242a8956
8、aece406.html /b-004408600242a8956aece406.htmlj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o除了 obj-形式的目標(biāo)以外,還有 lib-y library庫、hostprogs-y 主機(jī)程序等目標(biāo),但是基本都應(yīng)用在特定 的目錄和場合下。(2)多文件模塊的定義如果一個模塊由多個文件組成,這時候應(yīng)采用模塊名加-objs后綴或者-y后綴的形式來定義模塊的組成文件。如下面的例子所示:obj-$(CONFIG_EXT2_FS) += ext2.oext2-y := balloc.o bitmap.oext2-$(C
9、ONFIG_EXT2_FS_XATTR) += xattr.o模塊的名字為 ext2 ,由balloc.o和bitmap.o兩個目標(biāo)文件最終連接生成ext2.o直至ext2.ko文件,是否包括xattr.o取決于內(nèi)核配置文件的配置情況。如果 CONFIG_EXT2_FS 的值是y也沒有關(guān)系,在此 過程中生成的 ext2.o將被連接進(jìn)built-in.o最終連接進(jìn)內(nèi)核。這里需要注意的一點(diǎn)是,該kbuild Makefile 所在的目錄中不能再包含和模塊名相同的源文件和ext2.c/ext2.s ?;蛘邔懭?objs的形式:obj-$(CONFIG_ISDN) +=isdn.oisdn-objs
10、:= isdn_net_lib.o isdn_v110.o isdn_common.o(3)目錄層次的迭代示例:obj-$(CONFIG_EXT2_FS) += ext2/當(dāng)CONFIG_EXT2_FS 的值為 y或m時,kbuild 將會把 ext2目錄列入向下迭代的目標(biāo)中,具體 ext2 目錄下的文件是要作為模塊編譯還是鏈入內(nèi)核由ext2目錄下的Makefile文件的內(nèi)容決定。Kconfig |(1)菜單入口大多數(shù)的內(nèi)核配置選項都對應(yīng)Kconfig中的一個菜單入口,如下所示:config MODVERSIONSbool Set version information on all modu
11、le symbolsdepends on MODULEShelpUsually, modules have to be recompiled whenever you switch to a new kernel.config關(guān)鍵字定義新的配置選項,之后的幾行定義了該配置選項的屬性。配置選項的屬性包括類型、數(shù) 據(jù)范圍、輸入提示、依賴關(guān)系(及反向依賴關(guān)系)、幫助信息和默認(rèn)值等。每個配置選項都必須制定類型,類型包括 bool、tristate、string hex和int,其中tristate和string是兩 種基本的類型,其他類型都基于這兩種基本類型。類型定義后可以緊跟輸入提示,下面的兩段腳本
12、是等價 的。腳本 1 : bool Networking support腳本2: boolprompt Networking support輸入提示的一般格式的如下所示:prompt if 其中可選的if用來表示該提示 課題_Camera 驅(qū)動在Linux 內(nèi)核的移植_文檔下載 HYPERLINK /b-004408600242a8956aece406-2.html /b-004408600242a8956aece406-2.html的依賴關(guān)系。默認(rèn)值的格式如下所示:default if f|一般配置選項可以存在任意多個默認(rèn)值,這種情況下,只有第一個被定義的值是可用的。如果用戶不設(shè)置對應(yīng)的選項
13、,配置選項的值就是默認(rèn)值。依賴關(guān)系的格式如下所示:depends on (或者requires)如果定義了多個依賴關(guān)系,他們之間用“&間隔。依賴關(guān)系也可以應(yīng)用到該菜單中所有的其他選項中(這些選項同樣可接受if表達(dá)式),下面的兩端段腳本是等價的。|腳本 1 : bool foo if BARdefault y if BAR腳本 2: depends on BARbool foodefault y反向依賴關(guān)系的格式如下所示:select if depends能限定一個symbol的上限,即如果 A依賴于B,則在B被配置為Y的情況下,A可以為 Y M和N;在 B被配置為M 情況下,A可以被配置為M或
14、N; B在被配置為 N的情況下,A只能為 “Nselect能限定一個 symbol的下限,若 A反向依賴于B ,則 A的配置值會高于或等于B (正好與depends) o如果symbol反向依賴于多個對象,則它的下陷是這些對象的最大值。kbuild Makefile 中的expr (表達(dá)式)定義如下所示:&II 也就是說 expr是由symbol、兩個symbol相等、兩個symbol不等以及expr的賦值、非、與、或運(yùn) 算構(gòu)成。而symbol分為兩類,一類是由菜單入口定義配置選項定義的非常數(shù)symbol ,另一類是作為 expr組成部分的常數(shù) symbol。數(shù)據(jù)范圍的格式如下:rang if
15、 為int和hex類型的選項設(shè)置可以接受的輸入值范圍,用戶只能輸入大于等于第一個symbol ,小于等于第二個symbol的值。幫助信息的格式如下: help(或-help-)結(jié)束幫助信息完全靠文本縮進(jìn)識別結(jié)束。 -help-和help在作用上沒有區(qū)別,設(shè)計-help-的初衷在于將 文件中的配置邏輯與給開發(fā)人員的提示分開。menuconfig 關(guān)鍵字的作用與 config類似,但它在config的基礎(chǔ)上要求所有的子選項作為獨(dú)立的行顯示。(2)菜單結(jié)構(gòu)菜單入口在菜單樹結(jié)構(gòu)中的位置可由兩種方法決定。第一種方式如下所示:menu Networking device supportdepends on
16、 NETconfig NETDEVICES.endmenu所有處于menu和endmenu 之間的菜單入口都會成為Network device support的子菜單。而且,所有子菜單選項都會繼承父菜單的依賴關(guān)系,比如,Network device support 對Net的依賴被加到了配置選項NETDEVICES 的依賴列表中。另一種方式是通過分析依賴關(guān)系生成菜單結(jié)構(gòu)。如果菜單選項在一定程度上依賴于前面的選項,它就恩能能成為該選項的子菜單。如果父選項為N,則子選項不可見;如果父選項為Y或M,則子選項可見,例如:config MODULESbool Enable loadable module
17、 support config MODVERSIONS bool Set version information on all module symbols depends on MODULEScomment module support disabled |depends on !MODULESMODVERSIONS直接依賴MODULES ,如果MODULES 不為 N”該選項才可見。除此之外,Kconfig 中還可能使用choices.endchoice、comment、if . endif這樣的語法結(jié)構(gòu)。其中choices . end choice w的結(jié)構(gòu)如下所示:choice end
18、choice它定義一個選擇群,其接受的選項( chioce options )可以是前面描述的任何屬性。在 課題_Camera驅(qū)動 在 Linux 內(nèi)核的移植 _文檔下載 HYPERLINK /b-004408600242a8956aece406-3.html /b-004408600242a8956aece406-3.html 一 個硬件有多個驅(qū)動的情況下使用,使用選擇可以實現(xiàn)最終只有一個驅(qū)動被編譯進(jìn)內(nèi)核或模塊。選擇群還可 以接受的另一個選項是“optional,”這樣菜單入口就被設(shè)置為N”,沒有被選中。4.應(yīng)用實例:在內(nèi)核中新增加驅(qū)動代碼目錄和子目錄假設(shè)要在內(nèi)核源代碼drivers目錄下為 ARM體系結(jié)構(gòu)新增如下用于test d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)戰(zhàn)略的動態(tài)評估機(jī)制試題及答案
- 人工智能倫理問題與解決方法試題及答案
- 2024年云南省退役軍人廳下屬事業(yè)單位真題
- 關(guān)注行業(yè)動態(tài)把握發(fā)展機(jī)遇計劃
- 2024年深圳開放大學(xué)輔導(dǎo)員考試真題
- 促進(jìn)創(chuàng)新的年度工作計劃設(shè)計
- 公司戰(zhàn)略目標(biāo)導(dǎo)向試題及答案
- 2024年青海省農(nóng)業(yè)農(nóng)村廳下屬事業(yè)單位真題
- 客戶價值創(chuàng)造的實踐與總結(jié)計劃
- 2024年興業(yè)銀行天津分行招聘筆試真題
- 大班科學(xué)《神奇的中草藥》課件
- VMWare VSAN軟件定義的超融合解決方案
- “小風(fēng)箏大創(chuàng)意”小學(xué)STEM項目式學(xué)習(xí)活動案例
- 生態(tài)環(huán)境執(zhí)法大練兵練習(xí)(行政處罰法、新固廢法、大氣法)
- 現(xiàn)澆箱梁混凝土澆筑方案計劃
- 青霉素皮試液的配制PPT學(xué)習(xí)教案
- 熱菜加工流程圖
- RAL 勞爾色卡電子版
- 《加油站安全管理人員安全生產(chǎn)目標(biāo)責(zé)任書》
- 第三章:船舶主機(jī)安裝工藝
- 計件工薪酬制度
評論
0/150
提交評論