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

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

总结

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

相关文章
|
24天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
171 5
|
11天前
|
缓存 监控 Linux
|
29天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
81 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
弹性计算 Linux 数据库
阿里云国际版如何迁移Linux云服务器系统盘中的数据
阿里云国际版如何迁移Linux云服务器系统盘中的数据
|
18天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
2月前
|
存储 Linux 开发工具
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
3月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
43 6
|
3月前
|
Linux 开发工具
linux下使用gcp拷贝数据的时候显示进度条
linux下使用gcp拷贝数据的时候显示进度条
28 2
|
2月前
|
Linux API 开发工具
Linux内核开发流程指南 - 8. 获取更多信息【ChatGPT】
Linux内核开发流程指南 - 8. 获取更多信息【ChatGPT】