您的位置:首页 > 其它

字符设备驱动--- 设备号 设备文件

2013-02-28 21:46 204 查看

设备号作用:

主设备号 用来标识与设备文件相连的驱动程序. 用来反映设备类型.

次设备号 被驱动程序用来辨别操作的是哪一个设备. 用来区分同类型的设备.

字符设备文件 和 字符设备驱动 如何建立起对应关系:

通过的是主设备号.

{ 解释:字符设备文件 对应了一个主设备号, 字符设备驱动也对应了一个主设备号,

当两个 主设备号 一样时,那么 这 字符设备文件 和 字符设备驱动 两者是匹配的,是对应的. }

字符设备文件 解释:

字符设备文件 本身没有太多的内容,通过
字符设备文件 能找到 字符设备驱动程序 ,

字符设备文件 能将
应用程序 的需求传递给 字符设备驱动程序.

主、次设备号:

内核中如何描述设备号

使用的是 dev_t
这个类型
,其实质是unsigned int 32 位整数,其中高 12 位为主设备号,

低 20 位 为 次设备号.

如何从 dev_t 中 分解出主、次设备号

主设备号: MAJOR( dev_t dev ) , 次设备号 MINOR( dev_t dev ) .

如何分配主设备号:

Linux 内核可以采用 静态申请 和 动态申请 两种方法.

静态申请:

方法:

1,根据 Documentation/devices.txt ,确定一个没有使用的主设备号.

2,使用 register_ chrdev_region 函数注册设备号.

优点: 简单.

缺点:一旦驱动被广泛使用,这个随机选定的主设备号可能会导致设备号冲突,

而使驱动程序无法注册.

函数:int register_ chrdev_region ( dev_t from , unsigned count , const char * name )

要注册的设备号 要注册设备号的个数 设备名(体现在 /proc/devices)

动态分配:

方法:使用alloc_chrdev_region 分配设备号.

有点:易于推广.

缺点:无法在安装驱动前创建 设备文件 ( 因为安装前没有分配到 主设备号) .

解决办法:安装驱动后,从 /proc/devices 查询设备号.

函数:int alloc_chrdev_region ( dev_t *dev , unsigned baseminor , unsigned count , const char * name )

分配到的设备号 起始次设备号 要注册设备号的个数 设备名(体现在 /proc/devices)

注销设备号:

不论使用何种方法分配到的设备号,都应该在不使用它们时释放这些设备号.

函数: void unregister_chrdev_region ( dev_t from , unsigned count)

释放从from开始的 count 个设备号.

创建设备文件方法 - 2种:

1,使用 mknod 命令手工创建.

2,自动创建(驱动程序来实现).

mknod 用法:

mknod filename type major minor

设备文件名 设备文件类型 主设备号 次设备号

eg. mknod serial0 c 100 0 .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐