最简单的字符设备驱动程序

/**********待整理**************/

1、在注册驱动程序的时候,根据主设备号分配的file_operations结构体放到内核的数组里面。我们在用户空间open打开设备的方式是这样的:根据名字找到设备节点,设备节点会对应主设备号,根据主设备号就找到了file_operations结构体。所以我们还需要创建设备节点:mknod /dev/xxx c 111 0。由此我们也可以看出,用户空间open的名字“xxx”,可以跟内核空间的设备名字不一致。因为并不是通过设备名找到file_operations结构体,只要保证open的名字"xxx"与设备节点的名字相一致,而设备节点的主设备号跟内核设备的主设备号相一致就可以了。因为open函数根据设备名找到设备节点,根据设备节点的主设备号找到file_operations结构体,最终调用file_operations里面注册的open函数。

2、 write (int fd,const void * buf,size_t count);
write函数会将buf里面的内核写入到fd代表的文件里面,写入的字节数是count。

3、 register_chrdev分析
register_chrdev(111,"lcd",&lcd_operation);
__register_chrdev(major, 0, 256, name, fops);
__register_chrdev_region(major, baseminor, count, name);//注册一个主设备号
cdev_alloc(); //分配一个struct cdev结构体,里面有struct file_operations结构体
//设置struct cdev结构体
cdev->owner = fops->owner;
cdev->ops = fops;
//根据主设备号将struct cdev添加到一个数组里面去
cdev_add(cdev, MKDEV(cd->major, baseminor), count);

4.、register_chrdev(111,"lcd",&lcd_operation); 如果主设备号为0,就会自动分配主设备号!分配到的主设备号会作为返回值。装载驱动后,可以在开发板上cat /proc/devices查看主设备号,以便创建设备节点

猜你喜欢

转载自www.cnblogs.com/Ocean-Star/p/9250405.html