版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章構(gòu)建第一個驅(qū)動程序萬事開頭難,寫驅(qū)動程序也一樣,本章將構(gòu)建第一個驅(qū)動程序。驅(qū)動程序和模塊的關(guān)系非常密切,所以這里將詳細(xì)講解模塊的相關(guān)知識。而模塊編程成敗與否的先決條件是要有統(tǒng)一的內(nèi)核版本,所以這里將講解怎樣升級內(nèi)核版本。最后為了提高程序員的編程效率,這里將介紹兩種集成開發(fā)環(huán)境。5.1開發(fā)環(huán)境配置之內(nèi)核升級構(gòu)建正確的開發(fā)環(huán)境,對寫驅(qū)動程序非常重要。錯誤的開發(fā)環(huán)境,編寫出的驅(qū)動程序不能正確運行。特別是關(guān)于內(nèi)核版本的問題,內(nèi)核版本不匹配,會使驅(qū)動程序根本不能在系統(tǒng)中運行,所以需要對內(nèi)核進(jìn)行升級。本節(jié)我們將對FedoraCore9進(jìn)行內(nèi)核升級,首先將說明為什么要升級內(nèi)核。5.1.1為什么升級內(nèi)核內(nèi)核是一個提供硬件抽象層、磁盤及文件系統(tǒng)控制、多任務(wù)等功能的系統(tǒng)軟件。根據(jù)內(nèi)核是否被修改過,可以將內(nèi)核分為標(biāo)準(zhǔn)內(nèi)核和廠商內(nèi)核兩類。5.1.2內(nèi)核升級盡管在FedoraCore9中可以使用“軟件包管理器工具”對內(nèi)核進(jìn)行升級,但是畢竟是開發(fā)廠商編譯的內(nèi)核有其局限性。里面添加了很多驅(qū)動開發(fā)系統(tǒng)不需要的模塊,而驅(qū)動開發(fā)需要的模塊卻沒有開啟。因此,學(xué)會自己手動編譯升級內(nèi)核也是很必要的。這里,我們將內(nèi)核升級為linux2.6.29.4。5.1.3makemenconfig的注意事項在升級內(nèi)核的過程中,第6步需要非常的注意。第6步是對內(nèi)核進(jìn)行配置,特別是對CPU進(jìn)行配置。標(biāo)準(zhǔn)內(nèi)核源碼對CPU的默認(rèn)配置是:Pentium-Pro,其是高性能奔騰處理器。在很多情況下,如果使用這個CPU配置編譯內(nèi)核,那么很可能會出現(xiàn)系統(tǒng)引導(dǎo)時無法識別CPU的錯誤。所以建議將CPU類型改為目前通用的X586類型。5.2HelloWorld驅(qū)動程序本節(jié)將帶領(lǐng)讀者編寫第一個驅(qū)動模塊,該驅(qū)動模塊的功能是在加載時,輸出“Hello,World”;在卸載時,輸出“Goodbye,World”。這個驅(qū)動模塊雖然非常簡單,但是也包含了驅(qū)動模塊的重要組成部分。在本節(jié)的開始,將先對模塊的重要組成部分進(jìn)行介紹。5.2.1驅(qū)動模塊的組成一個驅(qū)動模塊主要有如下部分組成,如圖5.2所示。圖5.2表示的是一個規(guī)范的驅(qū)動模塊應(yīng)該包含的結(jié)構(gòu)。這些結(jié)構(gòu)在圖中的順序也是在源文件中的順序。不按照這樣的順序來編寫驅(qū)動模塊也不會出錯,只是大多數(shù)開發(fā)人員都喜歡這樣的順序規(guī)范。下面對主要的結(jié)構(gòu)部分進(jìn)行說明。5.2.2HelloWorld模塊任何一本關(guān)于編程的書,幾乎都以“HelloWorld”開始?,F(xiàn)在,來看一下最簡單的一個驅(qū)動模塊。5.2.3編譯HelloWorld模塊在對HelloWorld模塊進(jìn)行編譯時,需要滿足一定的條件:1.編譯內(nèi)核模塊的條件2.Makefile文件3.Makefile文件的執(zhí)行過程4.編譯模塊5.2.4模塊的操作Linux為用戶提供了modutils工具,用來操作模塊。這個工具集主要包括:insmod命令加載模塊。rmmod命令卸載模塊。modprobe命令是比較高級的加載和刪除模塊命令,其可以解決模塊之間的依賴性問題。lsmod命令列出已經(jīng)加載的模塊和其信息。modinfo命令用于查詢模塊的相關(guān)信息,比如作者,版權(quán)等。5.2.5HelloWorld模塊加載后文件系統(tǒng)的變化當(dāng)使用insmod
hello.ko加載模塊后文件系統(tǒng)會發(fā)生什么樣的變化呢?文件系統(tǒng)存儲著有關(guān)模塊的屬性信息。程序員可以從這些屬性信息中了解目前模塊在系統(tǒng)中的狀態(tài),這些狀態(tài)對開發(fā)調(diào)試非常重要。5.3模塊參數(shù)和模塊之間通訊為了增加模塊的靈活性,可以給模塊添加參數(shù)。模塊參數(shù)可以控制模塊的內(nèi)部邏輯,從而使模塊可以在不同的情況下,完成不同的功能,下面首先對模塊參數(shù)進(jìn)行介紹。5.3.1模塊參數(shù)用戶空間的應(yīng)用程序可以接受用戶的參數(shù),設(shè)備驅(qū)動程序有時候也需要接受參數(shù)。例如一個模塊可以實現(xiàn)兩種相似的功能,這時可以傳遞一個參數(shù)到驅(qū)動模塊,以決定其使用哪一種功能。參數(shù)需要在加載模塊時指定,例如inmod
xxx.ko
param=1。5.3.2模塊的文件格式ELF了解模塊以何種格式存儲在硬盤中,對于理解模塊間怎樣通訊時非常有必要的。5.3.3模塊之間的通訊模塊是為了完成某種特定任務(wù)而設(shè)計的。其功能比較的單一,為了豐富系統(tǒng)的功能,所以模塊之間常常進(jìn)行通信。其之間可以共享變量,數(shù)據(jù)結(jié)構(gòu),也可以調(diào)用對方提供的功能函數(shù)。5.3.4模塊之間的通訊實例本實例通過兩個模塊來介紹模塊之間的通信。模塊add_sub提供了兩個導(dǎo)出函數(shù)add_integer()和sub_integer(),分別完成兩個數(shù)字的加法和減法。模塊test用來調(diào)用模塊add_sub提供的兩個方法,完成加法或者減法操作。1.a(chǎn)dd_sub模塊2.test模塊3.編譯模塊4.測試模塊5.4將模塊加入內(nèi)核當(dāng)編譯了模塊,如果希望模塊隨系統(tǒng)一起啟動,那么需要將模塊靜態(tài)編譯進(jìn)內(nèi)核。將模塊靜態(tài)編譯入內(nèi)核,需要完成一些必要的步驟。5.4.1向內(nèi)核添加模塊向Linux內(nèi)核中添加驅(qū)動模塊,需要完成4個工作:(1)編寫驅(qū)動程序文件。(2)將驅(qū)動程序文件放到Linux內(nèi)核源碼的相應(yīng)目錄中,如果沒有合適的目錄,可以自己建立一個目錄來存放驅(qū)動程序文件。(3)在目錄的Kconfig文件中添加新驅(qū)動程序?qū)?yīng)的項目編譯選擇。(4)在目錄的Makefile文件中添加新驅(qū)動程序的編譯語句。5.4.2Kconfig內(nèi)核源碼樹的目錄下都有兩個文件Kconfig和Makefile。分布到各目錄的Kconfig文件構(gòu)成了一個分布式的內(nèi)核配置數(shù)據(jù)庫,每個Kconfig文件分別描述了所屬目錄源文檔相關(guān)的內(nèi)核配置菜單。在內(nèi)核配置makemenuconfig(或xconfig等)時,從Kconfig中讀出菜單,用戶選擇后保存到.config這個內(nèi)核配置文檔中。在內(nèi)核編譯時,主目錄中的Makefile調(diào)用這個.config文件,就知道了用戶的選擇。5.4.3Kconfig的語法Kconfig語法較為簡單,其語法在Documentation/kbuild/kconfig-language.txt文件中做了介紹。歸納起來Kconfig的語法主要包括以下幾個方面:1.主要語法總覽2.菜單入口(config)3.菜單結(jié)構(gòu)(menu)4.選擇菜單(choice)5.注釋菜單(comment)5.4.4應(yīng)用實例:在內(nèi)核中新增加add_sub模塊下面講解一個綜合實例,假設(shè)我們將要在內(nèi)核中添加一個add_sub模塊??紤]add_sub模塊的功能,決定將該模塊加到內(nèi)核源碼的drivers目錄中。在drivers目錄中增加一個add_sub_Kconfig子目錄。5.4.5對add_sub模塊進(jìn)行配置當(dāng)將add_sub模塊的源文件加入到內(nèi)核源代碼中后,需要
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國音樂學(xué)院《生物學(xué)課程與教材研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 長春職業(yè)技術(shù)學(xué)院《模擬法庭競賽》2023-2024學(xué)年第一學(xué)期期末試卷
- 豫章師范學(xué)院《汽車用品設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 霧霾天氣下空氣質(zhì)量改善措施
- 財務(wù)總結(jié)報告及行動計劃模板
- Q2業(yè)務(wù)運營報告模板
- 業(yè)務(wù)操作-房地產(chǎn)經(jīng)紀(jì)人《業(yè)務(wù)操作》名師預(yù)測卷2
- 二零二五版加固工程加固施工與信息化合同3篇
- 二零二五年度航空航天發(fā)明專利權(quán)入股技術(shù)轉(zhuǎn)化協(xié)議3篇
- 二零二五版出租車駕駛員勞動合同執(zhí)行規(guī)范5篇
- 學(xué)校對口幫扶工作計劃
- 2024年醫(yī)師定期考核臨床業(yè)務(wù)知識考試題庫及答案(共三套)
- 2014新PEP小學(xué)英語六年級上冊-Unit5-What-does-he-do復(fù)習(xí)課件
- 建筑材料供應(yīng)鏈管理服務(wù)合同
- 孩子改名字父母一方委托書
- 2024-2025學(xué)年人教版初中物理九年級全一冊《電與磁》單元測試卷(原卷版)
- 江蘇單招英語考綱詞匯
- 2024年事業(yè)單位財務(wù)工作計劃例文(6篇)
- 2024年工程咨詢服務(wù)承諾書
- 青桔單車保險合同條例
- 車輛使用不過戶免責(zé)協(xié)議書范文范本
評論
0/150
提交評論