嵌入式教程國嵌設(shè)備驅(qū)動_第1頁
嵌入式教程國嵌設(shè)備驅(qū)動_第2頁
嵌入式教程國嵌設(shè)備驅(qū)動_第3頁
嵌入式教程國嵌設(shè)備驅(qū)動_第4頁
嵌入式教程國嵌設(shè)備驅(qū)動_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

:本課件及其印刷物、的歸國嵌 ,不得使用該課件及其印刷物、從事商業(yè)、教學(xué)活 的,應(yīng)在范圍內(nèi)使用,并注明“來源:國嵌”。上述者 。 缺點(diǎn)缺點(diǎn)應(yīng)用程序應(yīng)用程序應(yīng)用程序應(yīng)用程序應(yīng)用程序應(yīng)用程序應(yīng)用程序 字符設(shè)備驅(qū)動(重點(diǎn)網(wǎng)絡(luò)接口驅(qū)動(重點(diǎn) 這樣的驅(qū)動通常實(shí)現(xiàn)open,close,read和write系統(tǒng)調(diào)用。 Unix系統(tǒng)塊設(shè)備不能按字節(jié)處理數(shù)據(jù),只能一次傳送一個或多個長度是512字節(jié)或一個更大的2次冪的數(shù))的整塊數(shù)據(jù)。 任何網(wǎng)絡(luò)事務(wù)都通過?個接口來進(jìn)行?個接口通常是?個硬件設(shè)備(eth0),但是它也可以是?個純粹的軟件設(shè)備,比如回環(huán)接口 Kconfig例: Q設(shè)備(字符、塊)文件在何 主次設(shè)備lsl的輸出的第?列的“c”標(biāo)識lsl命令會看到在設(shè)備文件項(xiàng)中有2個數(shù)(由?個逗號分隔)這些數(shù)字 **主設(shè)備號用來反映設(shè)備類型****次設(shè)備號用來區(qū)分同類型的設(shè)備** Q內(nèi)核中如何描述設(shè)備號?A:dev_t**其實(shí)質(zhì)為unsignedint32位整數(shù),其中高12位為主Q如何從dev_t中分解出主設(shè)備號?A:MAJOR(dev_tdev)A:MINOR(dev_t intregister_chrdev_region(dev_tfrom,unsignedcount,constchar*name)fromcount個設(shè)備號(主設(shè)備號

動態(tài)分 intalloc_chrdev_region(dev_t*dev,unsignedbaseminor,unsignedcount,constchar*name)count unsignedcount)

type:設(shè)備文件類型major:主設(shè)備號minor:次設(shè)備號mknodserial0c100 后面課程介紹 StructfileStructinode Struct在內(nèi)核空間都有一個關(guān)聯(lián)的structfile。它由內(nèi)核在打開文件時創(chuàng)建,在文件關(guān)閉后釋放。loff_tf_pos/*文件讀寫位置 Struct用來記錄文件的物理上的信息。因此,它和代以對應(yīng)多個file結(jié)構(gòu)但只有一個inode結(jié)構(gòu)。dev_ti_rdev Struct操作,對于不支持的操作保留為 .owner=.llseek=.read=.write=.ioctl=.open=.release= (Read_write.c cdev來描述。 設(shè) 設(shè) voidcdev_init(structcdev*cdev,conststructfile_operations*fops)參數(shù) 設(shè) structcdev intcdev_add(structcdev*p,dev_tdev,unsigned參數(shù)p待添加到內(nèi)核的字符設(shè)備dev:設(shè)備count添加的設(shè)備個 int(*open)(structinode*,structfile的打開操作成功。void(*release)(structinode*,structfile ssize_t(*read)(structfile*,char user*,size_t,loff_t ssize_t(*write)(structfile*,constchar user*,size_t,loff_tunsignedint(*poll)(structfile*,structpoll_table_structint(*ioctl)(structinode*,structfile*,unsignedint,unsigned int(*mmap)(structfile*,structvm_area_structoff_t(*llseek)(structfile*,loff_t, 反。這個設(shè)備方法有時也稱為 ssize_txxx_read(structfile*filp,char user*buff,size_tcount,loff_t*ssize_txxx_write(structfile*filp,char user*buff,size_tcount,對于2個方法,filp是文件指針,count是請求傳輸?shù)臄?shù)據(jù)量。buff參數(shù)指向數(shù)據(jù)緩存。最后,offp Read和Write方法的buff參數(shù)是用戶空間指針。因此它不能被內(nèi)核代碼直接,理 user*from,intintcopy_to_user(void user*to,constvoid*from,int 對于驅(qū)動程序設(shè)計來說,問題之一就 合理使用在驅(qū)動開發(fā)時,printk非常有助于調(diào)試。但當(dāng)正 驅(qū)動程序時,應(yīng)當(dāng)去掉這些打印語句。但 #ifdef#definePLOG(fmt,args...)printk(KERN_DEBUG#definePLOG(fmt,args...) /*donothing*/ DEBUG=yifeqDEBFLAGS=-O2-g-DEBFLAGS=-CFLAGS 并發(fā):多個執(zhí)行單元同時被執(zhí)行(硬件資源和軟件上的全局變量等 ret=-goto 信號量保護(hù)的共享資源。 structsemaphorevoidsema_init(structsemaphore*sem,int voidinit_MUTEX(structsemaphorevoidinit_MUTEX_LOCKED(structsemaphore voiddown(structsemaphore* intdown_interrupt

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論