linux字元驅動之自動建立裝置節點

2021-10-02 19:39:41 字數 3667 閱讀 6080

問:能不能讓系統自動建立裝置節點?

答:可以,linux有udev、mdev的機制,而我們的arm開發板上移植的busybox有mdev機制,那麼就使用mdev機制來自動建立裝置節點。

問:檔案系統裡,在**設定了mdev機制?

答:在etc/init.d/rcs檔案裡有一句:

echo /sbin/mdev > /proc/sys/kernel/hotplug

問:在驅動程式裡面如何編寫程式,讓系統自動建立裝置節點?

答:首先建立乙個class類,然後在class類下,建立乙個class_device,即類下面建立類的裝置。

#include #include #include #include #include #include #include #include #include #include static struct class *firstdrv_class;

static struct class_device *firstdrv_class_dev;

int major;

static int first_drv_open(struct inode * inode, struct file * filp)

static int first_drv_write(struct file * file, const char __user * buffer, size_t count, loff_t * ppos)

/* file operations struct for character device */

static const struct file_operations first_drv_fops = ;

/* 驅動入口函式 */

static int first_drv_init(void)

/* 驅動出口函式 */

static void first_drv_exit(void)

module_init(first_drv_init); //用於修飾入口函式

module_exit(first_drv_exit); //用於修飾出口函式

module_author("lwj");

module_description("just for demon");

module_license("gpl"); //遵循gpl協議

測試程式和makefile沒有修改,故再不貼。

測試步驟:

[wj2440]# ls

qt driver_test lib root udisk

tqledtest etc linuxrc sbin usr

bin first_test opt sys web

dev home proc tmp

[wj2440]# ls -l /dev/*** //還沒有裝置節點

ls: /dev/***: no such file or directory

[wj2440]# insmod first_drv.ko //裝上我們寫的驅動後,會自動生成裝置節點/dev/***

[wj2440]# lsmod

first_drv 1912 0 - live 0xbf000000

[wj2440]# ls -l /dev/*** //檢視生成的裝置節點

crw-rw---- 1 root root 252, 0 jan 1 23:17 /dev/***

[wj2440]# cat proc/devices

character devices:

1 mem

4 /dev/vc/0

4 tty

5 /dev/tty

5 /dev/console

5 /dev/ptmx

7 vcs

10 misc

13 input

14 sound

29 fb

81 video4linux

89 i2c

90 mtd

116 alsa

128 ptm

136 pts

180 usb

188 ttyusb

189 usb_device

204 tq2440_serial

252 first_drv

253 usb_endpoint

254 rtc

block devices:

259 blkext

7 loop

8 sd

31 mtdblock

65 sd

66 sd

67 sd

68 sd

69 sd

70 sd

71 sd

128 sd

129 sd

130 sd

131 sd

132 sd

133 sd

134 sd

135 sd

179 mmc

[wj2440]# cd /sys/class/ //開啟/sys/class可以看到我們生成的firstdrv類

[wj2440]# ls

bdi i2c-adapter misc scsi_device usb_endpoint

block i2c-dev mmc_host scsi_disk usb_host

firmware ieee80211 mtd scsi_host vc

firstdrv input net sound video4linux

graphics mem rtc tty vtconsole

[wj2440]# cd firstdrv/ //firstdrv類裡面有我們的***裝置

[wj2440]# ls

***[wj2440]# cd ***/

[wj2440]# ls

dev subsystem uevent

[wj2440]# cat dev //主裝置號252,次裝置號0

252:0

[wj2440]# cat uevent

major=252

minor=0

[wj2440]# cd /

[wj2440]# ./first_test //有了裝置節點便能夠執行我們的程式了

first_drv_open

first_drv_write

[wj2440]#

Linux核心驅動之自動建立裝置檔案

裝置檔案是非常重要的檔案,是應用程式與裝置驅動交換資料,控制硬體的橋梁。在驅動程式中open release的實現過程中其中的乙個引數struct inode實質就是裝置檔案的索引,沒有這個索引也就沒有後期的各種操作,通常裝置檔案也被稱為裝置檔案節點。因此沒有裝置檔案後期的各種實現都是多餘的。裝置檔...

linux字元裝置驅動中自動建立裝置節點

簡述 1 裝置號 驅動等概念性問題 2 裝置號的自動分配和手動指定 3 mknode手動建立節點。編碼實現 1 核心點 要使的驅動能夠在載入時自動完成裝置節點的註冊,主要流程如下 驅動載入時完成如下工作 分配裝置號 註冊字元裝置 動態建立裝置節點。驅動解除安裝時完成如下工作 刪除裝置節點 取消字元裝...

Linux驅動(三) 完善裝置驅動自動建立裝置號

include include include include include include include argc 應用程式引數個數,包括應用程式本身 ar 具體的引數內容,字串形式 int main int argc,char ar filename ar 1 獲取檔名稱 fd open f...