虚拟字符设备的完整制作过程 模块源代码,应用,编译所有步骤均有详细介绍

本文详细介绍了虚拟字符设备的制作过程,包括驱动部分的关键函数如open、release、read、write、ioctl等,以及如何注册和注销设备。通过示例代码展示如何实现设备的读写操作,并提供了内核模块的编译和加载方法,以及应用程序的编写和编译,帮助读者理解虚拟字符设备的工作原理。
摘要由CSDN通过智能技术生成

字符设备:设备发送与接收数据是以字符的形式进行;

块设备:是以数据缓冲区的形式进行


虚拟字符设备

驱动部分:

注册设备函数:register_chrdev()

举例: register_chrdev(MAJOR_NUM, " gobalvar ", &gobalvar_fops)

                                           MAJOR_NUM 为主设备号,“gobalvar”为设备名,gobalvar_fops 为包含基本函数入口点的结构体,类型为 file_operations

注销设备函数:unregister_chrdev(MAJOR_NUM, " gobalvar ")

对于字符设备来说,要提供的主要入口有:open ()、release ()、read ()、write ()、ioctl ()、llseek()、poll()等

open()函数  对设备特殊文件进行 open()系统调用时,将调用驱动程序的 open ()  函数

int (*open)(struct inode * ,struct file *); 参数 inode 为设备特殊文件的 inode (索引结点)  结构的指针,参数 file 是指向这一
设备的文件结构的指针。

返回状态码(0 表示成功,负数表示存在错误) 



举例:

static int globalvar_open(struct inode *inode, struct file *filp) 

struct file_operations globalvar_fops = 
{    

    read: globalvar_read, 

     write: globalvar_write,

     open: globalvar_open, 

     release: globalvar_release, 
}; 



release()函数  当最后一个打开设备的用户进程执行 close ()系统调用时,内核将调用驱
动程序的 release ()  函数: void (*release) (struct inode * ,struct file *) ; 
release  函数的主要任务是清理未结束的输入/输出操作、释放资源、用户自定义排他标
志的复位等。

举例:

static int globalvar_release(struct inode *inode, struct file *filp) 

    globalvar_count--; 
    return 0; 

read()函数  当对设备特殊文件进行 read()  系统调用时,将调用驱动程序 read()  函数: 
ssize_t (*read) (struct file *, char *, size_t, loff_t *); 

举例:

static ssize_t globalvar_read(struct file *filp, char *b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值