下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
不管我們學(xué)習(xí)什么編程語(yǔ)言,和我們見(jiàn)面的第一個(gè)程序就是“helloworld!”相信各位道上的朋友都遇到過(guò)這種個(gè)程序??!學(xué)習(xí)驅(qū)動(dòng)程序也不例外,我學(xué)的第一個(gè)驅(qū)動(dòng)程序就是“helloworld?。 本唧w的程序代碼如下:#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("DualBSD/GPL");
staticinthello_init(void)
{
printk(KERN_ALERT"Hello,world!\n");
return0;
}
staticvoidhello_exit(void)
{
printk(KERN_ALERT"bybyFriendyARMmini2440!\n");
}
module_init(hello_init);
module_exit(hello_exit);將其復(fù)制到工作目錄下,并編寫(xiě)一個(gè)簡(jiǎn)單的Makefile文件:由于每個(gè)人使用的Linux系統(tǒng)不一樣且每個(gè)人內(nèi)核源代碼所存放的位置也不是一樣的。所以編寫(xiě)Makefile文件的時(shí)候,參考別人的進(jìn)行修改是一個(gè)很不錯(cuò)的的學(xué)習(xí)Makefile文件的方法。當(dāng)然你能把Linux內(nèi)核的Makefile文件了解一下,對(duì)你了解Linux內(nèi)核有很大的幫助的。學(xué)習(xí)心得:1、驅(qū)動(dòng)模塊運(yùn)行在內(nèi)核空間,運(yùn)行是不能依賴任何函數(shù)庫(kù)和模塊連接,所以在寫(xiě)驅(qū)動(dòng)程序的時(shí)候所調(diào)用的函數(shù)只能是作為內(nèi)核一部分的函數(shù)。2、驅(qū)動(dòng)模塊和應(yīng)用程序的一個(gè)重要不同是:應(yīng)用程序退出時(shí)可不管資源釋放或者其他的清除工作,但模塊的退出啊哈念書(shū)必須仔細(xì)撤銷初始化函數(shù)所做的一切,否則,在系統(tǒng)想重新引導(dǎo)之前某些東西就會(huì)殘留在系統(tǒng)中。3、處理器的多種工作模式其實(shí)就是為了操作系統(tǒng)的用戶空間和內(nèi)核空間設(shè)計(jì)的,在Unix類的操作系統(tǒng)中只是用到了兩個(gè)級(jí)別:最高級(jí)別和最低級(jí)別。4、要十分注意驅(qū)動(dòng)程序的并發(fā)處理。在Linux驅(qū)動(dòng)程序中必須解決的一個(gè)問(wèn)題就是多個(gè)進(jìn)程對(duì)共享資源的并發(fā)訪問(wèn).Linux對(duì)解決并發(fā)訪問(wèn)可能導(dǎo)致的竟態(tài)問(wèn)題提供了幾種機(jī)制:中斷屏蔽、原子操作、自旋鎖、信號(hào)量等機(jī)制。5、內(nèi)核API中具有下劃線(__)的函數(shù),通常是接口的底層組件,應(yīng)該慎用。6、內(nèi)核代碼不能實(shí)現(xiàn)浮點(diǎn)運(yùn)算。內(nèi)核中沒(méi)有提供一套進(jìn)行浮點(diǎn)運(yùn)算的完整的環(huán)境。7、Makefile文件的分析:obj-m:=hello.o代表了我們要構(gòu)建的模塊名為hello.ko,make會(huì)子啊該目錄下自動(dòng)找到hello.c文件進(jìn)行編譯。如果hello.o文件是有其他的源文件生成(比如file.1和file1.c)的,則在下面加上:hello-objs:=file.ofile1.o......(其中用紅色標(biāo)志的是對(duì)應(yīng)關(guān)系)$(MAKE)-C$(KERNELDIR)M=$(PWD)modules其中-C$(KERNELDIR)指定了內(nèi)核源代碼的位置,其中保存有內(nèi)核的頂層makefile文件。M=$(PWD)指定了模塊源代碼的位置modules目標(biāo)指向obj-m變量中設(shè)定的模塊8、insmod使用公共內(nèi)核符號(hào)表來(lái)解析模塊中未定義的符號(hào),公共內(nèi)核符號(hào)表中包含了的、所有的全局內(nèi)核項(xiàng)(即函數(shù)和變量的地址),這是實(shí)現(xiàn)模塊化驅(qū)動(dòng)程序所必須的。9、Linux使用模塊層疊技術(shù),我們可以將模塊劃分為多個(gè)層次,通過(guò)簡(jiǎn)化每個(gè)層可以縮短開(kāi)發(fā)周期。如果一個(gè)模塊需要向其他模塊導(dǎo)出符號(hào),則使用下面宏:EXPORT_SYMBOL(name);
EXPORT_SYMBOL_GPL(name);符號(hào)必須子啊模塊文件的全局變量部分導(dǎo)出,因?yàn)檫@兩個(gè)宏將被擴(kuò)展為一個(gè)特殊變量的聲明,而該變量必須是全局的。10、所有的模塊代碼都必須包含下面兩個(gè)頭文件:#include<linux/init.h>#include<linux/module.h>11、所有模塊代碼都應(yīng)指定所使用的許可證:MODULE_LICENSE("DualBSD/GPL");12、初始化和關(guān)閉初始化的實(shí)際定義通常是:staticint__initinitialization_function(void)
{
/*初始化代碼*/
}
module_init(initialization_function)清除函數(shù)的實(shí)際定義是:staticint__exitcleanup_function(void)
{
/*清除代碼*/
}
module_exit(cleanup_function)13、還有一些是可選的其他的描述型的定義:MODULE_AUTHOR("");
MODULE_DESCRIPTION("");
MODULE_VERSION("");
MODULE_ALIAS("");
MODULE_DEVICE_TABLE("");這些模塊的聲明習(xí)慣性的放在模塊程序的最后面。14、Linux內(nèi)核模塊的初始化出錯(cuò)處理一般使用“goto”語(yǔ)句,通常情況下很少使用“goto”,但是出錯(cuò)處理是(可能是唯一的情況),它卻非常的有用。在大一學(xué)習(xí)C語(yǔ)言的時(shí)候,老師就建議不要使用“goto”語(yǔ)句,并說(shuō)很少會(huì)用到,在這里遇到第一個(gè)建議使用“goto”語(yǔ)句的。在追求效率的代碼中使用goto語(yǔ)句一直是最好的錯(cuò)誤恢復(fù)機(jī)制。下面是我截下來(lái)的一段關(guān)于使用goto語(yǔ)句實(shí)現(xiàn)錯(cuò)誤處理的程序:structsomething*item1;
structsomethingelse*item2;
intstuff_ok;voidmy_cleanup(void)
{
if(item1)release_thing(item1);
if(item2)
release_thing2(item2);
if(stuff_ok)
unregister_stuff();
return;
}
int__initmy_init(void)
{
interr=-ENOMEM;
item1=allocate_thing(arguments);
item2=allocate_thing2(arguments2);
if(!item2||!item2)
gotofail;
err=register_stuff(item1,item2);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路景觀設(shè)施承諾書(shū)
- 煙草產(chǎn)品收款流程
- 印刷廠門(mén)窗施工合同協(xié)議書(shū)
- 健身房墻面裝修合同協(xié)議
- 可持續(xù)發(fā)展成品油市場(chǎng)管理辦法
- 基坑降水施工合同:文物保護(hù)工程
- 廣告公司合同管理方案
- 建筑公司工程車輛司機(jī)聘用合同
- 通信設(shè)備維護(hù)服務(wù)合同
- 流行病的特征
- 馬克思主義基本原理全套課件
- 動(dòng)物生產(chǎn)新技術(shù)與應(yīng)用課件
- 三年級(jí)上冊(cè)道德與法治教案-《平安出行》 部編版
- 植物營(yíng)養(yǎng)學(xué)課件:植物的鈣鎂硫營(yíng)養(yǎng)
- 小學(xué)英語(yǔ)工作室個(gè)人年度總結(jié)5篇
- 呼市回民區(qū)萬(wàn)達(dá)廣場(chǎng)強(qiáng)條紅線黃線專項(xiàng)培訓(xùn)考試
- 電力二次系統(tǒng)安全監(jiān)控日志規(guī)范
- 迎檢工作注意事項(xiàng)
- 二進(jìn)制與十進(jìn)制的互換課件
- 干細(xì)胞精品課件
- 點(diǎn)直線與圓的位置關(guān)系說(shuō)課稿 完整版課件
評(píng)論
0/150
提交評(píng)論