freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第七章linux設(shè)備驅(qū)動程序開發(fā)-wenkub

2023-03-21 11:44:39 本頁面
 

【正文】 代碼的位置置 ,其中保存有內(nèi)核的,其中保存有內(nèi)核的頂層頂層 makefile文件文件 173。PWD:=$(shelln n else和和 hello用來指定編譯內(nèi)核時所用的用來指定編譯內(nèi)核時所用的編譯選項編譯選項15TM 15ARM及 Thumb指令集 編寫 Hello World 模塊的 Makefilen P230n ifneq$(EXEC)$n clean:n 173。c$(MODCFLAGS)173。march=armv4tn LDFLAGS=173。173。D__KERNEL__O2linux173。常用正常但又重要的條件,用于提醒。KERN_CRIT2/*臨界條件,通常涉及嚴重的硬件或軟件操作臨界條件,通常涉及嚴重的硬件或軟件操作失敗失敗 */n define“消息文本消息文本 ”);;n 這里的日志級別通俗的說指的是對這里的日志級別通俗的說指的是對 文本信息的一種輸出范圍上的指定文本信息的一種輸出范圍上的指定 。//可選的可選的12TM 12ARM及 Thumb指令集Printk函數(shù)函數(shù)n printk(KERN_ALERT內(nèi)核函數(shù)內(nèi)核函數(shù) printk被定義在被定義在linux內(nèi)核中內(nèi)核中 ,他類似于標準他類似于標準 C函數(shù)函數(shù) printf().用用 MODULE_LICENSE宏來宏來聲明該模塊的許可協(xié)議聲明該模塊的許可協(xié)議 ,聲明為聲明為BSD和和 GPL雙重協(xié)議許可雙重協(xié)議許可11TM 11ARM及 Thumb指令集編寫 Hello World 模塊n MODULE_AUTHOR(“BENSON”)。hello_exit(void)n {n printk(KERN_ALERTn returnintlinux/n include所必需的宏所必需的宏定義所有模塊相關(guān)的宏定義所有模塊相關(guān)的宏 ,比如比如MODULE_LICENSEmodule_initn }n module_init(hello_init)。void!\n)。intlinux/n include命令來查看所有已加載的模塊的狀態(tài)。n 模塊方式調(diào)試:模塊方式調(diào)試:n (( 1)) 編譯的模塊直接插入內(nèi)核:用編譯的模塊直接插入內(nèi)核:用 insmod 協(xié)調(diào)工作也利于應(yīng)用程序的開發(fā)和擴展。系統(tǒng),當前使用的設(shè)備可以通過文件系統(tǒng),當前使用的設(shè)備可以通過文件/proc/devices字符設(shè)備字符設(shè)備n),close(),read(),write()等等 ,真真正做到了與設(shè)備無關(guān)。中,主要有三種設(shè)備即:中,主要有三種設(shè)備即: 字符設(shè)備字符設(shè)備 .塊設(shè)備和網(wǎng)絡(luò)塊設(shè)備和網(wǎng)絡(luò)設(shè)備設(shè)備 ,與此相關(guān)主要有三類設(shè)備驅(qū)動程序,字符設(shè)備驅(qū)動程,與此相關(guān)主要有三類設(shè)備驅(qū)動程序,字符設(shè)備驅(qū)動程序,塊設(shè)備驅(qū)動程序和網(wǎng)絡(luò)設(shè)備驅(qū)動程序序,塊設(shè)備驅(qū)動程序和網(wǎng)絡(luò)設(shè)備驅(qū)動程序 .n 他們的系統(tǒng)調(diào)用是一致的,他們的系統(tǒng)調(diào)用是一致的, 采用統(tǒng)一的接口采用統(tǒng)一的接口 (在數(shù)據(jù)結(jié)構(gòu)在數(shù)據(jù)結(jié)構(gòu)file_operations接訪問硬件的代碼,必須為應(yīng)用程序提供系統(tǒng)調(diào)用。5TM 5ARM及 Thumb指令集n 2.. Linux對設(shè)備進行對設(shè)備進行 管理管理 ,包括實時參數(shù)設(shè)置,以及提供對設(shè)備的,包括實時參數(shù)設(shè)置,以及提供對設(shè)備的 操操作接口作接口 ;;n 像操作系統(tǒng)的內(nèi)核的重要組成部分。因此,對于嵌入式開發(fā),更沒有通用的驅(qū)動程序可以便用。正這個時候就需要獨立開發(fā)一套適合自己產(chǎn)品的設(shè)備驅(qū)動。操作系統(tǒng)本身并沒有對種類繁多的硬件設(shè)備提供序也越多。比如網(wǎng)卡、件設(shè)備來說,其對應(yīng)的設(shè)備驅(qū)動程序是不同的。比如網(wǎng)卡、聲卡、鍵盤、鼠標、顯卡等。操作系統(tǒng)本身并沒有對種類繁多的硬件設(shè)備提供持久不變的持久不變的 “設(shè)備驅(qū)動設(shè)備驅(qū)動 ”, 也就是說操作系統(tǒng)在沒有設(shè)備驅(qū)動也就是說操作系統(tǒng)在沒有設(shè)備驅(qū)動程序支持下是無法正常支配硬件行為的。正是操作系統(tǒng)留下了是操作系統(tǒng)留下了 擴展設(shè)備驅(qū)動的接口擴展設(shè)備驅(qū)動的接口 ,才有了現(xiàn)在支持各,才有了現(xiàn)在支持各種應(yīng)用場合的硬件設(shè)備的蓬勃發(fā)展。因此,驅(qū)動程序開發(fā)是整個嵌入式系統(tǒng)設(shè)計過程中必不可少的一部驅(qū)動程序開發(fā)是整個嵌入式系統(tǒng)設(shè)計過程中必不可少的一部分。像操作系統(tǒng)的其他部分一樣,其他部分一樣, 驅(qū)動程序在一個高優(yōu)先級的環(huán)境下工作驅(qū)動程序在一個高優(yōu)先級的環(huán)境下工作 ,如,如果發(fā)生錯誤則可能會引發(fā)嚴重的問題。讀取讀取 應(yīng)用程序傳送給設(shè)備文件的應(yīng)用程序傳送給設(shè)備文件的 數(shù)據(jù)數(shù)據(jù) 或者或者 回送回送 應(yīng)用程序請求應(yīng)用程序請求的的 數(shù)據(jù)數(shù)據(jù) ;;n 檢測和處理設(shè)備出現(xiàn)的檢測和處理設(shè)備出現(xiàn)的 錯誤錯誤 。設(shè)備驅(qū)動程序接口設(shè)備驅(qū)動程序接口n 系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的接口,驅(qū)動程序系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的接口,驅(qū)動程序則是操作系統(tǒng)內(nèi)核與機器硬件的接口。 以便應(yīng)以便應(yīng)用程序能訪問設(shè)備。中中 )。正做到了與設(shè)備無關(guān)。塊設(shè)備塊設(shè)備n查看。7TM 7ARM及 Thumb指令集驅(qū)動程序中涉及的幾個概念模塊的概念模塊的概念n Linux可以以可以以 模塊模塊 的形式的形式 加載設(shè)備加載設(shè)備 類型,通常來說類型,通常來說 一個模一個模塊對應(yīng)實現(xiàn)一個設(shè)備驅(qū)動塊對應(yīng)實現(xiàn)一個設(shè)備驅(qū)動 ,因此是可以分類的。n Linuxn 通常情況下設(shè)備驅(qū)動的通常情況下設(shè)備驅(qū)動的 模塊動態(tài)加載模塊動態(tài)加載 更為普遍,開發(fā)人員更為普遍,開發(fā)人員不必在調(diào)試過程中頻繁啟動機器就能完成設(shè)備驅(qū)動的開發(fā)不必在調(diào)試過程中頻繁啟動機器就能完成設(shè)備驅(qū)動的開發(fā)工作。工具;工具;n (( 2)從內(nèi)核中卸載模塊:用)從內(nèi)核中卸載模塊:用 rmmod linux/n MODULE_LICENSE(Dual__initn return__exitn module_exit(hello_exit)。()、 linux/n MODULE_LICENSE(Dualhello_init(void)n {n printk(KERN_ALERT0。Goodbye,world!\n)。Hello,World n defineKERN_ERR3/*錯誤條件,驅(qū)動程序常用錯誤條件,驅(qū)動程序常用 KERN_ERR來報來報告硬件的錯誤告硬件的錯誤 */n define常用于與安全相關(guān)的消息于與安全相關(guān)的消息 */n definegccn LD=/usr/local/173。173。Irn all:o173。$rm*.o($(KERNELRELEASE),)n KDIR pwd)Cy則目標不會被編譯。的路徑。 指明存放指明存放。教學(xué)平臺進入教學(xué)平臺進入 Linuxn (( 2)輸入命令)輸入命令 cd是在是在 SDRAM下載到下載到 /tmp命令來傳輸?shù)模顏韨鬏數(shù)模?rz命令(命令( Linux來查看來查看/tmpn (( 4)) 改變改變 n (( 5)加載)加載 :模塊: insmod20TM 20ARM及 Thumb指令集驅(qū)動程序中涉及的幾個概念n 設(shè)備驅(qū)動程序的設(shè)備號和入口點設(shè)備驅(qū)動程序的設(shè)備號和入口點n Linux主設(shè)備號和次設(shè)備號。序。一個主設(shè)備號可能有多個設(shè)備與之對應(yīng),這多個設(shè)備正是在有多個設(shè)備與之對應(yīng),這多個設(shè)備正是在 驅(qū)動程序內(nèi)通過次驅(qū)動程序內(nèi)通過次設(shè)備號來進一步區(qū)分的設(shè)備號來進一步區(qū)分的 。n 在在 /proc/devices操作操作系統(tǒng),系統(tǒng), /dev在實際使用中,是通過中定義的宏來轉(zhuǎn)換格式。 /*主設(shè)備號主設(shè)備號 */n MINOR(dev)。n 我們可以在文件系統(tǒng)中使用我們可以在文件系統(tǒng)中使用 mknodn 下面給一個創(chuàng)建字符設(shè)備入口點的實例:下面給一個創(chuàng)建字符設(shè)備入口點的實例:n mknod0n 其中其中 c參數(shù)10025TM 25ARM及 Thumb指令集設(shè)備入口點設(shè)備入口點創(chuàng)建設(shè)備的入口點之后,可以通過如下命令查看:創(chuàng)建設(shè)備的入口點之后,可以通過如下命令查看:n n 設(shè)備設(shè)備 驅(qū)動程序驅(qū)動程序 運行在內(nèi)核空間比應(yīng)用程序執(zhí)行的運行在內(nèi)核空間比應(yīng)用程序執(zhí)行的 優(yōu)先級要高優(yōu)先級要高很多很多 。和對內(nèi)存的未授權(quán)訪問。如果一個硬件設(shè)備是以字符流的和鍵盤就都屬于字符設(shè)備。n 下面通過一個簡單的例子來了解一下系統(tǒng)調(diào)用的使用:下面通過一個簡單的例子來了解一下系統(tǒng)調(diào)用的使用:29TM 29ARM及 Thumb指令集一個簡單的應(yīng)用程序n definemain(intfd。n fd=open(DEVICE_GPIOTEST,O_RDONLY)。n {n perror(cann exit(1)。toonn if(val==1)n ioctl(fd,1,10)。/*主要用于對設(shè)備進行讀寫之外的其他控制主要用于對設(shè)備進行讀寫之外的其他控制 */n else/*關(guān)閉設(shè)備關(guān)閉設(shè)備 */n }n }n return—— 打開設(shè)備準備打開設(shè)備準備 I/O操作。*filename,?該函數(shù)返回該函數(shù)返回 文件描述字文件描述字 handle其其調(diào)用格式為調(diào)用格式為 :handle)。n對于有緩沖區(qū)的 I/O—— 往設(shè)備上寫數(shù)據(jù)往設(shè)備上寫數(shù)據(jù) ,對于有緩沖區(qū)的,對于有緩沖區(qū)的 I/Owrite(intint指向的緩沖區(qū)寫入與指向的緩沖區(qū)寫入與 handle 設(shè)備驅(qū)動和文件系統(tǒng)的關(guān)系 33TM 33ARM及 Thumb指令集nioctl———— 主要用于對設(shè)備進行讀寫之外的其他控制主要用于對設(shè)備進行讀寫之外的其他控制 。intcmd,char ?openopen(char其其調(diào)用格式為調(diào)用格式為 :handle)。n對于有緩沖區(qū)的 I/O—— 往設(shè)備上寫數(shù)據(jù)往設(shè)備上寫數(shù)據(jù) ,對于有緩沖區(qū)的,對于有緩沖區(qū)的 I/Owrite(intint指向的緩沖區(qū)寫入與指向的緩沖區(qū)寫入與 handle 設(shè)備驅(qū)動和文件系統(tǒng)的關(guān)系 36TM 36ARM及 Thumb指令集nioctl———— 主要用于對設(shè)備進行讀寫之外的其他控制主要用于對設(shè)備進行讀寫之外的其他控制 。intcmd,char(structfileunsigned兩個指針對應(yīng)應(yīng)用程序傳遞的文件描述符兩個指針對應(yīng)應(yīng)用程序傳遞的文件描述符 fd、 cmd的形式傳遞給驅(qū)的形式傳遞給驅(qū)動。:n 主設(shè)備號主設(shè)備號 標識設(shè)備對應(yīng)的驅(qū)動程序。 次設(shè)備號只能由設(shè)備驅(qū)動程序使用設(shè)備號來進一步區(qū)分的。文件說明。int*name,nexternmajor,39TM 39ARM及 Thumb指令集n 設(shè)備驅(qū)動中關(guān)鍵數(shù)據(jù)結(jié)構(gòu)設(shè)備驅(qū)動中關(guān)鍵數(shù)據(jù)結(jié)構(gòu)n在在 linux系統(tǒng)中,設(shè)備驅(qū)動程序所提供的這組入口點系統(tǒng)中,設(shè)備驅(qū)動程序所提供的這組入口點由一個文件操作結(jié)構(gòu)進行說明,分別是由一個文件操作結(jié)構(gòu)進行說明,分別是 :ninode數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) 40TM 40ARM及 Thumb指令集file_operations(文件操作文件操作 )數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)n 由于由于 用戶進程用戶進程 是通過是通過 設(shè)備文件設(shè)備文件 同同 硬件硬件 打交道的,所以對設(shè)備打交道的,所以對設(shè)備文件的操作不外乎一些系統(tǒng)調(diào)用,如文件的操作不外乎一些系統(tǒng)調(diào)用,如 open、 read、 write、close等。n 它用來它用來 存儲存儲 驅(qū)動內(nèi)核模塊提供的驅(qū)動內(nèi)核模塊提供的 對設(shè)備進行的各種操作的對設(shè)備進行的各種操作的 函函數(shù)指針數(shù)指針 。module(structint)。filesize_t,(*write)constloff_t(struct*,(*poll)struct(*ioctl)structint,(*mmap)struct(*open)struct(*flush)結(jié)構(gòu)體中的每結(jié)構(gòu)體中的每一個成員都對一個成員都對應(yīng)著應(yīng)著 驅(qū)動內(nèi)核驅(qū)動內(nèi)核模塊用來處理模塊用來處理某個請求事物某個請求事物的函數(shù)的地址的函數(shù)的地址42TM 42ARM及 Thumb指令集n int*,n int*,int(int,int)。filefile_lock(structstructlong,(*writev)constunsignedn ssize_t*,int,int)。 filelong,43TM 43ARM及 Thumb指令集p228n 在在 simple設(shè)備驅(qū)動程序中它的設(shè)備驅(qū)動程序中它的 simple_fopsTHIS_MODULE,n .llseeksimple_read,n .writesimple_ioctl,n .opensimple_release,}。結(jié)構(gòu)中唯一一個不是聲明操作的成員結(jié)構(gòu)中唯一一個不是聲明操作的成員 。幾乎所有時間中幾乎所有時間中 ,linux/(structint)。loff_t32位平臺上位平臺上也至少也至少 45TM 45ARM及 Thumb指令集n 3)ssize_t*,size_t,當為空時當為空時 ,導(dǎo)致導(dǎo)致 EINVAL(“Invalid用來聲明為用用來聲明為用戶態(tài)戶態(tài)n 4)ssize_tcharloff_t)。所有的操作會由所有的操作會由 (*write)
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1