Camera驅(qū)動(dòng)在Linux內(nèi)核的移植解讀_第1頁
Camera驅(qū)動(dòng)在Linux內(nèi)核的移植解讀_第2頁
Camera驅(qū)動(dòng)在Linux內(nèi)核的移植解讀_第3頁
Camera驅(qū)動(dòng)在Linux內(nèi)核的移植解讀_第4頁
Camera驅(qū)動(dòng)在Linux內(nèi)核的移植解讀_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、題_Camera驅(qū)動(dòng)在Linux內(nèi)核的移植Camera驅(qū)動(dòng)在Linux內(nèi)核的移植 Linux 3.0.8 內(nèi)核的配置系統(tǒng)由以下3個(gè)部分組成:Makefile :分布在Linux內(nèi)核源代碼中的 Makefile ,定義Linux內(nèi)核的編譯規(guī)則配置文件 Kconfig :給用戶提供配置選擇的功能配置工具:包括配置命令解釋器(對(duì)配置腳本中使用的配置命令進(jìn)行解釋)和配置用戶界面(提供字符界面和圖形界面)。這些配置工具都是使用腳本語言編寫的,如 Tcl/TK、perl等。在Linux內(nèi)核中增加程序需要完成以下 3項(xiàng)工作:1.將編寫的源代碼復(fù)制到Linux內(nèi)核源代碼的相應(yīng)目錄2.在目錄的Kconfig文件

2、中增加新源代碼對(duì)應(yīng)項(xiàng)目的編譯配置選項(xiàng)3.在目錄的 Makefile文件中增加對(duì)新源代碼的編譯條目.實(shí)例引導(dǎo):S3C2440處理器的RTC與LED驅(qū)動(dòng)配置。首先,在Linux/drivers/char 目錄中包含了 S3C2410 處理器的 RTC設(shè)備驅(qū)動(dòng)源代碼 s3c2410-rtc.c 。而在該目錄的 Kconfig 文件中包含 S3C2410_RTC的配置項(xiàng)目: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àng)目被配置的情況下,才會(huì)出現(xiàn) S3C2410_RTC 配置項(xiàng)目,這個(gè)配置項(xiàng)目為布爾型(要么編譯入內(nèi)核,要么不編譯,選擇 Y或N), 菜單撒很難過顯示的字符串為 S3C2410 RTC Driver , help后面的內(nèi)容為幫助信息。除了布爾型的配置項(xiàng)目外,還存在一

4、種三態(tài)型( tristate )配置選項(xiàng),它意味著要么編譯入內(nèi)核,要么編譯 為內(nèi)核模塊,選項(xiàng)為Y、M或N。在目錄的Makefile中關(guān)于S3C2410_RTC 的編譯腳本為:obj-$(CONFIG_S3C2410_RTC) += s3c2410-rtc.o上述腳本意味著如果 S3C2410RTC 配置選項(xiàng)背選擇為 Y 或 M,即 obj-$(CONFIG_S3C2410_RTC) 等同于 obj-y 或 obj-m 時(shí),則編譯 s3c2410-rtc.c ,選擇Y的情況直 接會(huì)將生成的目標(biāo)代碼直接連接到內(nèi)核,為 M的情況則生成模塊 s3c2410-rtc.ko (由于S3C2410_RTC

5、為布爾型,實(shí)際不會(huì)為M);如果 S3C2410_RTC 配置選項(xiàng)將選擇為 N,即 obj-$(CONFIG_S3C2410_RTC) 等同于 obj-n 時(shí),則不編譯 s3c2410-rtc.c 。一般而言,驅(qū)動(dòng)工程師在內(nèi)核源代碼的drviers目錄的相應(yīng)子目錄中增加新設(shè)備驅(qū)動(dòng)的源代碼,并增加或修改Kconfig配置腳本和Makefile腳本,完全仿照上述過程執(zhí)行即可。再如,為S3c2410的LED編寫了驅(qū)動(dòng),源代碼為s3c2410-led.c,為使內(nèi)核能支持對(duì)該模塊的編譯配置, 應(yīng)進(jìn)行如下3項(xiàng)處理。將編寫的 s3c2410-led.c源代碼復(fù)制到linux/drivers/char 目錄在目

6、錄的 Kconfig文件中增加LED的編譯配置選項(xiàng),如下所示:config S3C2410_LED bool S3C2410 LED Driver depends on ARCH_S3c2410 helpLED driver for the Samsung S3C2410.在目錄的Makefile文件中增加對(duì) s3c2410-led.c 源代碼的編譯,如下所示:obj-$(CONFIG_S3C2410_LED) += s3c2410-led.oMakefile下面對(duì)內(nèi)核源代碼各級(jí)子目錄中的kbuild Makefile 進(jìn)行介紹,這部分是內(nèi)核模塊或設(shè)備驅(qū)動(dòng)的開發(fā)者最常接觸到的。kbuild M

7、akefile 的語法包括如下幾個(gè)方面。(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)都不會(huì)被編譯。而更常見的做法是根據(jù).config 文件的CONFIG變量來決定文件的編譯方式,如下表示:obj-$(CONFIG_ISDN) += isdn.oob 課題 _Camera 驅(qū) 動(dòng)在 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)用在特定 的目錄和場(chǎng)合下。(2)多文件模塊的定義如果一個(gè)模塊由多個(gè)文件組成,這時(shí)候應(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兩個(gè)目標(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時(shí),kbuild 將會(huì)把 ext2目錄列入向下迭代的目標(biāo)中,具體 ext2 目錄下的文件是要作為模塊編譯還是鏈入內(nèi)核由ext2目錄下的Makefile文件的內(nèi)容決定。Kconfig |(1)菜單入口大多數(shù)的內(nèi)核配置選項(xiàng)都對(duì)應(yīng)Kconfig中的一個(gè)菜單入口,如下所示: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)鍵字定義新的配置選項(xiàng),之后的幾行定義了該配置選項(xiàng)的屬性。配置選項(xiàng)的屬性包括類型、數(shù) 據(jù)范圍、輸入提示、依賴關(guān)系(及反向依賴關(guān)系)、幫助信息和默認(rèn)值等。每個(gè)配置選項(xiàng)都必須制定類型,類型包括 bool、tristate、string hex和int,其中tristate和string是兩 種基本的類型,其他類型都基于這兩種基本類型。類型定義后可以緊跟輸入提示,下面的兩段腳本

12、是等價(jià) 的。腳本 1 : bool Networking support腳本2: boolprompt Networking support輸入提示的一般格式的如下所示:prompt if 其中可選的if用來表示該提示 課題_Camera 驅(qū)動(dòng)在Linux 內(nèi)核的移植_文檔下載 HYPERLINK /b-004408600242a8956aece406-2.html /b-004408600242a8956aece406-2.html的依賴關(guān)系。默認(rèn)值的格式如下所示:default if f|一般配置選項(xiàng)可以存在任意多個(gè)默認(rèn)值,這種情況下,只有第一個(gè)被定義的值是可用的。如果用戶不設(shè)置對(duì)應(yīng)的選項(xiàng)

13、,配置選項(xiàng)的值就是默認(rèn)值。依賴關(guān)系的格式如下所示:depends on (或者requires)如果定義了多個(gè)依賴關(guān)系,他們之間用“&間隔。依賴關(guān)系也可以應(yīng)用到該菜單中所有的其他選項(xiàng)中(這些選項(xiàng)同樣可接受if表達(dá)式),下面的兩端段腳本是等價(jià)的。|腳本 1 : bool foo if BARdefault y if BAR腳本 2: depends on BARbool foodefault y反向依賴關(guān)系的格式如下所示:select if depends能限定一個(gè)symbol的上限,即如果 A依賴于B,則在B被配置為Y的情況下,A可以為 Y M和N;在 B被配置為M 情況下,A可以被配置為M或

14、N; B在被配置為 N的情況下,A只能為 “Nselect能限定一個(gè) symbol的下限,若 A反向依賴于B ,則 A的配置值會(huì)高于或等于B (正好與depends) o如果symbol反向依賴于多個(gè)對(duì)象,則它的下陷是這些對(duì)象的最大值。kbuild Makefile 中的expr (表達(dá)式)定義如下所示:&II 也就是說 expr是由symbol、兩個(gè)symbol相等、兩個(gè)symbol不等以及expr的賦值、非、與、或運(yùn) 算構(gòu)成。而symbol分為兩類,一類是由菜單入口定義配置選項(xiàng)定義的非常數(shù)symbol ,另一類是作為 expr組成部分的常數(shù) symbol。數(shù)據(jù)范圍的格式如下:rang if

15、 為int和hex類型的選項(xiàng)設(shè)置可以接受的輸入值范圍,用戶只能輸入大于等于第一個(gè)symbol ,小于等于第二個(gè)symbol的值。幫助信息的格式如下: help(或-help-)結(jié)束幫助信息完全靠文本縮進(jìn)識(shí)別結(jié)束。 -help-和help在作用上沒有區(qū)別,設(shè)計(jì)-help-的初衷在于將 文件中的配置邏輯與給開發(fā)人員的提示分開。menuconfig 關(guān)鍵字的作用與 config類似,但它在config的基礎(chǔ)上要求所有的子選項(xiàng)作為獨(dú)立的行顯示。(2)菜單結(jié)構(gòu)菜單入口在菜單樹結(jié)構(gòu)中的位置可由兩種方法決定。第一種方式如下所示:menu Networking device supportdepends on

16、 NETconfig NETDEVICES.endmenu所有處于menu和endmenu 之間的菜單入口都會(huì)成為Network device support的子菜單。而且,所有子菜單選項(xiàng)都會(huì)繼承父菜單的依賴關(guān)系,比如,Network device support 對(duì)Net的依賴被加到了配置選項(xiàng)NETDEVICES 的依賴列表中。另一種方式是通過分析依賴關(guān)系生成菜單結(jié)構(gòu)。如果菜單選項(xiàng)在一定程度上依賴于前面的選項(xiàng),它就恩能能成為該選項(xiàng)的子菜單。如果父選項(xiàng)為N,則子選項(xiàng)不可見;如果父選項(xiàng)為Y或M,則子選項(xiàng)可見,例如: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”該選項(xiàng)才可見。除此之外,Kconfig 中還可能使用choices.endchoice、comment、if . endif這樣的語法結(jié)構(gòu)。其中choices . end choice w的結(jié)構(gòu)如下所示:choice end

18、choice它定義一個(gè)選擇群,其接受的選項(xiàng)( chioce options )可以是前面描述的任何屬性。在 課題_Camera驅(qū)動(dòng) 在 Linux 內(nèi)核的移植 _文檔下載 HYPERLINK /b-004408600242a8956aece406-3.html /b-004408600242a8956aece406-3.html 一 個(gè)硬件有多個(gè)驅(qū)動(dòng)的情況下使用,使用選擇可以實(shí)現(xiàn)最終只有一個(gè)驅(qū)動(dòng)被編譯進(jìn)內(nèi)核或模塊。選擇群還可 以接受的另一個(gè)選項(xiàng)是“optional,”這樣菜單入口就被設(shè)置為N”,沒有被選中。4.應(yīng)用實(shí)例:在內(nèi)核中新增加驅(qū)動(dòng)代碼目錄和子目錄假設(shè)要在內(nèi)核源代碼drivers目錄下為 ARM體系結(jié)構(gòu)新增如下用于test d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論