Linux驱动开发 数据的传输和辅助信息的作用

举报
yd_274589494 发表于 2023/07/26 12:12:16 2023/07/26
【摘要】 @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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。