Linux字符cdev和Inode的关系(2)

字符设备的设备号

  字符设备的主,次设备号的分配:

  全局数组 chrdevs 包含了255(CHRDEV_MAJOR_HASH_SIZE 的值)个 struct char_device_struct的元素.

  每一个对应一个相应的主设备号.

  如果分配了一个设备号,就会创建一个 struct char_device_struct 的对象,并将其添加到 chrdevs 中.

  这样,通过chrdevs数组,我们就可以知道分配了哪些设备号.

Linux字符cdev和Inode的关系

相关函数:

  register_chrdev_region( ) 分配指定的设备号范围

  alloc_chrdev_region( ) 动态分配设备范围

  他们都主要是通过调用函数__register_chrdev_region() 来实现的

  要注意,这两个函数仅仅是注册设备号! 如果要和cdev关联起来,还要调用cdev_add()

  register_chrdev( ) 申请指定的设备号,并且将其注册到字符设备驱动模型中.

  它所做的事情为:

  1. 注册设备号, 通过调用 __register_chrdev_region() 来实现

  2. 分配一个cdev, 通过调用 cdev_alloc() 来实现

  3. 将cdev添加到驱动模型中, 这一步将设备号和驱动关联了起来. 通过调用 cdev_add() 来实现

  4. 将第一步中创建的 struct char_device_struct 对象的 cdev 指向第二步中分配的cdev. 由于register_chrdev()是老的接口,这一步在新的接口中并不需要.

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8ca0aea67b1dbc251ba6ef9b43511eaa.html