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