首页 > 运维 > linux运维 > 正文

Linux如何注册与销毁字符设备_Linuxcdev操作方法

舞夢輝影
发布: 2025-11-26 21:14:02
原创
584人浏览过
首先分配设备号并初始化cdev结构体,接着将cdev添加到系统完成注册;卸载时先删除cdev再释放设备号,推荐使用class_create和device_create自动创建设备节点。

linux如何注册与销毁字符设备_linuxcdev操作方法

在Linux内核开发中,字符设备是驱动程序与用户空间交互的重要方式。通过cdev结构体可以方便地管理字符设备的注册与注销。下面介绍如何使用cdev完成设备的注册和销毁。

字符设备注册流程

要向内核注册一个字符设备,需完成以下几个步骤:

  • 分配设备号:使用alloc_chrdev_region()动态获取设备号,或用register_chrdev_region()静态指定主次设备号。
  • 初始化cdev结构:调用cdev_init()将文件操作集(file_operations)与cdev绑定。
  • 添加到系统:使用cdev_add()将设备添加到内核,使其可被访问。

示例代码:

dev_t dev_num;
struct cdev my_cdev;
static struct file_operations fops = {
    .owner = THIS_MODULE,
    .read  = device_read,
    .write = device_write,
    .open  = device_open,
    .release = device_release,
};

// 获取设备号
alloc_chrdev_region(&dev_num, 0, 1, "my_device");

// 初始化cdev
cdev_init(&my_cdev, &fops);

// 添加设备
cdev_add(&my_cdev, dev_num, 1);
登录后复制

销毁字符设备

模块卸载时必须正确释放资源,避免内存泄漏或设备残留。

  • 从系统移除设备:调用cdev_del()删除已注册的cdev。
  • 释放设备号:使用unregister_chrdev_region()释放之前申请的设备号。
  • 清理相关资源:如释放内存、关闭硬件等。

示例代码:

cdev_del(&my_cdev);
unregister_chrdev_region(dev_num, 1);
登录后复制

创建设备节点(可选)

注册成功后,需在/dev下创建设备文件供用户访问。可通过以下方式实现:

绘蛙
绘蛙

电商场景的AI创作平台,无需高薪聘请商拍和文案团队,使用绘蛙即可低成本、批量创作优质的商拍图、种草文案

绘蛙 175
查看详情 绘蛙
  • 手动使用mknod命令。
  • 在驱动中使用class_create()device_create()自动创建。

推荐自动方式:

struct class *my_class;
struct device *my_device;

my_class = class_create(THIS_MODULE, "my_class");
my_device = device_create(my_class, NULL, dev_num, NULL, "my_device");
登录后复制

卸载时对应调用device_destroy()class_destroy()

注意事项

实际开发中注意以下几点:

  • 确保cdev_init()cdev_add()前调用。
  • 检查每个函数返回值,出错时及时回滚操作。
  • 模块卸载顺序应与注册顺序相反。
  • 设备号建议动态分配以避免冲突。

基本上就这些。掌握cdev的使用是编写Linux字符设备驱动的基础。不复杂但容易忽略细节。

以上就是Linux如何注册与销毁字符设备_Linuxcdev操作方法的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号