Linux一段添加字符设备驱动程序的代码,求详细注释,100分急求

1.字符设备驱动程序的代码:#include<linux/fs.h>#include<linux/kernel.h>#include<linux/module.h>#in... 1.字符设备驱动程序的代码:
#include<linux/fs.h>
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/version.h>
#include<linux/types.h>
#include<linux/errno.h>
#include<asm/segment.h>
#include<asm/uaccess.h>

MODULE_LICENSE("GPL");
static int Open_times=0;//记录打开驱动的次数
static int test_major=0;
static char *Drive_buf="This is done by wusen , cs0705.";
static char User_put[81];
static ssize_t open_drive(struct inode *ind,struct file *fip){
//函数open_drive,打开驱动
Open_times++;//打开次数加一
return 0;
}
static ssize_t release_drive(struct inode *ind,struct file *fip){
//函数release_drive,用来关闭驱动
Open_times--;//打开次数减一
return 0;
}

static ssize_t read_drive(struct file *fip,char *buffer,size_tlength,loff_t *offset){//读驱动程序的函数
int bytes_read=0;
if(!(*User_put)){//如果没用用户进行写操作
while(length&&*Drive_buf){//当没有读完的时候
put_user(*(Drive_buf++),buffer++);//将buffer缓冲区中写入字符
length--;}
put_user('\0',buffer);//将字符串结束符写入buffer中
}
else{//当用户已经写字符串的时候
while(length&&User_put[bytes_read]){//当没有读完的时候
put_user(User_put[bytes_read],buffer++);//向buffer缓冲区中写入字符
length--;
bytes_read++;//记录读进去字符的个数
}
put_user('\0',buffer);//将字符串结束符写入buffer中
}
return 0;
}

static ssize_t write_drive(struct file *fip,const char*buffer, size_t length,loff_t *offset){//写驱动的函数write_drive
int i;
for(i=0;i<length&&i<80;i++,buffer++)
get_user(User_put[i],buffer);//从buffer中写入字符到User_put中
User_put[i]='\0';//将字符串结束符写入User_put中
return 0;
}

struct file_operations fops={
.read=read_drive,
.write=write_drive,
.open=open_drive,
.release=release_drive,
};

int init_module(){//初始化函数init_module
int result;
result=register_chrdev(0,"mydrive",&fops);//注册这个驱动
if(result<0)//如果注册错误,返回值为负
return result;
if(test_major==0)test_major=result;//将返回的注册号记入test_major中
return 0;
}

void cleanup_module(){
unregister_chrdev(test_major,"mydrive");
}

2.测试驱动程序的代码
#include"fcntl.h"
#include "unistd.h"
#include "stdio.h"
#include "sys/types.h"
#include "sys/stat.h"
#include <string.h>
int main(void){
int fd;
char *buf="Is there any wrong ?";
char buf2[81];
fd=open("/dev/mydrive",O_RDWR);//打开相应的驱动
if(fd==-1) {//打开失败,提示失败信息
printf("Read error!\n");
return 0;
}
read(fd,buf2,80);//从中读取字符,放在缓冲区buf2中
puts(buf2);//显示buf2中的内容
write(fd,buf,strlen(buf));//将buf中内容写入缓冲区
read(fd,buf2,80);
puts(buf2);
return 1;
}

求给出详细注释。还有不知道这个驱动程序到底意义何在?
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
liujiahi
2013-03-17 · TA获得超过1001个赞
知道小有建树答主
回答量:621
采纳率:66%
帮助的人:415万
展开全部
这个程序相当简单,就是实现一个虚拟的字符设备驱动,并写个程序验证一下读写操作。没什么实际意义。
个人感觉注释已经写得过于详细了,不知道还该注释什么,楼主具体哪里不明白,请追问。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jwq2011
2013-03-17
知道答主
回答量:57
采纳率:0%
帮助的人:25.1万
展开全部
CSDN有一大推的驱动分析,学习要自己动手,那样会更好点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式