第5階段驅動程序設計1天設備_第1頁
第5階段驅動程序設計1天設備_第2頁
第5階段驅動程序設計1天設備_第3頁
第5階段驅動程序設計1天設備_第4頁
第5階段驅動程序設計1天設備_第5頁
已閱讀5頁,還剩75頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

驅驅動程序介字符字符驅動調試技并發控 驅驅動程序介字符字符驅動調試技并發控 知識結構學習方法 驅動程序 缺點缺點應用程序應用程序應用程序應用程序設備驅應用程序設備驅應用程序應用程序應用程序缺點 缺點字符設備驅動(重點網絡接口驅動(重點 這樣的驅動通常實現open,close,read和write系統調用。 Unix系統塊設備不能按字節處理數據,只能一次傳送一個或多個長度是512字節或一個更大的2次冪的數)的整塊數據。 任何網絡事務都通過一個接口來進行,一個接口通常是一個硬件設備(eth0),但是它也可以是一個純粹的軟件設備,比如回環接口(lo)。一個網絡接口負責發送和接收報文 KconfigMakefile例: 使用驅動程網絡設備驅塊設備驅協議驅塊設備文套接字符設備文 Q:設備(字符、塊)文件在何 驅驅動程序介字符字符驅動調試技并發控 備文件由使lsl的輸出的第一列的“c”標識。如果使lsl命令會看到在設備文件項中有2個數(由一個逗號分隔)這些數字 字符設字符設備文字符設備驅 字符設字符設備文字符設備驅 **主設備號用來反映設備類型****次設備號用來區分同類型的設備** Q內核中如何描述設備號?A:dev_t**其實質為unsignedint32位整數,其中高12位為主Q如何從dev_t中分解出主設備號?A:MAJOR(dev_tdev)Q:如何從dev_t中分解出次設備 Linux內核如何給設備分配主設備號可以采用靜態申請,動態分配兩種 2、使用register_chrdev_region函 設備 intregister_chrdev_region(dev_tfrom,unsignedcount,constchar*name)申請使用from開始count個設備號(主設備號參數from:希望申請使用的設備號 方

動態分使用alloc_chrdev_region分配設備優點簡單,易于驅動推缺點解決辦 intalloc_chrdev_region(dev_t*dev,unsignedbaseminor,unsignedcount,constchar*name)count voidunregister_chrdev_region(dev_tfrom,unsignedcount)功能釋放從from開始的count個設備 使用mknod命令手工自動 mknod用法

mknodfilenametypemajortype:設備文件類型major:主設備號minor:次設備號mknodserial0c100 后面課程介紹 StructfileStructinodeStruct Struct在內核空間都有一個關聯的structfile。它由內核在打開文件時創建,在文件關閉后釋放。loff_tf_pos/*文件讀寫位置structfile_operations Struct用來記錄文件的物理上的信息。因此,它和代以對應多個file結構但只有一個inode結構。重要成dev_ti_rdev:設備 Struct操作,對于不支持的操作保留為NULL structfile_operationsmem_fops=.owner=.llseek=.read=.write=.ioctl=.open=.release= (Read_write.c cdev來描述。 可分為如下3個步驟分配初始化添加 設 Structcdev的分配可使用cdev_alloc函來完成structcdev 設 voidcdev_init(structcdev*cdev,conststructfile_operations*fops)參數 設 structcdev intcdev_add(structcdev*p,dev_tdev,unsigned參數p待添加到內核的字符設備dev:設備count:添加的設備個 完成了驅動程序實現設備所支持的操 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_struct將設備映射到進程虛擬地址off_t(*llseek)(structfile*,loff_t, 初始化標明次設備號 Release方法的作用正好與open反。這個設備方法有時也稱為 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是請求傳輸的數據量。buff參數指向數據緩存。最后,offp Read和Write方法的buff參數是用戶空間指針。因此它不能被內核代碼直接,理 intcopy_from_user(void*to,constvoid user*from,intintcopy_to_user(void user*to,constvoid*from,int 字符設備的注銷使用cdev_del函數來完成intcdev_del(structcdev參數p: 1、編寫驅動,實現讀、寫、定 (在mini2440平臺實現 驅驅動程序介字符字符驅動調試技并發控 對于驅動程序設計來說,問題之一就打印調調試器查詢調 合理使用在驅動開發時,printk非常有助于調試。但當正 驅動程序時,應當去掉這些打印語句。但 #ifdef#definePLOG(fmt,args...)printk(KERN_DEBUG#definePLOG(fmt,args...) /*donothing*/ DEBUG=yifeqDEBFLAGS=-O2-g-DEBFLAGS=-CFLAGS 驅驅動程序介字符字符驅動調試技并發控 并發:多個執行單元同時被執行(硬件資源和軟件上的全局變量等 例ret=-goto假設有2個進程試圖同時向一個設備的相 有幾個任務同時該信號量保護的共享資源,有一個任務可以信號量保護的共享資源。 structsemaphorevoidsema_init(structsemaphore*sem,int voidinit_MUTEX(structsemaphorevoidinit_MUTEX_LOCKED(structsemaphore voiddown(structsemaphore* intd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論