一,需要了解知識
(一)裝置號
1,核心中通過型別dev_t,來描述裝置號,其實質是unsigned int 32位整數,其中高12位為主裝置號,低20位為次裝置號。
int register_chadev_region(dev_t from, unsigned count, const char *name)
第乙個引數:申請裝置號範圍起始值
第二個引數:從from開始申請多少個
第三個引數:裝置號名字(為了方便管理)
2,裝置號獨一無二,主裝置號表示同一型別裝置,次裝置號表示同一型別的不同裝置。就像攝像頭,分前置和後置。
(二)裝置資訊描述
1,對於裝置資訊的靜態描述
struct cdev
2,對於裝置資訊行為的描述
file_operation
3,相關註冊函式
(1)只有登記註冊,核心才能統一管理
(2)相關註冊函式
a,int cdev_add(struct cdev *p, dev_t dev, unsigned count);
第乙個引數:裝置資訊結構體
第二個引數:裝置號
第三個引數:個數
目的:把字元裝置註冊到核心裡
b,void cdev_init(struct cdev *, const struct file_operations *);
目的:建立裝置資訊和裝置行為之間的聯絡
(三)驅動生存週期
1,insmod **.ko,裝載驅動,生存週期開始;
2,rmmod **ko,解除安裝驅動,生存週期結束。
(四)**分析
1,mkdev(主裝置號,次裝置號); //巨集定義,非函式。
2,printk
和printf很像,都是列印錯誤資訊,不同的是,printk是分列印級別的。
目的:只列印相關資訊。
3,kzalloc與kmalloc
(1)與malloc功能相似,不過malloc是使用者空間用來申請一段記憶體,在核心空間必須用kzalloc或kmalloc
(2)kzalloc與kmalloc區別
kzalloc會把申請到的空間全部清零。
裝置驅動例項 字元裝置驅動
在整個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定義 需全...