嵌入式應(yīng)用程序設(shè)計(jì)設(shè)備驅(qū)動(dòng)_第1頁(yè)
嵌入式應(yīng)用程序設(shè)計(jì)設(shè)備驅(qū)動(dòng)_第2頁(yè)
嵌入式應(yīng)用程序設(shè)計(jì)設(shè)備驅(qū)動(dòng)_第3頁(yè)
嵌入式應(yīng)用程序設(shè)計(jì)設(shè)備驅(qū)動(dòng)_第4頁(yè)
嵌入式應(yīng)用程序設(shè)計(jì)設(shè)備驅(qū)動(dòng)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論