版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式應(yīng)用程序設(shè)計(jì)設(shè)備驅(qū)動(dòng)知識(shí)點(diǎn)回顧TCP/IP模型套接字TCP套接字編程UDP套接字編程
設(shè)備驅(qū)動(dòng)得基本概念Linux內(nèi)核與驅(qū)動(dòng)得關(guān)系Linux內(nèi)核模塊結(jié)構(gòu)內(nèi)核模塊命令本次課內(nèi)容3
1、設(shè)備驅(qū)動(dòng)概念就是處理和操作硬件控制器得軟件。驅(qū)動(dòng)程序就是內(nèi)核得一部分,就是操作系統(tǒng)內(nèi)核與硬件設(shè)備得直接接口,驅(qū)動(dòng)程序屏蔽了硬件得細(xì)節(jié),完成以下功能:對(duì)設(shè)備初始化和釋放;對(duì)設(shè)備進(jìn)行管理,包括實(shí)時(shí)參數(shù)設(shè)置,以及提供對(duì)設(shè)備得操作接口;讀取應(yīng)用程序傳送給設(shè)備文件得數(shù)據(jù)或者回送應(yīng)用程序請(qǐng)求得數(shù)據(jù);檢測(cè)和處理設(shè)備出現(xiàn)得錯(cuò)誤。8、1設(shè)備驅(qū)動(dòng)編程基礎(chǔ)—設(shè)備驅(qū)動(dòng)4
2、Linux系統(tǒng)得設(shè)備分類(lèi)字符設(shè)備通常指以字節(jié)為單位順序讀寫(xiě)得設(shè)備,如并口設(shè)備、虛擬控制臺(tái)等。塊設(shè)備通常指以塊為單位隨機(jī)讀寫(xiě)得設(shè)備,如IDE硬盤(pán)、SCSI硬盤(pán)、光驅(qū)等。網(wǎng)絡(luò)設(shè)備通常就是指通過(guò)網(wǎng)絡(luò)能夠與其她主機(jī)進(jìn)行數(shù)據(jù)通信得設(shè)備,如網(wǎng)卡等。8、1設(shè)備驅(qū)動(dòng)編程基礎(chǔ)—設(shè)備驅(qū)動(dòng)5舉例:linux設(shè)備識(shí)別在linux中任何設(shè)備都就是文件。所有設(shè)備得設(shè)備文件節(jié)點(diǎn)都在/dev目錄下。
#:ls–al/dev
3、設(shè)備驅(qū)動(dòng)程序得特點(diǎn)內(nèi)核代碼內(nèi)核接口內(nèi)核機(jī)制和服務(wù)可裝載可設(shè)置動(dòng)態(tài)性8、1設(shè)備驅(qū)動(dòng)編程基礎(chǔ)—設(shè)備驅(qū)動(dòng)7
4、設(shè)備驅(qū)動(dòng)程序與整個(gè)軟硬件系統(tǒng)得關(guān)系8、1設(shè)備驅(qū)動(dòng)編程基礎(chǔ)—設(shè)備驅(qū)動(dòng)8大家有疑問(wèn)的,可以詢問(wèn)和交流可以互相討論下,但要小聲點(diǎn)
1、Linux得內(nèi)核模塊Linux內(nèi)核采用可加載內(nèi)核模塊化設(shè)計(jì)(LoadableKernelModule,LKM)內(nèi)核模塊:就是一些可以讓操作系統(tǒng)內(nèi)核在需要時(shí)載入和執(zhí)行得代碼。就是一種目標(biāo)對(duì)象文件,通常由一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成。內(nèi)核得一個(gè)模塊可以以兩種方式被編譯和加載。直接編譯進(jìn)Linux內(nèi)核,隨同Linux啟動(dòng)時(shí)加載;編譯成一個(gè)可加載和刪除得模塊。8、1設(shè)備驅(qū)動(dòng)編程基礎(chǔ)—內(nèi)核模塊編程108、1設(shè)備驅(qū)動(dòng)編程基礎(chǔ)—內(nèi)核模塊編程C語(yǔ)言程序Linux內(nèi)核模塊運(yùn)行用戶空間內(nèi)核空間入口main()module_init()指定;出口main() module_exit()指定;
編譯gcc–cMakefile連接ldinsmod運(yùn)行直接運(yùn)行insmod調(diào)試gdbkdbug,kdb,kgdb等2、Linux內(nèi)核模塊與應(yīng)用程序得區(qū)別8、1設(shè)備驅(qū)動(dòng)編程基礎(chǔ)—內(nèi)核模塊編程3、內(nèi)核模塊相關(guān)命令insmodmodule、oLoadthemodule注意,只有超級(jí)用戶才能使用這個(gè)命令rmmod
moduleUnloadthemodulelsmodListallmodulesloadedintothekernel這個(gè)命令和cat/proc/modules等價(jià)modprobe[-r]<modulename>–Loadthemodulespecifiedandmodulesitdepends舉例:模塊相關(guān)命令lsmodinsmodhello、ormmodhellomodprobe
/lib/modules/linux版本號(hào)/modules、dep
/etc/modprobe、confmodeproble–rhello最簡(jiǎn)單得內(nèi)核模塊例子#include<linux/module、h>#include<linux/init、h>#include<linux/kernel>MODULE_LICENSE("GPL");staticint__inithello_init(void){
printk(“Hellokernel…、\n");
return0;}staticvoid__exithello_exit(void){
printk(“byebye…、\n");}module_init(hello_init);module_exit(hello_exit);生成makefile文件Makefile文件obj-m:=hello、oall:
make-C/usr/src/linux-2、4、20/M=$(shellpwd)modulesclean:make-C/usr/src/linux-2、4、20/M=$(shellpwd)modulesclean編譯裝載過(guò)程$ls
hello、c
Makefile
$make
make-C/usr/src/linux-2、4、20/M=/wu/char_8modules
$ls
hello、c
hello、mod、c
hello、mode、ohello、o
make、log
Makefile
modules、order
$sudoinsmodhello、o
$dmesg|tail-1
Hellokernel…$lsmod|grephello
hello
1216
0
$sudormmodhello
$dmesg|tail-1
byebye…、
不需要編寫(xiě)Makefile得方法gcc編譯后加上-DMODULE-DLINUX參數(shù)例如:gcc-DMODULE-DLINUX-I/usr/src/linux-2、4、20/include-c-ohello、ohello、c注意:-I選項(xiàng)跟著Linux內(nèi)核源代碼中Include目錄得路徑。
4、內(nèi)核模塊得程序結(jié)構(gòu)一個(gè)Linux內(nèi)核模塊主要由以下幾個(gè)部分組成。模塊加載函數(shù)(必須)模塊卸載函數(shù)(必須)模塊許可證聲明(必須)模塊參數(shù)(可選)模塊導(dǎo)出符號(hào)(可選)模塊作者等信息聲明(可選)8、1設(shè)備驅(qū)動(dòng)編程基礎(chǔ)—內(nèi)核模塊編程18
staticint__initinitialization_function(void){ /*初始化代碼*/}module_init(initialization_function);模塊加載函數(shù)19
staticvoid__exitcleanup_function(void){ /*釋放代碼*/}module_exit(cleanup_function);模塊卸載函數(shù)20
module_param(參數(shù)名,參數(shù)類(lèi)型,參數(shù)讀/寫(xiě)權(quán)限訪問(wèn)許可掩碼)宏為模塊聲明一個(gè)參數(shù)支持得參數(shù)類(lèi)型byte,short,ushort,int,uint,long,ulong,bool,charp,invboolarray(module_param_array(name,type,nump,perm))例如:staticchar*str_param="LinuxModuleProgram";staticintnum_param=4000;module_param(num_param,int,S_IRUGO);module_param(str_param,charp,S_IRUGO);參數(shù)在模塊加載時(shí)傳遞
#insmodhello、otest=2模塊參數(shù)21
導(dǎo)出符號(hào)EXPORT_SYMBOL(符號(hào)名);EXPORT_SYMBOL_GPL(符號(hào)名);模塊聲明與描述MODULE_AUTHOR(author);MODULE_DESCRIPTION(description);MODULE_VERSION(version_string);MODULE_DEVICE_TABLE(table_info);MODULE_ALIAS(alternate_name);導(dǎo)出符號(hào)與模塊聲明與描述22#include<linux/module、h>#include<linux/init、h>#include<linux/moduleparam、h>staticchar*whom="world";staticinthowmany=1;module_param(howmany,int,0444);module_param(whom,charp,S_IRUGO);staticint__inithello_init(void){
inti;for(i=0;i<howmany;i++)printk(“(%d)Hello,%s\n”,i,whom);
return0;}staticvoid__exithello_exit(void){
prin
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 威海海洋職業(yè)學(xué)院《新疆生產(chǎn)建設(shè)兵團(tuán)史》2023-2024學(xué)年第一學(xué)期期末試卷
- 掛靠車(chē)輛押金合同范例
- 2025上海市技術(shù)服務(wù)合同
- 山林管護(hù)合同范例
- 皮革原料采購(gòu)合同范例
- 公證服務(wù)合同范例
- 承包種植樹(shù)合同范例
- 沉降觀測(cè)檢測(cè)合同范例
- 學(xué)校印刷服務(wù)合同范例
- 工廠配電箱租賃合同范例
- 燃?xì)庥邢薰就话l(fā)環(huán)境專(zhuān)項(xiàng)應(yīng)急預(yù)案
- 【課件】供應(yīng)商現(xiàn)場(chǎng)與質(zhì)量管理
- 2024年立式碾米機(jī)項(xiàng)目可行性研究報(bào)告
- 狼瘡性腦病的護(hù)理
- 統(tǒng)編版語(yǔ)文九年級(jí)上冊(cè)(2024)(含答案)
- 中華人民共和國(guó)保守國(guó)家秘密法實(shí)施條例培訓(xùn)課件
- 中醫(yī)醫(yī)術(shù)確有專(zhuān)長(zhǎng)人員醫(yī)師資格考核申報(bào)資料表
- 智慧醫(yī)學(xué)語(yǔ)言基礎(chǔ)2024a學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 成都錦城學(xué)院《算法分析與設(shè)計(jì)》2022-2023學(xué)年期末試卷
- 可行性報(bào)告編制服務(wù)方案
- 2024年煤礦主要負(fù)責(zé)人安全考試題庫(kù)(濃縮500題)
評(píng)論
0/150
提交評(píng)論