【嵌入式-linux内核函数】register_chrdev注册字符设备

本文详细解释了Linux内核中的register_chrdev函数用于动态分配和注册字符设备,包括设备号、名称和文件操作,以及unregister_chrdev用于卸载设备的使用方法。
摘要由CSDN通过智能技术生成

原文地址:002_linux驱动之_register_chrdev注册字符设备

(一)解析:register_chrdev函数和unregister_chrdev函数

(二)register_chrdev函数原型
int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)

  • register_chrdev() -为字符设备注册一个主号码。

  • @major:用于动态分配的主要设备号或0

  • @name:这一系列设备的名称

  • @fops:与此设备相关联的文件操作

*如果@major == 0,这个函数将动态分配一个main并返回它的号码。

*如果@major > 0,此函数将尝试使用给定的设备保留设备,主要数字,将返回零成功。

  1. 从上面函数原型中我们可知使用register_chrdev函数我们需要设备号,名字,还有相关文件操作就行了
  2. 由于能力有限,看不懂register_chrdev里面的程序,故不粘贴全部代码出来,先知道怎么用
  3. 使用示例:
    major = register_chrdev(0, “first_drv”, &first_drv_fops);
    解析:第一个参数0则为系统自动分配设备号,并返回,使用major 变量接收
    第二个参数设置这个系列设备的名称为first_drv
    第三个参数first_drv_fops在003_linux驱动之_file_operations函数

(三)unregister_chrdev函数原型
int unregister_chrdev(unsigned int major, const char *name)

  1. 同第二点可知,卸载一个字符设备只需要设备号和名自就行了
  2. 使用示例:
    unregister_chrdev(major, “first_drv”);

(四)注:

  1. register_chrdev函数当然是在insmod时候应该调用了,看001_linux驱动之_驱动的加载和卸载
  2. unregister_chrdev函数当然是在rmmod时候调用了。
    在这里插入图片描述
    在这里插入图片描述
`register_chrdev_region` 是 Linux 内核中的一个函数,用于向系统注册一个字符设备号。下面是一个 `register_chrdev_region` 的示例: ```c #include <linux/module.h> #include <linux/fs.h> dev_t dev_num; static int __init my_init(void) { int ret; /* 申请设备号 */ ret = alloc_chrdev_region(&dev_num, 0, 1, "my_device"); if (ret < 0) { printk(KERN_ERR "Cannot allocate device number\n"); return ret; } printk(KERN_INFO "Device number: %d:%d\n", MAJOR(dev_num), MINOR(dev_num)); return 0; } static void __exit my_exit(void) { /* 释放设备号 */ unregister_chrdev_region(dev_num, 1); printk(KERN_INFO "Unregistered device number\n"); } module_init(my_init); module_exit(my_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("Example of register_chrdev_region"); ``` 在上面的示例中,我们使用 `alloc_chrdev_region` 函数来申请一个设备号,并将其保存在 `dev_num` 变量中。`alloc_chrdev_region` 函数的第一个参数是一个指向 `dev_t` 类型变量的指针,用于保存申请到的设备号。第二个参数是设备号的起始值,一般情况下为 0。第三个参数是设备号的数量,这里我们只需要一个设备号,所以为 1。第四个参数是设备名称。 在模块的退出函数中,我们使用 `unregister_chrdev_region` 函数来释放设备号。 注意,在使用 `register_chrdev_region` 和 `unregister_chrdev_region` 函数时,需要包含 `linux/fs.h` 头文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值