【文章福利】小编推荐自己的Linux内核技术交流群:【891587639】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)
1.1分配cdev
1.2.初始化cdev
1.3.注册cdev
1.4.硬件初始化
2.1. open()函数
2.2. read( )函数
2.3. write( )函数
2.4. close( )函数
2.5 ioctl( )函数
2.5. 补充说明
1. 在Linux字符设备驱动程序设计中,有3种非常重要的数据结构:struct file、struct inode、struct file_operations。
2. 在read( )和write( )中的buff 参数是用户空间指针。因此,它不能被内核代码直接引用,因为用户空间指针在内核空间时可能根本是无效的——没有那个地址的映射。因此,内核提供了专门的函数用于访问用户空间的指针:
3.1. 删除cdev
在字符设备驱动模块卸载函数中通过cdev_del()函数向系统删除一个cdev,完成字符设备的注销。
3.2. 释放设备号
编辑
5:int register_chrdev_region(dev_t from,unsigned count,const char *name)
6:int alloc_chrdev_region(dev_t *dev,unsigned baseminor,unsigned count,const char *name);
7:void unregister_chrdev_region(dev_t from,unsigned count);
4.8字符设备驱动的 file_operations 结构体重成员函数
4.9、字符设备驱动文件操作结构体模板
class_create(…)在/drivers/base/class.c中实现
class_destroy(...)函数
device_create(…)函数在/drivers/base/core.c中实现
相比devfs,udev有很多优势,在此就不罗嗦了,提醒一点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_create创建对应的设备。大致用法如下:
加载结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/44288.html