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

正文內(nèi)容

linux字符設(shè)備驅(qū)動程序培訓教材-wenkub

2023-04-01 16:57:46 本頁面
 

【正文】 用。 設(shè)備號的內(nèi)部表達 設(shè)備編號的內(nèi)部表達 dev_t類型 (32位): 用來保存設(shè)備編號 (包括主設(shè)備號 (12位 )和次設(shè)備號 (20位 )) 從 dev_t獲得主設(shè)備號和次設(shè)備號: MAJOR(dev_t)。 int write(int fd, const void *buf, size_t length)。注意刪除設(shè)備文件并不會影響驅(qū)動模塊。 ?對于字符設(shè)備,應(yīng)用程序可以利用 open、 close、 read、write等系統(tǒng)調(diào)用訪問其設(shè)備文件,這些 I/O操作都被直接傳遞給該設(shè)備文件所對應(yīng)的設(shè)備。應(yīng)用程序?qū)τ谧址O(shè)備的每一個 I/O操作都會被內(nèi)核直接傳遞給對應(yīng)的驅(qū)動程序;而應(yīng)用程序?qū)τ趬K設(shè)備的操作要經(jīng)過虛擬文件系統(tǒng)( VFS)和緩沖區(qū)管理系統(tǒng)間接地傳遞給驅(qū)動程序處理。 Linux字符設(shè)備驅(qū)動程序 Linux驅(qū)動程序的分類 ?字符設(shè)備驅(qū)動 : 用于驅(qū)動能夠像字節(jié)流(文件)一樣被訪問的設(shè)備。 ?網(wǎng)絡(luò)設(shè)備驅(qū)動 : 應(yīng)用程序必須利用套接字 (socket)接口訪問網(wǎng)絡(luò)設(shè)備。 ?每個設(shè)備文件中都存儲了該設(shè)備的 “ 主設(shè)備號 ” 和 “ 次設(shè)備號 ” 。 應(yīng)用程序如何訪問設(shè)備 fd1 = open(“/dev/ttyS1”, O_RDWR)。 int lseek(int fd, offset_t offset, int whence)。 MINOR(dev_t)。 記錄字符設(shè)備的結(jié)構(gòu)體 cdev 實現(xiàn)字符驅(qū)動程序 cdev 結(jié)構(gòu)體 struct cdev { struct kobject kobj。 dev_t dev。 對 cdev結(jié)構(gòu)體的操作 操作 cdev的函數(shù) void cdev_init( struct cdev *, struc t file_operations *)。 用于初始化 cdev的成員,并建立 cdev和file_operations之間的連接 分別向系統(tǒng)刪除一個 cdev,完成字符設(shè)備的注銷,通常在模塊的卸載函數(shù)中調(diào)用 分別向系統(tǒng)添加一個 cdev,完成字符設(shè)備的注冊 ,通常在模塊加載函數(shù)中調(diào)用 函數(shù)用于動態(tài)申請一個 cdev 內(nèi)存 file_operations 結(jié)構(gòu)體 file_operations 結(jié)構(gòu)體 字符驅(qū)動和內(nèi)核的接口: 在 include/linux/ 字符驅(qū)動只要實現(xiàn)一個 file_operations結(jié)構(gòu)體并注冊到內(nèi)核中,內(nèi)核就有了操作此設(shè)備的能力。 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *)。 int (*flush) (struct file *, fl_owner_t id)。 file結(jié)構(gòu)體 ?file結(jié)構(gòu)代表一個打開的文件,它由內(nèi)核在應(yīng)用程序open時創(chuàng)建,并將該文件所對應(yīng)的 file operations記錄在 file結(jié)構(gòu)中。 fmode_t f_mode。 file結(jié)構(gòu)體 file 結(jié)構(gòu)體 file結(jié)構(gòu): file_operations結(jié)構(gòu)相關(guān)的一個結(jié)構(gòu)體。 inode結(jié)構(gòu)體 ?內(nèi)核用 inode結(jié)構(gòu)在內(nèi)部表示文件,用于存儲文件訪問權(quán)限、屬主、組、大小、生產(chǎn)時間等 VFS關(guān)心的信息。 struct cdev *i_cdev。 當 inode指向一個字符設(shè)備文件時,該字段包含了指向 struct cdev結(jié)構(gòu)的指針 從一個 inode中獲得主設(shè)備號和次設(shè)備號: unsigned int iminor(struct inode *inode); unsigned int imajor(struct inode *inode); 字符設(shè)備驅(qū)動程序基本結(jié)構(gòu) 注冊設(shè)備 ,在模塊或驅(qū)動初始化時調(diào)用 及之前 int register_chrdev(unsigned int major, const char *name, struct file_operations *fops) 如何操作字符設(shè)備的接口 void cdev_init( struct cdev *, struc t file_operations *)。 字符設(shè)備驅(qū)動程序基本結(jié)構(gòu) / /設(shè)備驅(qū)動模塊加載函數(shù) static int __init xxx_init(void) { ... cdev_init(, xxx_fops)。 } ret = cdev_add(, xxx_dev_no, 1 ) 。 字符設(shè)備驅(qū)動程序基本結(jié)構(gòu) 關(guān)閉 模塊使用計數(shù)減 1 釋放由 open分配的,保存在 filpprivate_data里的所有內(nèi)容。 字符設(shè)備驅(qū)動程序基本結(jié)構(gòu) read/write ssize_t read(struct file *filp, char __user *buff, size_t count, loff_t *offp)。 用戶空間的地址無法在內(nèi)核空間中使用。 ... } ? 寫設(shè)備模板 ssize_t xxx_write(struct file *fil p, const char __user *buf , size_t count ,loff_t *f_pos) { ... copy_
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1