设备类型分类
《深入淺出XScale嵌入式系統(tǒng)》讀書筆記
1、字符設(shè)備是Linux最簡單的設(shè)備,可以像文件一樣訪問。初始化字符設(shè)備時(shí),它的設(shè)備驅(qū)動(dòng)程序向Linux登記,并在字符設(shè)備向量表中增加一個(gè)device_struct數(shù)據(jù)結(jié)構(gòu)條目,這個(gè)設(shè)備的主設(shè)備號(hào)用來做這個(gè)向量表的索引。向量表中的每一個(gè)條目,一個(gè)device_struct數(shù)據(jù)結(jié)構(gòu)包括兩個(gè)元素:登記設(shè)備驅(qū)動(dòng)程序名稱的指針和指向一組文件的操作的指針。
設(shè)備注冊機(jī)構(gòu),內(nèi)核提供一個(gè)字符設(shè)備注冊表,用于登記字符設(shè)備的相關(guān)信息。該數(shù)據(jù)結(jié)構(gòu)在文件fs/device.C中定義,定義形式如下:
struct decice_struct{
? const char *name ?設(shè)備名稱
? struct file_operation * fops ?設(shè)備相關(guān)文件操作
}
字符設(shè)備登記表,負(fù)責(zé)登記各種字符設(shè)備的名字和對應(yīng)的操作
static struct device_struct chrdevs[MAX_CHRDEV]={{NULL,NULL},}
2、快設(shè)備
塊設(shè)備是文件系統(tǒng)的基礎(chǔ),它也可以像文件一樣被訪問。Linux用blkdevs向量表維護(hù)已經(jīng)登記的塊設(shè)備文件。它像chrdevs向量表一樣,使用設(shè)備的主設(shè)備號(hào)作為索引。它的條目也是數(shù)據(jù)結(jié)構(gòu)。與字符設(shè)備不同的是,塊設(shè)備分為SCSI和IDE類;向Linux內(nèi)核登記并向核心提供文件操作。
3、塊設(shè)備與字符設(shè)備的主要區(qū)別:
對字符設(shè)備發(fā)出讀、寫請求時(shí),實(shí)際的硬件I/O一般緊接著就發(fā)生了。塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),當(dāng)用戶進(jìn)程對設(shè)備的請求能滿足用戶的要求時(shí),就返回請求的數(shù)據(jù),如果不能,就調(diào)用請求函數(shù)來進(jìn)行實(shí)際的I/O操作。
4、Linux將設(shè)備看成文件,系統(tǒng)支持的所有設(shè)備都必須以特殊文件的形式出現(xiàn)在文件系統(tǒng)中。說是“特殊文件”,是因?yàn)檫@些文件只有文件名而沒有正文。這是因?yàn)?#xff0c;這種“文件”所要運(yùn)載和提供的信息只有三項(xiàng),即目標(biāo)設(shè)備所屬的類(塊設(shè)備和字符設(shè)備)及其主設(shè)備號(hào)和次設(shè)備號(hào),而這些信息完全可以放在文件的“目錄項(xiàng)”中。
打開文件的過程就可以大致描述如下:
1、根據(jù)約定的設(shè)備文件名,在文件系統(tǒng)中找到目錄文件的目錄項(xiàng),從中取得目標(biāo)設(shè)備的主/次設(shè)備號(hào)。
2、在本進(jìn)程的file結(jié)構(gòu)數(shù)組中分配一個(gè)空閑的file結(jié)構(gòu)數(shù)組,其下標(biāo)即為“打開文件號(hào)”。如前所述,打開文件號(hào)只對本進(jìn)程有意義。
3、根據(jù)目標(biāo)設(shè)備的類別和主設(shè)備號(hào)找到相應(yīng)的file_operations結(jié)構(gòu),并將其地址記錄在file結(jié)構(gòu)中。同時(shí),把與目錄項(xiàng)有關(guān)的數(shù)據(jù)結(jié)構(gòu)的地址也記錄在file結(jié)構(gòu)中,以便獲得其次設(shè)備號(hào)。
總結(jié)
- 上一篇: Linux中 安装一些实用小软件总结
- 下一篇: 容器安全加固