Linux2.6内核中的cdev结构体与设备注册
需积分: 20 34 浏览量
更新于2024-09-09
收藏 47KB DOC 举报
"Linux内核2.6中的cdev结构体及相关函数用于字符设备驱动的开发,主要包括cdev结构体的定义、设备号的操作以及cdev相关的一系列函数,如cdev_init、cdev_alloc、cdev_put、cdev_add和cdev_del等。"
在Linux 2.6内核中,字符设备的抽象是通过`cdev`(字符设备)结构体实现的。`cdev`结构体包含了设备的核心属性,如:
1. `struct kobject kobj;` - 这个字段是内核对象的指针,用于内核对象管理系统。
2. `struct module *owner;` - 指向模块所有者的指针,用于跟踪哪个模块创建了该设备。
3. `const struct file_operations *ops;` - 文件操作结构体的指针,定义了与设备交互的一系列函数,例如open、read、write、close等。
4. `struct list_head list;` - 用于将`cdev`对象链接到内核的链表中。
5. `dev_t dev;` - 设备号,由主设备号(12位)和次设备号(20位)组成。
6. `unsigned int count;` - 可能表示设备的引用计数。
设备号可以通过宏`MAJOR()`和`MINOR()`获取,`MKDEV()`则用于通过主次设备号创建`dev_t`类型的设备号。
此外,针对`cdev`结构体,还有一些关键的内核函数:
- `cdev_init(struct cdev *, const struct file_operations *)` - 初始化`cdev`结构体,并将指定的`file_operations`结构体与其关联,这通常在驱动程序的初始化阶段执行。
- `cdev_alloc(void)` - 动态分配一个`cdev`结构体的内存,供驱动程序使用。
- `cdev_put(struct cdev *)` - 当不再需要`cdev`时,释放相应的内存资源。
- `cdev_add(struct cdev *, dev_t, unsigned)` - 注册设备到系统,分配设备号并将其链接到内核的设备列表中,通常在模块初始化或加载时调用。
- `cdev_del(struct cdev *)` - 卸载设备,解除它与系统的关联,通常在模块卸载时执行。
在使用`cdev`结构体之前,驱动程序需要先调用`register_chrdev_region(dev_t from, unsigned count, const char *name)`函数,为设备分配设备号。这个函数告诉内核有多少个连续的设备号需要被使用,并且这些设备属于哪个驱动。设备号的范围由`from`指定,`count`表示设备号的数量,`name`是驱动的名称。
`cdev`结构体和相关函数是Linux内核中字符设备驱动程序的基础,它们提供了创建、管理字符设备的机制,使得驱动开发者能够方便地实现设备的注册、注销以及与用户空间的交互。
2021-10-11 上传
2021-10-11 上传
2023-06-01 上传
2024-10-26 上传
2023-06-01 上传
2024-10-26 上传
2023-06-10 上传
2023-06-09 上传
小佳佳0918
- 粉丝: 10
- 资源: 15
最新资源
- Douban-Movie:仿豆瓣电影页面
- 电子功用-基于幅值调制视觉诱发电位脑-机接口方法
- ParallelRepastCore:将 RePast3 与并行模型一起使用的两个精简示例
- column-encryption:使用SQL Always Encrypted库演示列(字段)级加密模式的示例应用程序
- Python库 | ms_active_directory-1.10.1.tar.gz
- fabric::coat::socks:功能齐全的简约降价编辑器。 - 即将推出
- assignment3p1
- 亚马逊快速搜索-crx插件
- Python库 | mssql_dataframe-1.0.0.tar.gz
- pyca-cryptography
- bi-dashboard:有货数据可视化工具
- 淘客喵佣金猎手-crx插件
- gt_fsf_hw10_team_profile_generator:此分配要求我们利用节点js和相关的npm包根据用户输入创建一些特定HTML内容。 我们还必须使用npm Jest创建单元测试,并在演练视频中演示其功能
- CodeIdea:一些有用或好的代码可以解决我的问题
- Laravel_Ecommerce:电子商务代码逐步
- neilrathi.github.io:Github Pages网站