另一種字元裝置驅動程式

2021-09-08 21:48:44 字數 2616 閱讀 8114

前一種字元裝置驅動程式

之前通過register_chrdev(0, 「hello」, &hello_fops)註冊字元驅動程式,乙個主裝置號下的所有裝置(major,0)—(major,255)都對應hello_fops。

另一種字元裝置驅動程式

實現函式:

//自動分配主裝置號,只有(major,0)和(major,1)對應hello_fops

alloc_chrdev_region(&devid, 0, 2, 「hello」);

major=major(devid);

dev_init(&hello_cdev,&hello_fops);

cdev_add(hello_cdev,devid,hello_cnt);

device_create(cls, null, mkdev(major, 0), null, 「hello0」); / /dev/hello0

device_create(cls, null, mkdev(major, 1), null, 「hello1」); /*/dev/hello1

程式原始碼

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

static

struct class *cls;

static

struct cdev hello_cdev;

static

struct cdev hello2_cdev;

static

int major;

#define hello_cnt 2

//兩個次裝置號

/*構造hello_open*/

static ssize_t hello_open (

struct inode * inode,

struct file * file)

static

struct file_operations hello_fops=

;/*構造hello2_open*/

static

inthello2_open

(struct inode *inode,

struct file *file)

static

struct file_operations hello2_fops =

;static

inthello_init

(void

)else

cdev_init

(&hello_cdev,

&hello_fops)

;cdev_add

(hello_cdev,devid,hello_cnt)

;/*(major,2)對應hello2_fops*/

devid =

mkdev

(major,2)

;register_chrdev_region

(devid,1,

"hello2");

cdev_init

(&hello2_cdev,

&hello2_fops)

;cdev_add

(&hello2_cdev, devid,1)

; cls =

class_create

(this_module,

"hello");

device_create

(cls,

null

,mkdev

(major,0)

,null

,"hello0");

/* /dev/hello0 */

device_create

(cls,

null

,mkdev

(major,1)

,null

,"hello1");

/* /dev/hello1 */

device_create

(cls,

null

,mkdev

(major,2)

,null

,"hello2");

/* /dev/hello2 */

device_create

(cls,

null

,mkdev

(major,3)

,null

,"hello3");

/* /dev/hello3 打不開*/

return0;

}static

void

hello_exit

(void

)module_init

(hello_init)

;//入口函式

module_exit

(hello_exit)

;//出口函式

module_license

("gpl"

);

驅動14 字元裝置的另一種寫法

原本的字元裝置只能有255個驅動程式,原因是乙個主裝置號占用了0 255的次裝置號 把register chrdev展開可得到一下幾個部分 register chrdev region alloc chrdev region,cdev init,cdev add 參照register chrdev的...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...