微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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


前言

本文我讲给大家解释驱动开发中的一些辅助信息的作用。

一、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目录下可以查看,节点名字取决于我们。

总结

这些辅助信息可以帮我们自动的去创建设备节点,如果不使用这些辅助信息的话只能自己手工的去创建节点。

原文地址:https://www.jb51.cc/wenti/3280905.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐