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

正文內(nèi)容

第七章linux設(shè)備驅(qū)動(dòng)程序開發(fā)-文庫(kù)吧

2025-02-20 11:44 本頁(yè)面


【正文】 j173。m表示要由表示要由 編譯得到編譯得到 , 并作為模并作為模塊編譯塊編譯obj173。y則表示要連接進(jìn)內(nèi)核則表示要連接進(jìn)內(nèi)核obj173。x則目標(biāo)不會(huì)被編譯。則目標(biāo)不會(huì)被編譯。M=$(PWD) 指明存放指明存放。的路徑。 16TM 16ARM及 Thumb指令集17TM 17ARM及 Thumb指令集M=$(PWD) 指明存放指明存放。的路徑。 18TM 18ARM及 Thumb指令集n ( 1)先讓)先讓 FS2410P教學(xué)平臺(tái)進(jìn)入教學(xué)平臺(tái)進(jìn)入 Linux環(huán)境,利用超級(jí)終端來(lái)顯示,環(huán)境,利用超級(jí)終端來(lái)顯示,Linux進(jìn)入命令行的模式下。進(jìn)入命令行的模式下。n (( 2)輸入命令)輸入命令 cd/tmp,進(jìn)入,進(jìn)入 tmp目錄目錄 ,因?yàn)椋驗(yàn)?/tmp是在是在 SDRAM中,可中,可以放數(shù)據(jù)。以放數(shù)據(jù)。n (( 3)將)將 下載到下載到 /tmp目錄下。目錄下。n 采用的采用的 rz命令來(lái)傳輸?shù)?,命令?lái)傳輸?shù)模?rz命令是通過(guò)命令是通過(guò) Zmodem協(xié)議來(lái)傳輸?shù)摹O仍诮虆f(xié)議來(lái)傳輸?shù)?。先在教學(xué)平臺(tái)的下輸入學(xué)平臺(tái)的下輸入 rz命令(命令( Linux環(huán)境下),接著點(diǎn)擊超級(jí)終端的環(huán)境下),接著點(diǎn)擊超級(jí)終端的 “傳送傳送 ”—“ 發(fā)送文件發(fā)送文件 ”,在彈出的對(duì)話框中設(shè)置如下:,在彈出的對(duì)話框中設(shè)置如下:19TM 19ARM及 Thumb指令集n 然后點(diǎn)擊發(fā)送。數(shù)據(jù)傳輸完后,再回車,接著通過(guò)然后點(diǎn)擊發(fā)送。數(shù)據(jù)傳輸完后,再回車,接著通過(guò) ls來(lái)查看來(lái)查看/tmp目錄下是否有目錄下是否有 文件。文件。n (( 4)) 下載成功后,接下來(lái)我們要進(jìn)行真正的加載和下載成功后,接下來(lái)我們要進(jìn)行真正的加載和運(yùn)行的工作了。運(yùn)行的工作了。 改變改變 的屬性,命令如下:的屬性,命令如下:n chmod755n (( 5)加載)加載 :模塊: insmod./這時(shí)我們就可以看到期待已久的這時(shí)我們就可以看到期待已久的 Hello,world了。了。n (6).卸載驅(qū)動(dòng)模塊:卸載驅(qū)動(dòng)模塊: rmmod卸載時(shí)就可在屏幕上看到如下信息:卸載時(shí)就可在屏幕上看到如下信息: Goodbye,world20TM 20ARM及 Thumb指令集驅(qū)動(dòng)程序中涉及的幾個(gè)概念n 設(shè)備驅(qū)動(dòng)程序的設(shè)備號(hào)和入口點(diǎn)設(shè)備驅(qū)動(dòng)程序的設(shè)備號(hào)和入口點(diǎn)n Linux系統(tǒng)通過(guò)系統(tǒng)通過(guò) 設(shè)備號(hào)設(shè)備號(hào) 來(lái)區(qū)分不同設(shè)備。設(shè)備號(hào)由兩部分組來(lái)區(qū)分不同設(shè)備。設(shè)備號(hào)由兩部分組成:成: 主設(shè)備號(hào)和次設(shè)備號(hào)。主設(shè)備號(hào)和次設(shè)備號(hào)。n 主設(shè)備號(hào)主設(shè)備號(hào) 標(biāo)識(shí)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序。系統(tǒng)中不同的設(shè)備可以標(biāo)識(shí)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序。系統(tǒng)中不同的設(shè)備可以有相同的主設(shè)備號(hào),主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程有相同的主設(shè)備號(hào),主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序。序。 n 次設(shè)備號(hào)次設(shè)備號(hào) 用來(lái)區(qū)分具體驅(qū)動(dòng)程序的實(shí)例。一個(gè)主設(shè)備號(hào)可能用來(lái)區(qū)分具體驅(qū)動(dòng)程序的實(shí)例。一個(gè)主設(shè)備號(hào)可能有多個(gè)設(shè)備與之對(duì)應(yīng),這多個(gè)設(shè)備正是在有多個(gè)設(shè)備與之對(duì)應(yīng),這多個(gè)設(shè)備正是在 驅(qū)動(dòng)程序內(nèi)通過(guò)次驅(qū)動(dòng)程序內(nèi)通過(guò)次設(shè)備號(hào)來(lái)進(jìn)一步區(qū)分的設(shè)備號(hào)來(lái)進(jìn)一步區(qū)分的 。次設(shè)備號(hào)只能由設(shè)備驅(qū)動(dòng)程序使用。次設(shè)備號(hào)只能由設(shè)備驅(qū)動(dòng)程序使用,內(nèi)核的其他部分僅將它作為參數(shù)傳遞給驅(qū)動(dòng)程序。,內(nèi)核的其他部分僅將它作為參數(shù)傳遞給驅(qū)動(dòng)程序。n 在在 /proc/devices中列出了系統(tǒng)中處于中列出了系統(tǒng)中處于 活動(dòng)狀態(tài)活動(dòng)狀態(tài) 設(shè)備的主設(shè)備設(shè)備的主設(shè)備號(hào),所謂的活動(dòng)狀態(tài)是指與該設(shè)備對(duì)應(yīng)的號(hào),所謂的活動(dòng)狀態(tài)是指與該設(shè)備對(duì)應(yīng)的 設(shè)備驅(qū)動(dòng)已經(jīng)被系設(shè)備驅(qū)動(dòng)已經(jīng)被系統(tǒng)內(nèi)核裝載。統(tǒng)內(nèi)核裝載。21TM 21ARM及 Thumb指令集/dev/字符為字符為 c表示字表示字符設(shè)備符設(shè)備 ,為為 b表表示塊設(shè)備示塊設(shè)備兩個(gè)數(shù)字對(duì)應(yīng)兩個(gè)數(shù)字對(duì)應(yīng)主設(shè)備號(hào)和次主設(shè)備號(hào)和次設(shè)備號(hào)設(shè)備號(hào)n對(duì)于現(xiàn)有對(duì)于現(xiàn)有 Linux操作操作系統(tǒng),系統(tǒng), /dev目錄是必不目錄是必不可少的,這個(gè)目錄包含可少的,這個(gè)目錄包含了所有了所有 Linux系統(tǒng)所知系統(tǒng)所知道的字符設(shè)備,塊設(shè)備道的字符設(shè)備,塊設(shè)備和網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)設(shè)備22TM 22ARM及 Thumb指令集/proc/devicesp233在在 /proc/devices 中列出了系統(tǒng)中處中列出了系統(tǒng)中處于于 活動(dòng)狀態(tài)活動(dòng)狀態(tài) 設(shè)備的設(shè)備的主設(shè)備號(hào)主設(shè)備號(hào)23TM 23ARM及 Thumb指令集dev_t類型n dev_t類型類型n 內(nèi)核用內(nèi)核用 dev_t類型來(lái)保存類型來(lái)保存 設(shè)備編號(hào)設(shè)備編號(hào) , dev_t是個(gè)是個(gè) 32位的數(shù),位的數(shù), 12位位表示主設(shè)備號(hào),表示主設(shè)備號(hào), 20為表示次設(shè)備號(hào)。在實(shí)際使用中,是通過(guò)中為表示次設(shè)備號(hào)。在實(shí)際使用中,是通過(guò)中定義的宏來(lái)轉(zhuǎn)換格式。定義的宏來(lái)轉(zhuǎn)換格式。n 獲得獲得 dev_t的主設(shè)備號(hào)和次設(shè)備號(hào),應(yīng)使用以下的宏,例如:的主設(shè)備號(hào)和次設(shè)備號(hào),應(yīng)使用以下的宏,例如:n dev_t dev。n MAJOR(dev)。 /*主設(shè)備號(hào)主設(shè)備號(hào) */n MINOR(dev)。 /*次設(shè)備號(hào)次設(shè)備號(hào) */n 如果要將主設(shè)備號(hào)、次設(shè)備號(hào)轉(zhuǎn)換成如果要將主設(shè)備號(hào)、次設(shè)備號(hào)轉(zhuǎn)換成 dev_t類型,則使用以下類型,則使用以下的宏的宏 ,例如:例如:n Int major=4, minor=3。n MKDEV(int major,int minor)24TM 24ARM及 Thumb指令集設(shè)備入口點(diǎn)設(shè)備入口點(diǎn) p234n 設(shè)備入口點(diǎn)設(shè)備入口點(diǎn)n 設(shè)備入口點(diǎn)也可以理解為設(shè)備入口點(diǎn)也可以理解為 “設(shè)備文件句柄設(shè)備文件句柄 ”,一個(gè)設(shè)備的入口,一個(gè)設(shè)備的入口點(diǎn)和磁盤上的普通文件系統(tǒng)一樣,可以刪除(點(diǎn)和磁盤上的普通文件系統(tǒng)一樣,可以刪除( rm)) ,移動(dòng)(移動(dòng)(mv)和復(fù)制()和復(fù)制( cp)等。)等。n 我們可以在文件系統(tǒng)中使用我們可以在文件系統(tǒng)中使用 mknod命令創(chuàng)建一個(gè)設(shè)備入口點(diǎn)命令創(chuàng)建一個(gè)設(shè)備入口點(diǎn)。在文件系統(tǒng)中創(chuàng)建了設(shè)備入口點(diǎn)并。在文件系統(tǒng)中創(chuàng)建了設(shè)備入口點(diǎn)并 沒(méi)有代表響應(yīng)的設(shè)備驅(qū)沒(méi)有代表響應(yīng)的設(shè)備驅(qū)動(dòng)和硬件已經(jīng)準(zhǔn)備好動(dòng)和硬件已經(jīng)準(zhǔn)備好 , 只是代表了和設(shè)備驅(qū)動(dòng)通信的一部分只是代表了和設(shè)備驅(qū)動(dòng)通信的一部分。n 下面給一個(gè)創(chuàng)建字符設(shè)備入口點(diǎn)的實(shí)例:下面給一個(gè)創(chuàng)建字符設(shè)備入口點(diǎn)的實(shí)例:n mknod/dev/testCharc1000n 其中其中 c代表字符設(shè)備,如果想創(chuàng)建塊設(shè)備則用代表字符設(shè)備,如果想創(chuàng)建塊設(shè)備則用 b代替代替 c。參數(shù)。參數(shù)100代表該設(shè)備的主設(shè)備號(hào),代表該設(shè)備的主設(shè)備號(hào), 0代表該設(shè)備的次設(shè)備號(hào)。代表該設(shè)備的次設(shè)備號(hào)。25TM 25ARM及 Thumb指令集設(shè)備入口點(diǎn)設(shè)備入口點(diǎn)創(chuàng)建設(shè)備的入口點(diǎn)之后,可以通過(guò)如下命令查看:創(chuàng)建設(shè)備的入口點(diǎn)之后,可以通過(guò)如下命令查看:n ls–l/dev/testCharn 刪除設(shè)備入口點(diǎn)也非常簡(jiǎn)單:刪除設(shè)備入口點(diǎn)也非常簡(jiǎn)單:n rm/dev/testChar26TM 26ARM及 Thumb指令集用戶空間和內(nèi)核空間 p220n 設(shè)備驅(qū)動(dòng)設(shè)備驅(qū)動(dòng) 運(yùn)行在運(yùn)行在 內(nèi)核空間內(nèi)核空間 (在一些操作系統(tǒng)的書籍里面稱為在一些操作系統(tǒng)的書籍里面稱為 “系統(tǒng)態(tài)系統(tǒng)態(tài) ”),n 而而 應(yīng)用程序應(yīng)用程序 則運(yùn)行在則運(yùn)行在 用戶空間用戶空間 (也可稱為也可稱為 “用戶態(tài)用戶態(tài) ”)。n 設(shè)備設(shè)備 驅(qū)動(dòng)程序驅(qū)動(dòng)程序 運(yùn)行在內(nèi)核空間比應(yīng)用程序執(zhí)行的運(yùn)行在內(nèi)核空間比應(yīng)用程序執(zhí)行的 優(yōu)先級(jí)要高優(yōu)先級(jí)要高很多很多 。內(nèi)核態(tài)具有最高的運(yùn)行級(jí)別,可以做任何事。內(nèi)核態(tài)具有最高的運(yùn)行級(jí)別,可以做任何事。n 應(yīng)用程序應(yīng)用程序 則運(yùn)行在則運(yùn)行在 最低級(jí)別的用戶態(tài)最低級(jí)別的用戶態(tài) ,在這一級(jí)別處理器,在這一級(jí)別處理器 禁禁止對(duì)硬件的直接訪問(wèn)止對(duì)硬件的直接訪問(wèn) 和對(duì)內(nèi)存的未授權(quán)訪問(wèn)。和對(duì)內(nèi)存的未授權(quán)訪問(wèn)。n 內(nèi)核空間和用戶空間分別引用不同的內(nèi)存映射內(nèi)核空間和用戶空間分別引用不同的內(nèi)存映射 ,也就是程序,也就是程序代碼使用不同的代碼使用不同的 地址空間地址空間 .n Linux操作系統(tǒng)通過(guò)操作系統(tǒng)通過(guò) 系統(tǒng)調(diào)用和硬件中斷系統(tǒng)調(diào)用和硬件中斷 完成從用戶空間到完成從用戶空間到內(nèi)核空間的控制轉(zhuǎn)移。內(nèi)核空間的控制轉(zhuǎn)移。27TM 27ARM及 Thumb指令集字符設(shè)備 p218n 字符設(shè)備字符設(shè)備 :字符設(shè)備按照字符流的方式被字符設(shè)備按照字符流的方式被 有序訪問(wèn)有序訪問(wèn) ,像串口,像串口和鍵盤就都屬于字符設(shè)備。如果一個(gè)硬件設(shè)備是以字符流的和鍵盤就都屬于字符設(shè)備。如果一個(gè)硬件設(shè)備是以字符流的方式被訪問(wèn)的話,那就應(yīng)該將它歸于字符設(shè)備;方式被訪問(wèn)的話,那就應(yīng)該將它歸于字符設(shè)備;n 字符設(shè)備是字符設(shè)備是 linux最簡(jiǎn)單的設(shè)備最簡(jiǎn)單的設(shè)備 ,可以像文件一樣訪問(wèn)可以像文件一樣訪問(wèn) ,區(qū)別主區(qū)別主要在于要在于 :普通文件可以來(lái)普通文件可以來(lái) /回讀回讀 /寫寫 ,而字符設(shè)備只能是而字符設(shè)備只能是 順序讀順序讀 /寫寫 .我們可以對(duì)其調(diào)用我們可以對(duì)其調(diào)用 打開、讀取、寫和關(guān)閉打開、讀取、寫和關(guān)閉 。n 初始化字符設(shè)備時(shí),驅(qū)動(dòng)程序向初始化字符設(shè)備時(shí),驅(qū)動(dòng)程序向 linux登記登記 ,并在字符設(shè)備向,并在字符設(shè)備向量中增加一個(gè)量中增加一個(gè) device_struct數(shù)據(jù)結(jié)構(gòu)條目數(shù)據(jù)結(jié)構(gòu)條目 ,這個(gè)設(shè)備的,這個(gè)設(shè)備的 主設(shè)主設(shè)備標(biāo)識(shí)備標(biāo)識(shí) 符(符( tty的主設(shè)備號(hào)為的主設(shè)備號(hào)為 4)用作這個(gè)向量表的)用作這個(gè)向量表的 索引索引28TM 28ARM及 Thumb指令集系統(tǒng)調(diào)用n 系統(tǒng)調(diào)用系統(tǒng)調(diào)用n 字符設(shè)備是字符設(shè)備是 linux最簡(jiǎn)單的設(shè)備最簡(jiǎn)單的設(shè)備 ,可以像文件一樣訪問(wèn)可以像文件一樣訪問(wèn) .n 所以在用戶空間中所以在用戶空間中 ,系統(tǒng)進(jìn)程(應(yīng)用程序)系統(tǒng)進(jìn)程(應(yīng)用程序) 對(duì)設(shè)備文件的操作對(duì)設(shè)備文件的操作通過(guò)通過(guò) 系統(tǒng)調(diào)用來(lái)完成系統(tǒng)調(diào)用來(lái)完成 ,如,如 open、 read、 write、 close等。等。n 下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)了解一下系統(tǒng)調(diào)用的使用:下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)了解一下系統(tǒng)調(diào)用的使用:29TM 29ARM及 Thumb指令集一個(gè)簡(jiǎn)單的應(yīng)用程序n defineDEVICE_GPIOTEST“/dev/gpio”//設(shè)備入口點(diǎn)設(shè)備入口點(diǎn)n intmain(intargc,char*argv[])n {intfd。n intval=173。1。n fd=open(DEVICE_GPIOTEST,O_RDONLY)。//打開設(shè)備打開設(shè)備n if(fd0)//fd為返回的設(shè)備文件描述字為返回的設(shè)備文件描述字 handlen {n perror(cannotopendevice)。n exit(1)。n }n while(1){n printf(pleaseselectnumbertorunprogram\n)。n printf(1:ledon\n2:quit)。30TM 30ARM及 Thumb指令集一個(gè)簡(jiǎn)單的應(yīng)用程序n scanf(%d,val )。n if(val==1)n ioctl(fd,1,10)。/*主要用于對(duì)設(shè)備進(jìn)行讀寫之外的其他控制主要用于對(duì)設(shè)備進(jìn)行讀寫之外的其他控制 */n elseif(val==2){n close(fd)。/*關(guān)閉設(shè)備關(guān)閉設(shè)備 */n }n }n return0。n }31TM 31ARM及 Thumb指令集設(shè)備驅(qū)動(dòng)和文件系統(tǒng)的關(guān)系 n ● open —— 打開設(shè)備準(zhǔn)備 I/O操作。 ?open—— 打開設(shè)備準(zhǔn)備打開設(shè)備準(zhǔn)備 I/O操作。操作。?其調(diào)用格式為其調(diào)用格式為 :intopen(char*filename,intaccess)。?該函數(shù)返回該函數(shù)返回 文件描述字文件描述字 handle,如果,如果 返回值小于返回值小于 0,表示打開設(shè)備文表示打開設(shè)備文件失敗件失敗32TM 32ARM及 Thumb指令集nclose173?!猚lose() 函數(shù)函數(shù) 的作用是關(guān)閉由的作用是關(guān)閉由 open()函數(shù)打開的文件函數(shù)打開的文件 ,其其調(diào)用格式為調(diào)用格式為 :intclose(inthandle)。n該函數(shù)關(guān)閉文件描述字該函數(shù)關(guān)閉文件描述字 handle相連的文件。相連的文件。nread—— 從設(shè)備上讀數(shù)據(jù)從設(shè)備上讀數(shù)據(jù) 。對(duì)于有緩沖區(qū)的。對(duì)于有緩沖區(qū)的 I/O操作,一般是操作,一般是從緩沖區(qū)里讀數(shù)據(jù)。從緩沖區(qū)里讀數(shù)據(jù)。nwrite—— 往設(shè)備上寫數(shù)據(jù)往設(shè)備上寫數(shù)據(jù) ,對(duì)于有緩沖區(qū)的,對(duì)于有緩沖區(qū)的 I/O操作,一般是操作,一般是把數(shù)據(jù)寫入緩沖區(qū)里。把數(shù)據(jù)寫入緩沖區(qū)里。 write()函數(shù)的調(diào)用格式為:函數(shù)的調(diào)用格式為:nintwrite(inthandle,void*buf,intcount)。nwrite()函數(shù)把函數(shù)把 count個(gè)字節(jié)從個(gè)字節(jié)從 buf指向的緩沖區(qū)寫入與指向的緩沖區(qū)寫入與 handle相相連的文件中,返回值為實(shí)際寫入的字節(jié)數(shù)。連的文件中,返回值為實(shí)際寫入的字節(jié)數(shù)。 設(shè)備驅(qū)動(dòng)和文件系統(tǒng)的關(guān)系 33TM 33ARM及 Thumb指令集nioctl———— 主要用于對(duì)設(shè)備進(jìn)行讀寫之外的其他控制主要用于對(duì)設(shè)備進(jìn)行讀寫之外的其他控制 。用戶空間的。用戶空間的ioctl函數(shù)的原型為:函數(shù)的原型為: intioctl(inffd,intcmd,…)n其中的其中的 …… 代表可變數(shù)目的參數(shù)表,實(shí)際中是一個(gè)可選參數(shù),一般代表可變數(shù)目的參數(shù)表,實(shí)際中是一個(gè)可選參數(shù),一般定義為定義為 :intioctl(inffd,intcmd,char*argp)n其中其中 fd為為 文件描述字文件描述字 handlencmd為命令字為命令字 ,不同的命令字對(duì)應(yīng)不同的操作不同的命令字對(duì)應(yīng)不同的操作 .34TM 34ARM及 Thumb指令集 設(shè)備驅(qū)動(dòng)和
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1