chrdevbase字符设备驱动开发实验学习--基于MX6U(02)

6 关闭/释放设备

static int chrdevbase_release (struct inode *inode, struct file *filp)
{
    //printk("chrdevbase release!\r\n");
    return 0; 
}

chrdevbase_release函数是 Linux 字符设备驱动程序中的release操作,它通常与文件系统中的close()系统调用相关联,当用户空间的应用程序调用close()函数关闭设备文件时,内核会调用字符设备驱动中的release函数。

  • struct inode *inode:指向文件系统中表示设备文件的 inode 结构体,inode包含了文件的元数据信息;
  • struct file *filp:指向文件结构体,表示正在使用的设备文件,filp包含了与文件相关的状态信息。

7 设备操作函数结构体

static struct file_operations chrdevbase_fops = {
    .owner = THIS_MODULE,
    .open = chrdevbase_open,
    .read = chrdevbase_read,
    .write = chrdevbase_write,
     .release = chrdevbase_release,
};

该结构体实例将一组函数指针与其成员关联起来,这些函数指针用于处理字符设备的各种操作,如打开设备文件、读取数据、写入数据、以及关闭设备文件。

其中owner是struct file_operations的一个成员,用于表示该文件操作的所有者模块。

8 驱动入口函数 

static int __init chrdevbase_init(void)
{
    int retvalue = 0;
    /* 注册字符设备驱动 */
    retvalue = register_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME, &chrdevbase_fops);
    if(retvalue < 0){
        printk("chrdevbase driver register failed\r\n"); 
    }
    printk("chrdevbase_init()\r\n");
    return 0;
}

完成字符设备驱动的初始化,主要目的是注册一个字符设备驱动程序,使得内核能够识别并与之交互。register_chrdev用于注册字符设备驱动,其中&chrdevbase_fops是一个指向file_operations结构体的指针,通过这个指针,内核可以知道在用户访问该设备时应该调用哪些函数。

9 驱动出口函数 

static void __exit chrdevbase_exit(void)
{
    /* 注销字符设备驱动 */ 
    unregister_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME); 
    printk("chrdevbase_exit()\r\n"); 
}

使用unregister_chrdev()注销字符设备驱动程序,使内核不再管理和识别该设备。

10 指定驱动的入口和出口函数

module_init(chrdevbase_init);
module_exit(chrdevbase_exit);

11 LICENSE和作者信息

MODULE_LICENSE("GPL");
MODULE_AUTHOR("LZQYT");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值