Linux驱动程序学习笔记(5)——新版本的初始化
来源:互联网 发布:13网络用语 编辑:程序博客网 时间:2024/06/18 15:38
一,分配设备号
1,静态分配设备号int register_chrdev_region(dev_t first, unsigned int count, char *name);
first 是你要分配的起始设备编号(包含主和次设备号). first 的次编号部分常常是 0, 但是没有要求是那个效果.
count 是你请求的连续设备编号的总数. 注意, 如果 count 太大, 你要求的范围可能溢出到下一个次编号; 但是只要你要求的编号范围可用, 一切都仍然会正确工作.
name 是应当连接到这个编号范围的设备的名子; 它会出现在 /proc/devices 和 sysfs 中.
2,动态分配设备号
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name);
dev 是一个只输出的参数, 它在函数成功完成时持有你的分配范围的第一个数.
fisetminor 应当是请求的第一个要用的次编号; 它常常是 0.
count 和 name 参数如同给 request_chrdev_region 的一样.
3,释放已分配的设备号
void unregister_chrdev_region(dev_t first, unsigned int count);
二,分配cdev
1,cdev初始化
一个 cdev一般它有两种定义初始化方式:静态的和动态的。
(1)静态内存定义初始化:
struct cdev my_cdev;
cdev_init(&my_cdev, &fops);
my_cdev.owner = THIS_MODULE;
(2)动态内存定义初始化:
struct cdev *my_cdev = cdev_alloc();
my_cdev->ops = &fops;
my_cdev->owner = THIS_MODULE;
2,添加cdev到系统中
初始化cdev后,需要把它添加到系统中去。为此可以调用 cdev_add()函数。传入 cdev结构的指针,起始设备编号,以及设备编号范围。
int fsfunc cdev_add ( struct cdev * p, dev_t dev, unsigned count);
p, the cdev structure for the device
dev, the first device number for which this device is responsible
count, the number of consecutive minor numbers corresponding to this device
3,删除cdev
当一个字符设备驱动不再需要的时候(比如模块卸载),就可以用 cdev_del()函数来释放 cdev占用的内存。
void fsfunc cdev_del ( struct cdev * p);
p, the cdev structure to be removed
- Linux驱动程序学习笔记(5)——新版本的初始化
- Linux设备驱动程序学习笔记14:中断的初始化流程
- Linux驱动程序学习笔记(4)——使用中断的按键驱动程序
- Linux驱动程序学习笔记(3)——点亮LED
- Linux驱动程序学习笔记(7)—— 阻塞、POLL
- 学习笔记——Linux设备驱动程序——【第一章】设备驱动程序简介(完结)
- OpenCV学习笔记——新版本的数据结构core
- Linux驱动程序学习笔记(6)——ioctl函数的用法
- OpenCV学习笔记(二)——新版本模块结构
- OpenCV学习笔记(二)——新版本模块结构
- OpenCV学习笔记(二)——新版本模块结构
- OpenCV学习笔记(二)——新版本模块结构
- OpenCV学习笔记(二)——新版本模块结构
- OpenCV学习笔记(二)——新版本模块结构
- OpenCV学习笔记(二)——新版本模块结构
- OpenCV学习笔记(四)——新版本的数据结构core
- OpenCV学习笔记(四)——新版本的数据结构core
- OpenCV学习笔记(四)——新版本的数据结构core
- Nginx 变量漫谈(八)
- 在职找工作的宜与忌
- CLR(common language runtime)通用语言运行平台
- 通过JConsole监控Tomcat
- 分享30个开发人员有用的CSS代码片段
- Linux驱动程序学习笔记(5)——新版本的初始化
- Hive安装与配置——深入浅出学Hive
- 重新认识执行力
- JDBC数据库连接池总结
- 创业的本质是有效服务
- linux套接字选项—getsockopt和setsockopt
- 国际化作业
- On the Superfluousness of std::move - Scott Meyers
- xp系统创建新用户用Administrator账户消失解决方法