linux设备驱动第三版字符设备源代码学习

来源:互联网 发布:淘宝教育招聘 编辑:程序博客网 时间:2024/05/18 01:25

1、  dev_t32位无符号整形数(__u32),用于在内核中保存设备编号,包括主设备号和次设备号。

 

2、  #define MKDEV(ma,mi)   (((ma) << MINORBITS) | (mi))

#define MKDEV(ma,mi)   ((ma)<<8 | (mi))

dev_t 设备号类型,MKDEV是宏定义用于构造设备号类型

 

3register_chrdev_region(dev_t,unsigned, const char *); //静态的申请和注册设备号

使用register_chrdev_region()首先需要定义一个dev_t变量来作为一个设备号,

dev_t   dev_num;

如果想静态申请,那么dev_num=MKDEV(major_no,0);major是一个表示设备号的变量

然后便可以用register_chrdev_regiondev_num,2,"my_dev";第二个参数表示注册的此设备数目,第三个表示驱动名。

返回值:成功返回0;失败返回负值。

 

4、如果要动态的注册主设备号,使用下面

alloc_chrdev_region(&dev_num, 0, 2,"memdev");

返回值:成功返回0;失败返回负值。

//次设备号从0开始,注册两个设备,设备名是Memdev

 

5  #define MAJOR(dev)        ((dev)>>8)   //获得主设备号

#defineMINOR(dev)        ((dev) & 0xff)  //获得次设备号

 

6kmalloc使用 http://baike.baidu.com/view/1575338.htm#3

 

7、内核同步之自旋锁和信号量

http://www.360doc.com/content/10/1008/16/1317564_59358606.shtml

初始化信号量的值:

#define init_MUTEX(sem)                 sema_init(sem,1)  //初始化,未锁定

#define init_MUTEX_LOCKED(sem)         sema_init(sem,0) //初始化,锁定

8cdev结构相关 

http://hi.baidu.com/donghaozheng/blog/item/9191bd191f95de4f42a9ad45.html

http://www.360doc.com/content/10/0720/14/2280906_40299228.shtml

原创粉丝点击