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

正文內(nèi)容

linux字符設(shè)備驅(qū)動(dòng)程序培訓(xùn)教材-展示頁(yè)

2025-03-19 16:57本頁(yè)面
  

【正文】 命令創(chuàng)建設(shè)備文件 ?用 rm filename命令刪除設(shè)備文件。 ?每個(gè)設(shè)備文件中都存儲(chǔ)了該設(shè)備的 “ 主設(shè)備號(hào) ” 和 “ 次設(shè)備號(hào) ” 。 ?設(shè)備文件通常位于 /dev子目錄 。 ?網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng) : 應(yīng)用程序必須利用套接字 (socket)接口訪問(wèn)網(wǎng)絡(luò)設(shè)備。 ?塊設(shè)備驅(qū)動(dòng) : 塊設(shè)備和字符設(shè)備只在系統(tǒng)內(nèi)核內(nèi)部的管理上有所區(qū)別。 Linux字符設(shè)備驅(qū)動(dòng)程序 Linux驅(qū)動(dòng)程序的分類 ?字符設(shè)備驅(qū)動(dòng) : 用于驅(qū)動(dòng)能夠像字節(jié)流(文件)一樣被訪問(wèn)的設(shè)備。應(yīng)用程序通??梢岳?open、 close、 read、 write等系統(tǒng)調(diào)用訪問(wèn)字符設(shè)備驅(qū)動(dòng)。應(yīng)用程序?qū)τ谧址O(shè)備的每一個(gè) I/O操作都會(huì)被內(nèi)核直接傳遞給對(duì)應(yīng)的驅(qū)動(dòng)程序;而應(yīng)用程序?qū)τ趬K設(shè)備的操作要經(jīng)過(guò)虛擬文件系統(tǒng)( VFS)和緩沖區(qū)管理系統(tǒng)間接地傳遞給驅(qū)動(dòng)程序處理。 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序 字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu) 字符設(shè)備開發(fā)的基本步驟 確定主設(shè)備號(hào)和次設(shè)備號(hào) 實(shí)現(xiàn)字符驅(qū)動(dòng)程序 實(shí)現(xiàn) file_operations結(jié)構(gòu)體 構(gòu)造字符設(shè)備結(jié)構(gòu)體 cdev 在模塊加載函數(shù)中注冊(cè)字符設(shè)備 在模塊卸載函數(shù)中注銷字符設(shè)備 創(chuàng)建設(shè)備文件節(jié)點(diǎn) 設(shè)備文件與設(shè)備號(hào) ?為了體現(xiàn)“一切都是文件”的設(shè)計(jì)思想, linux將每個(gè)已安裝的設(shè)備都表示為一個(gè) 設(shè)備文件 。 ?對(duì)于字符設(shè)備,應(yīng)用程序可以利用 open、 close、 read、write等系統(tǒng)調(diào)用訪問(wèn)其設(shè)備文件,這些 I/O操作都被直接傳遞給該設(shè)備文件所對(duì)應(yīng)的設(shè)備。 ?一般由同一個(gè)內(nèi)核模塊管理的多個(gè)設(shè)備占用同一個(gè)主設(shè)備號(hào),具體設(shè)備用次設(shè)備號(hào)標(biāo)識(shí)。注意刪除設(shè)備文件并不會(huì)影響驅(qū)動(dòng)模塊。 // 阻塞 fd2 = open(“/dev/ttyS1”, O_RDWR | O_NONBLOCK)。 int write(int fd, const void *buf, size_t length)。 int ioctl( int fd, int cmd, void *arg)。 設(shè)備號(hào)的內(nèi)部表達(dá) 設(shè)備編號(hào)的內(nèi)部表達(dá) dev_t類型 (32位): 用來(lái)保存設(shè)備編號(hào) (包括主設(shè)備號(hào) (12位 )和次設(shè)備號(hào) (20位 )) 從 dev_t獲得主設(shè)備號(hào)和次設(shè)備號(hào): MAJOR(dev_t)。 將主設(shè)備號(hào)和次設(shè)備號(hào)轉(zhuǎn)換成 dev_t類型: MKDEV(int major, int minor); 主設(shè)備號(hào)與次設(shè)備號(hào) 分配主設(shè)備號(hào) 手工分配主設(shè)備號(hào):找一個(gè)內(nèi)核沒有使用的主設(shè)備號(hào)來(lái)使用。 通常在模塊的清除函數(shù)中調(diào)用。 /* 內(nèi)嵌的 kobject 對(duì)象 */ struct module *owner。 /*文件操作結(jié)構(gòu)體 */ struct list_head list。 /*設(shè)備號(hào) */ unsigned int count。 cdev的 kobj、 list 、 count字段不用我們關(guān)系和維護(hù)(內(nèi)核代勞),我們只需將其 ops字段指向?yàn)槲覀冏约旱?file operations結(jié)構(gòu)。 struct cdev *cdev_alloc(void) 。 void cdev_del(struct cdev *)。 struct file_operations { struct module *owner。 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *)。 unsigned int (*poll) (struct file *, struct poll_table_struct *)。 int (*open) (struct inode *, struct file *)。 int (*release) (struct inode *, struct file *)。 file_operations 結(jié)構(gòu)體 file_operations的主要成員: struct module *owner: 指向模塊自身 open: 打開設(shè)備 release: 關(guān)閉設(shè)備 read: 從設(shè)備上讀數(shù)據(jù) write: 向設(shè)備上寫數(shù)據(jù) ioctl: I/O控制函數(shù) llseek: 定位讀寫指針 mmap: 映射設(shè)備空間到進(jìn)程的地址空間 file operations的初始化 struct file_operations my_fops = { .owner = THIS_MODULE, .llseek = my_llseek, .read = my_read, .write = my_write, .ioctl = my_ioctl, .open = my_open, .release = my_release, }。 ?在應(yīng)用程序調(diào)用 close函數(shù),內(nèi)核會(huì)釋放該數(shù)據(jù)結(jié)構(gòu)。 unsigned int f_flags。 loff_t f_pos。 }。 描述一個(gè)正在打開的設(shè)備文件。驅(qū)動(dòng)程序可以將這個(gè)字段用于任何目的或 者忽略這個(gè)字段。 ?其字段中我們只關(guān)心 i_rdev(設(shè)備號(hào) ),和 i_cdev(和該文件所對(duì)應(yīng)的 cdev結(jié)構(gòu)) ?我們?cè)趧?chuàng)建設(shè)備文件時(shí),內(nèi)核會(huì)自動(dòng)創(chuàng)建一個(gè)對(duì)應(yīng)的 inode結(jié)構(gòu)體,并將其 i_cdev字段指向?qū)?yīng)的字符設(shè)備結(jié)構(gòu)體 cdev(
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1