怎么创建字符设备驱动函数详解和程序

怎么创建字符设备驱动
【1】
字符设备驱动(register_chrdev)
struct cdev {
struct module *owner; //THIS_MODULE
const struct file_operations *ops; //操作方法结构体
dev_t dev; //设备号 32 12|20 2^32=4G
unsigned int count; //设备的个数
};
1、先定义结构体

    //1、定义结构体
struct cdev *cdev = cdev;  //结构体的定义
cdev = cdev_alloc();  //该函数没有参数
//void kfree(void *p); //释放内存
int ret;
if(cdev == NULL){
		printk("alloc memory error\n");
		//在写驱动程序的时候我们一般返回的是一个内核定义的宏
	         ret = -ENOMEM;
	         goto ERR_STEP0;
	    }
    //2、结构体的初始化
    cdev_init(cdev,&fops);
    //3.设备号的申请在这里我们可以用判断的方式来选择(手动分配)还是(自动分配)
    if(major > 0){
	   ret = register_chrdev_region(MKDEV(major,minor),count,CDEVNAME);
	    if(ret){
		    printk("static:alloc device number error\n");
		    goto ERR_STEP1;
    }else{
	   //自动申请
	   ret = alloc_chrdev_region(&devm,minor,count,CDEVNAME);
	   if(ret){
		   printk("dynaimc:alloc device number error\n");
		   goto ERR_STEP1; //跳转到错误步骤1,然后执行下面的程序
		   }
		   major = MAJOR(devm);  //获取主设备号
		   minor = MINOR(devm);  //获取次设备号
	   }
	   //4、注册设备号
	   ret = cdev_add(cdev,MKDEV(major,minor),count);
	   //判断返回值
	   if(ret){
		   printk("char device register error\n");
		   goto ERR_STEP2;
	   }
	   return 0;   //不能忽略
   ERR_STEP2:
   unregister_chrdev_region(MKDEV(major,minor),count);
   ERR_STEP1:
   kfree(cdev);
   ERR_STEP0:
   return ret;
}
//在这里的 (入口函数) 和 (出后函数) 和 (自动创建节点函数) 我没写
//你用得话直接把程序放到你的static int __init mycdev_init(void)这是我得入口函数函数名叫mycdev_init
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值