Linux驱动开发 数据的传输和辅助信息的作用
【摘要】 @TOC 前言本文我讲给大家解释驱动开发中的一些辅助信息的作用。 一、APP和驱动间传输数据 APP和驱动间传输数据方式APP无法直接访问内核:否则内核态容易被破坏了。如果APP直接去访问内核,随意的去设置了寄存器可能将内核破环导致系统崩溃,所以APP是无法直接得到内核里面的数据的。APP也就无法传递数据给驱动,驱动属于内核的一部分。驱动也无法直接方位APP的变量。驱动要访问APP的数据,必...
@TOC
前言
本文我讲给大家解释驱动开发中的一些辅助信息的作用。
一、APP和驱动间传输数据
APP和驱动间传输数据方式
APP无法直接访问内核:否则内核态容易被破坏了。
如果APP直接去访问内核,随意的去设置了寄存器可能将内核破环导致系统崩溃,所以APP是无法直接得到内核里面的数据的。
APP也就无法传递数据给驱动,驱动属于内核的一部分。
驱动也无法直接方位APP的变量。
驱动要访问APP的数据,必须使用这2个函数:
1.copy_to_user
2.copy_from_user
copy_to_user
在驱动中可以调用copy_to_user将数据传输到应用程序。
static ssize_t hello_read (struct file *file, char __user *buf, size_t size, loff_t *offset)
{
int err;
printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
copy_to_user(buf, &ker_val, 4);
return 4;
}
copy_from_user
在驱动中可以调用copy_from_user去从应用程序中得到数据。
static ssize_t hello_write (struct file *file, const char __user *buf, size_t size, loff_t *offset)
{
int err;
printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
copy_from_user(&ker_val, buf, 4);
return 4;
}
二、class_create
用法
static struct class *class_for_hello;
class_for_hello = class_create(THIS_MODULE, "hello_class"); /* /sys/class/hello_class/ */
使用class_create可以创建一个类,为后面创建device提供信息。
三、device_create
用法
device_create(class_for_hello, NULL, MKDEV(major, 0), NULL, "myhello"); /* /dev/myhello */
使用device_create可以自动的帮我们创建一个设备节点,创建的设备节点在/dev目录下可以查看,节点名字取决于我们。
总结
这些辅助信息可以帮我们自动的去创建设备节点,如果不使用这些辅助信息的话只能自己手工的去创建节点。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)