下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
不管我們學(xué)習(xí)什么編程語言,和我們見面的第一個程序就是“helloworld!”相信各位道上的朋友都遇到過這種個程序!!學(xué)習(xí)驅(qū)動程序也不例外,我學(xué)的第一個驅(qū)動程序就是“helloworld??!”具體的程序代碼如下:#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ù)制到工作目錄下,并編寫一個簡單的Makefile文件:由于每個人使用的Linux系統(tǒng)不一樣且每個人內(nèi)核源代碼所存放的位置也不是一樣的。所以編寫Makefile文件的時候,參考別人的進(jìn)行修改是一個很不錯的的學(xué)習(xí)Makefile文件的方法。當(dāng)然你能把Linux內(nèi)核的Makefile文件了解一下,對你了解Linux內(nèi)核有很大的幫助的。學(xué)習(xí)心得:1、驅(qū)動模塊運(yùn)行在內(nèi)核空間,運(yùn)行是不能依賴任何函數(shù)庫和模塊連接,所以在寫驅(qū)動程序的時候所調(diào)用的函數(shù)只能是作為內(nèi)核一部分的函數(shù)。2、驅(qū)動模塊和應(yīng)用程序的一個重要不同是:應(yīng)用程序退出時可不管資源釋放或者其他的清除工作,但模塊的退出啊哈念書必須仔細(xì)撤銷初始化函數(shù)所做的一切,否則,在系統(tǒng)想重新引導(dǎo)之前某些東西就會殘留在系統(tǒng)中。3、處理器的多種工作模式其實(shí)就是為了操作系統(tǒng)的用戶空間和內(nèi)核空間設(shè)計的,在Unix類的操作系統(tǒng)中只是用到了兩個級別:最高級別和最低級別。4、要十分注意驅(qū)動程序的并發(fā)處理。在Linux驅(qū)動程序中必須解決的一個問題就是多個進(jìn)程對共享資源的并發(fā)訪問.Linux對解決并發(fā)訪問可能導(dǎo)致的竟態(tài)問題提供了幾種機(jī)制:中斷屏蔽、原子操作、自旋鎖、信號量等機(jī)制。5、內(nèi)核API中具有下劃線(__)的函數(shù),通常是接口的底層組件,應(yīng)該慎用。6、內(nèi)核代碼不能實(shí)現(xiàn)浮點(diǎn)運(yùn)算。內(nèi)核中沒有提供一套進(jìn)行浮點(diǎn)運(yùn)算的完整的環(huán)境。7、Makefile文件的分析:obj-m:=hello.o代表了我們要構(gòu)建的模塊名為hello.ko,make會子啊該目錄下自動找到hello.c文件進(jìn)行編譯。如果hello.o文件是有其他的源文件生成(比如file.1和file1.c)的,則在下面加上:hello-objs:=file.ofile1.o......(其中用紅色標(biāo)志的是對應(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)核符號表來解析模塊中未定義的符號,公共內(nèi)核符號表中包含了的、所有的全局內(nèi)核項(xiàng)(即函數(shù)和變量的地址),這是實(shí)現(xiàn)模塊化驅(qū)動程序所必須的。9、Linux使用模塊層疊技術(shù),我們可以將模塊劃分為多個層次,通過簡化每個層可以縮短開發(fā)周期。如果一個模塊需要向其他模塊導(dǎo)出符號,則使用下面宏:EXPORT_SYMBOL(name);
EXPORT_SYMBOL_GPL(name);符號必須子啊模塊文件的全局變量部分導(dǎo)出,因?yàn)檫@兩個宏將被擴(kuò)展為一個特殊變量的聲明,而該變量必須是全局的。10、所有的模塊代碼都必須包含下面兩個頭文件:#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)核模塊的初始化出錯處理一般使用“goto”語句,通常情況下很少使用“goto”,但是出錯處理是(可能是唯一的情況),它卻非常的有用。在大一學(xué)習(xí)C語言的時候,老師就建議不要使用“goto”語句,并說很少會用到,在這里遇到第一個建議使用“goto”語句的。在追求效率的代碼中使用goto語句一直是最好的錯誤恢復(fù)機(jī)制。下面是我截下來的一段關(guān)于使用goto語句實(shí)現(xiàn)錯誤處理的程序: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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024科技公司與醫(yī)療機(jī)構(gòu)之間關(guān)于醫(yī)療設(shè)備研發(fā)與銷售合同
- 2025年度廠房辦公室裝修項(xiàng)目噪音控制合同范本4篇
- 個體經(jīng)營者與員工2024年勞動協(xié)議樣式版B版
- 花煙草養(yǎng)護(hù)知識培訓(xùn)課件
- 2024跨國企業(yè)人力資源外包管理合同
- 2024版貨物運(yùn)輸安全合同書
- 2025年度園林景區(qū)草坪修剪與生態(tài)修復(fù)合同3篇
- 2024年03月廣東屆興業(yè)銀行深圳分行線上校招筆試歷年參考題庫附帶答案詳解
- 2025年度城市綜合體戶外廣告位及攤位聯(lián)合租賃及品牌推廣合同4篇
- 2025年拆除工程環(huán)境影響評價合同4篇
- 人教版八年級下冊第一單元英語Unit1 單元設(shè)計
- PEP小學(xué)六年級英語上冊選詞填空專題訓(xùn)練
- 古建筑修繕項(xiàng)目施工規(guī)程(試行)
- GA 844-2018防砸透明材料
- 化學(xué)元素周期表記憶與讀音 元素周期表口訣順口溜
- 非人力資源經(jīng)理的人力資源管理培訓(xùn)(新版)課件
- MSDS物質(zhì)安全技術(shù)資料-201膠水
- 鉬氧化物還原過程中的物相轉(zhuǎn)變規(guī)律及其動力學(xué)機(jī)理研究
- (完整word)2019注冊消防工程師繼續(xù)教育三科試習(xí)題及答案
- 《調(diào)試件現(xiàn)場管理制度》
- 社區(qū)治理現(xiàn)代化課件
評論
0/150
提交評論