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

正文內(nèi)容

linux字符設備驅(qū)動程序培訓教材(已修改)

2025-03-21 16:57 本頁面
 

【正文】 Linux字符設備驅(qū)動程序 Linux驅(qū)動程序的分類 ?字符設備驅(qū)動 : 用于驅(qū)動能夠像字節(jié)流(文件)一樣被訪問的設備。應用程序通??梢岳?open、 close、 read、 write等系統(tǒng)調(diào)用訪問字符設備驅(qū)動。 ?塊設備驅(qū)動 : 塊設備和字符設備只在系統(tǒng)內(nèi)核內(nèi)部的管理上有所區(qū)別。應用程序?qū)τ谧址O備的每一個 I/O操作都會被內(nèi)核直接傳遞給對應的驅(qū)動程序;而應用程序?qū)τ趬K設備的操作要經(jīng)過虛擬文件系統(tǒng)( VFS)和緩沖區(qū)管理系統(tǒng)間接地傳遞給驅(qū)動程序處理。 ?網(wǎng)絡設備驅(qū)動 : 應用程序必須利用套接字 (socket)接口訪問網(wǎng)絡設備。 網(wǎng)絡設備驅(qū)動程序 字符設備驅(qū)動程序基本結(jié)構(gòu) 字符設備開發(fā)的基本步驟 確定主設備號和次設備號 實現(xiàn)字符驅(qū)動程序 實現(xiàn) file_operations結(jié)構(gòu)體 構(gòu)造字符設備結(jié)構(gòu)體 cdev 在模塊加載函數(shù)中注冊字符設備 在模塊卸載函數(shù)中注銷字符設備 創(chuàng)建設備文件節(jié)點 設備文件與設備號 ?為了體現(xiàn)“一切都是文件”的設計思想, linux將每個已安裝的設備都表示為一個 設備文件 。 ?設備文件通常位于 /dev子目錄 。 ?對于字符設備,應用程序可以利用 open、 close、 read、write等系統(tǒng)調(diào)用訪問其設備文件,這些 I/O操作都被直接傳遞給該設備文件所對應的設備。 ?每個設備文件中都存儲了該設備的 “ 主設備號 ” 和 “ 次設備號 ” 。 ?一般由同一個內(nèi)核模塊管理的多個設備占用同一個主設備號,具體設備用次設備號標識。 ?用 mknod filename c major minor命令創(chuàng)建設備文件 ?用 rm filename命令刪除設備文件。注意刪除設備文件并不會影響驅(qū)動模塊。 應用程序如何訪問設備 fd1 = open(“/dev/ttyS1”, O_RDWR)。 // 阻塞 fd2 = open(“/dev/ttyS1”, O_RDWR | O_NONBLOCK)。 // 非阻塞 int read(int fd, const void *buf, size_t length)。 int write(int fd, const void *buf, size_t length)。 int lseek(int fd, offset_t offset, int whence)。 int ioctl( int fd, int cmd, void *arg)。 int close(int fd)。 設備號的內(nèi)部表達 設備編號的內(nèi)部表達 dev_t類型 (32位): 用來保存設備編號 (包括主設備號 (12位 )和次設備號 (20位 )) 從 dev_t獲得主設備號和次設備號: MAJOR(dev_t)。 MINOR(dev_t)。 將主設備號和次設備號轉(zhuǎn)換成 dev_t類型: MKDEV(int major, int minor); 主設備號與次設備號 分配主設備號 手工分配主設備號:找一個內(nèi)核沒有使用的主設備號來使用。 include linux/ int register_chrdev_region( dev_t first, unsigned int count, char *name ); 要分配的設備編號范圍的起始值,次設備號經(jīng)常為 0 所請求的連續(xù)設備編號的個數(shù) 和該編號范圍關(guān)聯(lián)的設備名稱 主設備號與次設備號 動態(tài)分配主設備號: include linux/ int alloc_chrdev_resion(dev_t *dev, unsigned int firstminor, unsigned int count, char *name); 輸出的設備號 要使用的被請求的第一個次設備號 主設備號與次設備號 釋放設備號 void unregister_chrdev_region(dev_t first, unsigned int count)。 通常在模塊的清除函數(shù)中調(diào)用。 記錄字符設備的結(jié)構(gòu)體 cdev 實現(xiàn)字符驅(qū)動程序 cdev 結(jié)構(gòu)體 struct cdev { struct kobject kobj。 /* 內(nèi)嵌的 kobject 對象 */ struct module *owner。 /*所屬模塊 */ struct file_operations *ops。 /*文件操作結(jié)構(gòu)體 */ struct list_head list。 dev_t dev。 /*設備號 */ unsigned int count。 }。 cdev的 kobj、 list 、 count字段不用我們關(guān)系和維護(內(nèi)核代勞),我們只需將其 ops字段指向為我們自己的 file operations結(jié)構(gòu)。 對 cdev結(jié)構(gòu)體的操作 操作 cdev的函數(shù) void cdev_init( struct cdev *, struc t file_operations *)。 struct cdev *cdev_alloc(void) 。 int cdev_add(st ruct cdev *, dev_t, unsigned) 。 void cde
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1