前言
本文我讲给大家解释驱动开发中的一些辅助信息的作用。
一、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目录下可以查看,节点名字取决于我们。
总结
这些辅助信息可以帮我们自动的去创建设备节点,如果不使用这些辅助信息的话只能自己手工的去创建节点。