Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗?相关的知识,希望对你有一定的参考价值。
才开始学习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;
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,在真正的驱动中没太大意思,这里举例子告诉你写字符驱动大概的框架。真正的驱动要根据硬件等来写。
以上是关于Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗?的主要内容,如果未能解决你的问题,请参考以下文章