嵌入式linux字符设备驱动

本文详细介绍了在 ARM Linux 上实现驱动程序的基本步骤,包括设备号申请、字符设备区域注册、初始化 cdev 结构、文件操作结构设置、内核加入、自动创建字符设备节点等关键环节。此外,还提供了驱动程序 Makefile 编写和应用程序开发的指导,并分享了几个有价值的参考文章。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARM  Linux  驱动  抵岸科技

 

1. 我们需要先调用register_chrdev_region()或 alloc_chrdev_region()来向系统申请设备号

    int register_chrdev_region( dev_t first, unsigned int count, char *name );  //函数通过已知的设备号first来注册字符设备区域。

    int alloc_chrdev_region( dev_t *dev, unsigned int firstminor,  unsigned int count, char *name );  //若需要动态分配设备号,则使用该函数,此处dev作为指针,为仅用于输出的参数,分配成功后保存已分配范围的第一个编号。firstminor通常为0,表示第一个次设备号。

 2.释放设备号

    void unregister_chrdev_region( dev_t first, unsigned int count );
3.注册完字符设备区域之后

    需要使用cdev_init函数初始化cdev结构和 file_operations结构

    cdev->owner = THIS_MODULE;

    void cdev_init( struct cdev *cdev, struct file_operations *fops);  //为cdev结构指针创建内存,并将cdev->ops=fops;(抵岸科技注:源代码中并未见创建内存。cdev_init依次做了:cdev填充0,初始化表头,kobject成员初始化,将cdev->ops=fops)

    接着讲cdev加入到内核中    int cdev_add( struct cdev *dev, dev_t num, unsigned int count);

    完成字符设备的注册过程

    以上函数需要#include  <linux/cdev.h>

4. 自动创建字符设备节点

    下面的函数需要  #include <linux/device.h>.

    struct class *myclass;  //声明一个class结构用于创建字符设备节点

    myclass = class_create(THIS_MODULE,"myclass");  //"myclass"为类名

    device_create(myclass,NULL,devno,NULL,"leds%d",0);  //通过myclass结构创建字符设备,第二个参数是设备的parent,第三个参

    数是设备号,第四个参数是传入内核的驱动数据void *类型指针,如果没有可以设置成NULL,最后一个参数是const char* fmt, ...,就是

    格式化参数,即leds0

    完成上述过程后会在/dev中找到leds0设备

    貌似以前的老版本会用到devfs_mk_cdev来创建设备节点,但是最后发现linux-2.6.33并没有这个函数,应该是被上述函数取代

    了吧

5. 当然,还包括驱动Makefile的编写以及应用程序

    几处比较有用的参考文章:

    http://hi.baidu.com/hust_junejun/blog/item/d2dcfcedc09833d92e2e213f.html    //比较全面

    http://www.dzsc.com/data/html/2009-8-28/78412.html                                        //自动生成字符设备节点

    http://fanyihui1986.blog.163.com/blog/static/7844859200911325826783/        //小型总结  

6.TIPS

    printk(KERN_WARNING" this is the test ");

    KERN_ALERT

    KERN_WANING

    KERN_INFO

    KERN_ERR

    等等不同优先级 宏,具体可以查阅linux设备驱动程序三,字符设备驱动一章。
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值