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

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

 

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

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

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

 

3 register_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_region dev_num,2,"my_dev" ; 第二个参数表示注册的此设备数目,第三个表示驱动名。

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

 

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

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

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

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

 

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

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

 

6 kmalloc 使用 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) // 初始化,锁定

8 cdev 结构相关  

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值