06 字符设备

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 字符设备的主要内容,如果未能解决你的问题,请参考以下文章

从Linux内核LED驱动来理解字符设备驱动开发流程

Python 从字符设备读取空字节数组

为啥 adb 在设备字符串后返回离线?

如何从处于低功耗状态的 USB 设备获取字符串描述符?

为串行设备创建/格式化十六进制值字符串

Linux-标准字符设备