【linux驱动笔记】字符设备驱动相关数据结构与算法

欢迎转载,转载时需保留作者信息,谢谢。

邮箱:tangzhongp@163.com

博客园地址:http://www.cnblogs.com/embedded-tzp

Csdn博客地址:http://blog.csdn.net/xiayulewa

 

1.1.1.   设备号

alloc_chrdev_region(&dev, 0, 1, "buttons") /  register_chrdev_region: 动态申请设备号, 设备号组成了链表节点。

clip_image001

最后的结果为:所有的char dev都可以通过hash表来索引。索引一致,major小的在前,如上1major一致,则minor小的在前。

 

1.1.2.   设备

cdev_init(&led_cdev, &led_fops) cdev_add(&led_cdev, dev, 1) :加入到probe指针数组,设备号是索引,按照range由小到大排列链表,链表里面保存了很多信息,包括struct cdev,见下图。

 

clip_image002

 

由上述讨论可见,通过设备号,可以索引到设备和驱动程序,在/dev/中添加设备节点后,应用中open设备后就可以操作该设备了。

当然可以采用自动设备创建:

cls = class_create(THIS_MODULE, "leds");  //创建/sys/class/leds/

device_create(cls, NULL, dev, NULL, "myled"); //创建/sys/class/leds/myled

原文地址:https://www.cnblogs.com/embedded-tzp/p/4507240.html