前一種字元裝置驅動程式
之前通過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...