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

来源:互联网 发布:sja1000 接收数据 编辑:程序博客网 时间:2024/06/09 13:44

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

分类: Linux Device Driver 296人阅读 评论(0) 收藏 举报
LINUX驱动

目录(?)[+]


设备号作用: 

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

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


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

            通过的是主设备号.

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

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


字符设备文件 解释

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

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


主、次设备号:

            内核中如何描述设备号

                        使用的是 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 .

0 0