首页 > 代码库 > 06 字符设备(二)
06 字符设备(二)
上一节字符驱动不足:
(1)在注册设备号的时候,我们是指定一个特定的主设备号,如果设备号已经注册了就会出现注册失败的情况。
改善:采用动态注册,让Linux内核自动分配一个未使用的设备号。
(2)每次加载完模块后,必须手动创建设备节点,很麻烦。
改善:注册完设备后,让Linux系统自动在/dev目录下创建设备节点。
(3)字符设备的读写函数接口,没有实际的数据流向。
改善:xxx_read函数接口将buffer内容拷贝到用户空间,xxx_write函数接口将用户空间传下的数据,写到buffer里面。
(4)char_device是在data段分配的,占用很大空间。
改善:char_device的空间在Linux内核的堆区分配。
一、动态注册设备号
/**
* alloc_chrdev_region() - register a range of char device numbers
* @dev: output parameter for first assigned number
* @baseminor: first of the requested range of minor numbers
* @count: the number of minor numbers required
* @name: the name of the associated device or driver
*
* Allocates a range of char device numbers. The major number will be
* chosen dynamically, and returned (along with the first minor number)
* in @dev. Returns zero or a negative error code.
*/
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)
功能:让系统自动分配一个设备号,并注册
参数:
@dev 用来获得系统分配的设备号
@baseminor 第一个次设备号
@count 次设备号个数
@name 设备的名字
返回值:
成功返回0,失败返回负的错误码。
二、自动创建设备节点
06 字符设备(二)