国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

從零開始寫linux字符設備驅動程序(二)(基于友善之臂tiny4412開發板)

2024-06-28 16:05:16
字體:
來源:轉載
供稿:網友

上節,我們講解了如何寫第一個linux字符設備驅動程序,這節,我們將代碼做一下修改。

如下:

#include <linux/init.h>#include <linux/module.h>#include <linux/sched.h>#include <linux/kernel.h>#include <linux/cdev.h>#include <linux/kdev_t.h>#include <linux/fs.h>dev_t dev_no ;static int __init  cdev_test_init(void){	int ret ;	PRintk("HELLO KERNEL FOR CDEV!/n");	//1、創建設備號-->第一個是主設備號,第二個是次設備號	//dev_no  = MKDEV(222,2);	//2、注冊設備號	//count表示要分配多少個設備號	//ret = register_chrdev_region(dev_no,1,"my_dev");	//申請設備號	ret = alloc_chrdev_region(&dev_no,1,1,"my_dev");		if(ret < 0){		goto register_error ;	}		register_error:		return 0 ;}static int __exit cdev_test_exit(void){	//注銷驅動-->后面寫1表示從dev_no開始連續一個	unregister_chrdev_region(dev_no,1);	return 0 ;}module_init(cdev_test_init);module_exit(cdev_test_exit);MODULE_LICENSE("GPL");然后重新編譯,將內核鏡像下載到開發板:

cat /proc/devices查看

我們看到了,my_dev對應的主設備號是248了,上一個驅動是222,為什么這里就是248了,而不是222了呢?

因為,在這里,我們調用了#include <linux/fs.h>這個頭文件下的這個函數:

extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);

這個函數的作用就是,由內核給我們分配一個設備號,這個設備號是內核自動分配的,就不需要我們去使用MKDEV這個宏來進行手動分配了。這也可以稱作是字符設備的動態分配方式。

函數原型如下:

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,			const char *name){	struct char_device_struct *cd;	//調用__register_chrdev_region來注冊字符設備	cd = __register_chrdev_region(0, baseminor, count, name);	//注冊失敗返回PTR_ERR(cd)錯誤碼。	if (IS_ERR(cd))		return PTR_ERR(cd);	//這里一樣的是調用MKDEV分配設備號	*dev = MKDEV(cd->major, cd->baseminor);	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武平县| 昂仁县| 大余县| 类乌齐县| 石门县| 班戈县| 白河县| 龙川县| 额尔古纳市| 沙雅县| 武穴市| 耿马| 大洼县| 天柱县| 西宁市| 阿鲁科尔沁旗| 班玛县| 怀化市| 谷城县| 明光市| 左权县| 太谷县| 湘潭市| 丽水市| 苏尼特右旗| 旬阳县| 十堰市| 出国| 会昌县| 蓬溪县| 永定县| 嵩明县| 满城县| 黑河市| 阿克陶县| 乌鲁木齐市| 连山| 伊川县| 清水河县| 凤城市| 盐源县|