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

正文內(nèi)容

嵌入式操作系統(tǒng)驅(qū)動(dòng)程序編寫基礎(chǔ)-資料下載頁(yè)

2025-04-29 13:00本頁(yè)面
  

【正文】 : 次設(shè)備號(hào) ) 同一設(shè)備 驅(qū)動(dòng)程序 不同設(shè)備 ? mknod()系統(tǒng)調(diào)用用來(lái) 創(chuàng)建 老式的 設(shè)備文件 設(shè)備文件名。 在 /dev目錄 下產(chǎn)生一個(gè) 文件名 操作權(quán)限和設(shè)備類型。 其中設(shè)備類型指定: S_IFCHR或 S_IFBLK。 inod 設(shè)備號(hào) 16位, 主設(shè)備號(hào) :次設(shè)備號(hào) 可以指定設(shè)備號(hào) 注冊(cè)設(shè)備驅(qū)動(dòng)程序 ? 注冊(cè)一個(gè)設(shè)備驅(qū)動(dòng)程序意味著 把它與對(duì)應(yīng)的設(shè)備文件連接 起來(lái) ? 使得對(duì)設(shè)備文件發(fā)出的系統(tǒng)調(diào)用可以由內(nèi)核轉(zhuǎn)化為相應(yīng)的設(shè)備驅(qū)動(dòng)程序?qū)?yīng)的函數(shù) ? 按照設(shè)備驅(qū)動(dòng)程序模型,分配一個(gè)新的device_driver描述符,對(duì)應(yīng)到設(shè)備文件上 ? 訪問(wèn)一個(gè)沒有注冊(cè)設(shè)備驅(qū)動(dòng)程序的設(shè)備文件將會(huì)返回錯(cuò)誤碼 ENODEV ? 注冊(cè)時(shí)機(jī) ? 如果設(shè)備驅(qū)動(dòng)程序被 靜態(tài)編譯 進(jìn)內(nèi)核,則注冊(cè)發(fā)生在 內(nèi)核初始化 階段 ? 如果作為一個(gè)內(nèi)核 模塊來(lái)編譯 ,則在 裝入模塊的時(shí)候 注冊(cè)(并在卸載模塊時(shí)注銷) 字符設(shè)備驅(qū)動(dòng)程序的注冊(cè) ? 內(nèi)核中每個(gè)字符設(shè)備都對(duì)應(yīng)一個(gè) cdev 結(jié)構(gòu)的變量: struct cdev { struct kobject kobj。 // 每個(gè) cdev 都是一個(gè) kobject struct module *owner。 // 指向?qū)崿F(xiàn)驅(qū)動(dòng)的模塊 const struct file_operations *ops。 // 操縱這個(gè)字符設(shè)備文件的方法 struct list_head list。 // 與 cdev 對(duì)應(yīng)的字符設(shè)備文件的 inodei_devices 的鏈表頭 dev_t dev。 // 起始設(shè)備編號(hào) unsigned int count。 // 設(shè)備范圍號(hào)大小 }。 ? 字符設(shè)備初始化 ? 字符設(shè)備的注冊(cè)函數(shù) ? 字符設(shè)備的撤銷函數(shù) ? 字符設(shè)備的注冊(cè) 字符設(shè)備驅(qū)動(dòng)程序注冊(cè) ? 在 Linux內(nèi)核中存在一個(gè)數(shù)組 chrdev[]來(lái)保存所有字符設(shè)備驅(qū)動(dòng)程序信息,該數(shù)組定義在 fs/。 字符設(shè)備有關(guān)的數(shù)據(jù)結(jié)構(gòu) ? 大部分的基礎(chǔ)性的驅(qū)動(dòng)操作包括 3 個(gè)重要的內(nèi)核數(shù)據(jù)結(jié)構(gòu) , 稱為 file_operations, file, 和 inode. ? file_operations文件操作 ? File打開的文件 ? inode由內(nèi)核在內(nèi)部用來(lái)表示文件 file_operations文件操作 ( include/linux/) File數(shù)據(jù)結(jié)構(gòu) ? dev_t i_rdev。 ? 對(duì)于代表設(shè)備文件的節(jié)點(diǎn) , 這個(gè)成員包含實(shí)際的 設(shè)備編號(hào) . ? struct cdev *i_cdev。 ? struct cdev 是內(nèi)核的內(nèi)部結(jié)構(gòu) , 代表字符設(shè)備 。 這個(gè)成員包含一個(gè)指針 , 指向這個(gè)結(jié)構(gòu) , 當(dāng)節(jié)點(diǎn)指的是一個(gè)字符設(shè)備文件時(shí) . 字符驅(qū)動(dòng)程序的結(jié)構(gòu) ? 在 linux系統(tǒng)中,設(shè)備的操作演變成對(duì)文件的操作,因此設(shè)備驅(qū)動(dòng)程序最重要的工作就是編寫 fops指針對(duì)應(yīng)的文件操作函數(shù)。每個(gè)打開的設(shè)備文件均與一組函數(shù)關(guān)聯(lián)。 ? 字符驅(qū)動(dòng)程序一般提供以下幾個(gè)入口: ? 以及相應(yīng)的 file_operations類型的文件操作接口定義 ? 給驅(qū)動(dòng)模塊添加相關(guān)文件操作 ? 驅(qū)動(dòng)程序的文件操作主要包括打開、關(guān)閉、讀、寫以及 release等 ? 上述 hello事例添加后程序代碼如下: ? 示例說(shuō)明: ? 增加了一個(gè)新的內(nèi)核頭文件,用于獲取文件系統(tǒng)操作的定義 ? 在 hello_init()函數(shù)中增加了一個(gè)新的函數(shù)調(diào)用 register_chrdev的函數(shù)調(diào)用,該函數(shù)調(diào)用把設(shè)備驅(qū)動(dòng)程序注冊(cè)到內(nèi)核;它將類型為 struct file_opretions結(jié)構(gòu),將設(shè)備函數(shù)與來(lái)自文件系統(tǒng)的請(qǐng)求綁定在一起 ? 當(dāng)用戶應(yīng)用程序打開某個(gè)設(shè)備驅(qū)動(dòng)程序表示的設(shè)備時(shí),并進(jìn)行讀取數(shù)據(jù)操作(使用 read()函數(shù)),文件系統(tǒng)就會(huì)把 read()函數(shù)和模塊的 hello_read()對(duì)應(yīng)起來(lái) ? 建立相應(yīng)設(shè)備文件 ? 設(shè)備文件是應(yīng)用程序和驅(qū)動(dòng)程序(模塊)綁定的橋梁 ? 命令舉例 ? 建立了一個(gè)名稱是 hello1的設(shè)備文件,由于是以字符變量為基礎(chǔ)的設(shè)備驅(qū)動(dòng)程序,因此用 C表示設(shè)備節(jié)點(diǎn)的類型,主版本號(hào)是 234,輔助版本號(hào)是 0(操作系統(tǒng)一般不用) ? 通過(guò)設(shè)備文件操作設(shè)備驅(qū)動(dòng)模塊 ? 運(yùn)用設(shè)備驅(qū)動(dòng)程序 ? 運(yùn)行結(jié)果 塊設(shè)備編程基礎(chǔ) ? 塊設(shè)備的注冊(cè) 主設(shè)備名 設(shè)備名 ? 被激活后的磁盤就可以進(jìn)行相關(guān)操作了 塊設(shè)備的程序結(jié)構(gòu) 驅(qū)動(dòng)程序的使用
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1