码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux驱动开发 数据的传输和辅助信息的作用


    文章目录

    • 前言
    • 一、APP和驱动间传输数据
      • APP和驱动间传输数据方式
      • copy_to_user
      • copy_from_user
    • 二、class_create
      • 用法
    • 三、device_create
      • 用法
    • 总结


    前言

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

    一、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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二、class_create

    用法

    static struct class *class_for_hello;
    class_for_hello = class_create(THIS_MODULE, "hello_class"); /* /sys/class/hello_class/ */
    
    • 1
    • 2

    使用class_create可以创建一个类,为后面创建device提供信息。

    三、device_create

    用法

    device_create(class_for_hello, NULL, MKDEV(major, 0), NULL, "myhello"); /* /dev/myhello */
    
    • 1

    使用device_create可以自动的帮我们创建一个设备节点,创建的设备节点在/dev目录下可以查看,节点名字取决于我们。

    总结

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

  • 相关阅读:
    集群中用Memcached来实现session共享
    关键词锚文本实现网站链接优化
    图文详解线性回归与局部加权线性回归+房价预测实例
    hadoop宕机的处理方法
    centos常用命令大全
    uni.app 使用 mixins 技术统一注入小程序页面分享到好友,分享朋友圈功能
    ElasticSearch Client问题整理2
    Angular-04:指令
    [创业-33]:股权、期权、期股的区别
    java-net-php-python-jspm校园闲置物品拍卖系统计算机毕业设计程序
  • 原文地址:https://blog.csdn.net/m0_49476241/article/details/125565196
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号