操作系统_再识(字符设备驱动编写步骤)

1.标准字符设备驱动

  a.注册设备号   

if(key_major) /*静态注册*/
        err = register_chrdev_region(devno, 1, DEVICE_NAME);
    else
    {    /*动态注册*/
        err = alloc_chrdev_region(&devno, 0, 1, DEVICE_NAME);
        key_major = MAJOR(devno);
    }

 b.内存申请给cdev(当cdev定义为指针时)然后调用以下函数进行设备初始化并添加该设备

void cdev_init(struct cdev *cdev, const struct file_operations *fops)
int cdev_add(struct cdev *p, dev_t dev, unsigned count)

c.如需在/dev下自动创建设备,需调用如下函数

struct class *key_class = class_create(THIS_MODULE, name);
struct device *device_create(struct class *class, struct device *parent,dev_t devt, void*drvdata, const char *fmt, ...)

*classs 就是class_create返回的key_classparent如没有就设为NULL;devt设备号;drvdata 如无就为NULL,后面的就是设备名称。也可调用mknod 手动创建设备节点。

自此设备已经成功添加,一下的工作就时完成file_operations中相应函数就好了。

2.混杂模式设备驱动

只需在模块初始化和退出时调用以下函数即可完成设备的注册,设备节点创建等一系列工作,此模式下的主设备号为10

int misc_register(struct miscdevice * misc)
int misc_deregister(struct miscdevice *misc)
struct miscdevice {
 int minor;   /*次设备号*/
 const char *name; /*设备名称 */
 const struct file_operations *fops;
 struct list_head list;
 struct device *parent;
 struct device *this_device;
};

剩下的工作就是完成file_operations中的相应函数功能。

3.plat_form平台下的驱动
 
利用platform机制开发设备驱动的流程:定义platform_device--注册platform_device--定义platform_driver--注册platform_device。对于系统已经注册过的设备就只需实现后两步就可以了,但是在注册的设备名字和注册的驱动名字一定要相同,否则不会注册成功。当platform总线匹配到总线上注册的设备和驱动后,就会调用platform_driver 上的probe函数(此时总线的probe函数为NULL)。在probe中可以获取设备的内存资源和中断资源。所有这些操作完成后就是完成其一些file_operations的操作,然后将其定义为字符设备或混在设备等,在/dev创建其对应的设备文件。(为什么这么做还没有搞懂)应用程序就可以通过open对其操作了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值