Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗?

才开始学习Linux设备驱动开发,借的这本书有代码但是没有注释,下面这个驱动的意思就懂不了,希望各位大神指点指点。万分感谢下面的都是我编写的一个字符设备驱动的代码,请问s... 才开始学习Linux设备驱动开发,借的这本书有代码但是没有注释,下面这个驱动的意思就懂不了,希望各位大神指点指点。万分感谢
下面的都是我编写的一个字符设备驱动的代码,请问static int read_test()这个函数开始到static void release_test()这个函数中的参数和内部代码的意义是什么?
万分感谢。

采纳之前会加分到100,谢谢

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/errno.h>
#include <asm/segment.h>
#include <asm/uaccess.h>
#include <linux/module.h>

unsigned int test_major = 0;

static int read_test(struct inode *node,struct file *fle,char *buf,int count)
{
int left;
if (access_ok(VERIFY_WRITE, buf, count))
{
for (left = count; left > 0; left--)
{
_put_user('a',buf);
buf ++;
}
}
return count;
}

static int write_test(struct inode *node, struct file *fle, char *buf, int count)
{
return count;
}

static int open_test(struct inode *inode,struct file *file)
{
try_module_get(THIS_MODULE);
return 0;
}

static void release_test(struct inode *inode, struct file *file)
{
module_put(THIS_MODULE);
}

struct file_operations test_fops =
{
.owner = THIS_MODULE,
.read = read_test,
.write = write_test,
.open = open_test,
.release = release_test,
};

int init_module()
{
int result;
result = register_chrdev(0,"test,&test_fops");
if (result < 0)
{
printk(KERN_INFO "dddddddddddddddd");
return result;
}
return 0;
}
展开
 我来答
jack572009833
推荐于2016-10-08 · 超过19用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:41.9万
展开全部
上层的read函数最终会调用read_test,write亦是如此。

read_test中:

if是判断是否准备好;for循环是来将要读取的count个数据写到buf(用户空间)中去,这里写的是‘a’.

release_test:

主要作用是将引用计数减1;引用计数是用来统计使用该模块的次数的。由此推断在open中有引用计数加一。这样就将资源的释放交给了内核,当引用计数为零时,内核将释放该驱动申请的资源。
追问
谢谢,再请教一下,
read_test中:
_put_user()这个函数是用来做什么的?
将count个数写到buf中的意义是什么?

read_test和write_test函数写出来的意义是什么?
追答
_put_user()是用来将内核空间的数据拷到用户空间。

count就是要拷贝的字节数,你和上层的read函数中的参数对比下就知道了。

他写的这两个函:read_test和write_test,在真正的驱动中没太大意思,这里举例子告诉你写字符驱动大概的框架。真正的驱动要根据硬件等来写。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式