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

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

邮箱:tangzhongp@163.com数组

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

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

 

1.1.1.   设备号

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

clip_image001

最后的结果为:全部的char dev均可以经过hash表来索引。索引一致,major小的在前,如上1major一致,则minor小的在前。orm

 

1.1.2.   设备

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

 

clip_image002

 

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

固然能够采用自动设备建立:ip

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

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