字元裝置驅動

2021-06-29 07:38:31 字數 1622 閱讀 5149

字元裝置驅動

$$$$$概述$$$$$

塊裝置、字元裝置以及網路裝置中塊裝置和網路裝置一般都會硬體配置完備,對於程式設計師而言,能夠更多操作的就是字元裝置。

設定字元裝置的一般步驟:

1.初始化硬體

2.定義fops(file operations)

3.申請cdev,掛載fops

3.加入cdev(函式cdev_add)

$$$$$主次裝置號$$$$$

1、主、次裝置號

主裝置號:標示裝置對應的驅動;

次裝置號:確定裝置檔案所指裝置(裝置編號)。

2、裝置編號的內部表述

dev_t(32位,高12位為主裝置號,低20為次裝置號)【關於dev_t,使用到中的巨集】

①.獲取dev_t

主裝置號=major(dev_t,dev);

次裝置號=minor(dev_t,dev);

②.將主次裝置號轉化為dev_t型別

mkdev(int major,int minor);

$$$$$分配主次裝置號

$$$$$

1、靜態分配

①.檢視已使用主裝置號

/proc目錄下存放著提供給使用者的各類資訊,/proc/devices中為各種裝置的主裝置號。一般避免使用小序號,以免與一些未啟動但是可能是基本裝置的裝置號衝突。所以,一般都使用大序號(100以上)。

②.靜態分配

例:led0-led5 major 233

函式:register_chrdev_region(dev_t   first , unsigned int count,char *name);【first 是你要分配的起始裝置編號】

dev_t    devno;

devno = mkdev(233,0);

register_chrdev_region(devno,6,"led");

③.手動分配節點

mknod -m 755 led0 c 233 0

mknod -m 755 led1 c 233 1

.......

mknod -m 755 led5 c 233 5

2、動態分配

①.上例:

函式:alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name

);

dev_t    devno;

int major;

alloc_chrdev_region(&devno,0,6,"led");

major  =  major(devno)
②.分配節點

insmod led.ko

led_major = `cat /proc/devices | grep led | awk ''` #獲取主裝置號#

mknod -m 755 led0 c 233 0

mknod -m 755 led1 c 233 1

.......

mknod -m 755 led5 c 233 5

裝置驅動例項 字元裝置驅動

在整個linux裝置驅動學習中,字元裝置驅動較為基礎。通過對它的學習,對裝置驅動進一步加深了解 cdev 結構體struct cdev 講下比較重要的成員變數 dev t dev 定義了32位的裝置號,其中12位是主裝置號,20位是從裝置號。獲取主裝置號 major dev t dev 獲取從裝置號...

字元裝置驅動

標頭檔案包含 include 變數定義 define gpgconaddr 0x56000060 硬體中斷號定義 define key1 irq irq eint5 define key2 irq irq eint3 裝置名定義 define devname mykey 主裝置號 cdev定義 需全...

字元裝置驅動

問題 兩個註冊裝置驅動的函式有什麼區別?乙個是 register chrdev 另外乙個是 cdev add 例一 載入模組 static int init init void register chrdev 111,my led my dev fops 註冊裝置 解除安裝模組 static int...