字元裝置,核心內部使用struct cdev結構來表示,定義在中,其中還包含與其相關的一些輔助函式。
字元(char)裝置是個能夠像位元組流(類似檔案)一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置驅動程式通常至少要實現open,close,read和write系統呼叫。字元終端(/dev/console)和串列埠(/dev/ttys0以及類似裝置)就是兩個字元裝置,他們能夠很好地說明「流」這個抽象概念。字元裝置可以通過檔案系統節點來訪問,比如/dev/tty1和/dev/lp0等。這些裝置檔案和普通檔案之間的唯一差別在於對普通檔案的訪問可以前後移動訪問位置,而大多數字元裝置是乙個只能順序訪問的資料通道。然而,也存在具有資料區特性的字元裝置,訪問它們時可前後移動訪問位置。例如,幀抓取器就是這樣乙個裝置,應用程式可以用mmap或lseek訪問抓取的整個影象。
下面簡要看下cdev結構相關的一些操作。
voidcdev_init(struct cdev *cdev, struct file_operations *fops);
初始化cdev結構體,同時繫結file_operations結構。file_operations中包含了cdev的操作函式。
intcdev_add(struct cdev *dev, dev_t num, unsigned int count);
將cdev新增到系統中。此方法可能失敗,失敗時返回值為負的錯誤碼。如果新增成功,則裝置就可以被系統呼叫,所以務必在此方法之前完成裝置的初始化操作。
dev_t num代表裝置對應的第乙個裝置編號。
unsigned int count代表應該和該裝置關聯的裝置編號的數量。這個值通常是1。
voidcdev_del(struct cdev *dev);
將裝置從系統中移除。
裝置驅動例項 字元裝置驅動
在整個linux裝置驅動學習中,字元裝置驅動較為基礎。通過對它的學習,對裝置驅動進一步加深了解 cdev 結構體struct cdev 講下比較重要的成員變數 dev t dev 定義了32位的裝置號,其中12位是主裝置號,20位是從裝置號。獲取主裝置號 major dev t dev 獲取從裝置號...
字元裝置驅動
字元裝置驅動 概述 塊裝置 字元裝置以及網路裝置中塊裝置和網路裝置一般都會硬體配置完備,對於程式設計師而言,能夠更多操作的就是字元裝置。設定字元裝置的一般步驟 1.初始化硬體 2.定義fops file operations 3.申請cdev,掛載fops 3.加入cdev 函式cdev add 主...
字元裝置驅動
標頭檔案包含 include 變數定義 define gpgconaddr 0x56000060 硬體中斷號定義 define key1 irq irq eint5 define key2 irq irq eint3 裝置名定義 define devname mykey 主裝置號 cdev定義 需全...