当前位置: 首页 > news >正文

Linux驱动14 --- 平台设备总线

目录

 一、设备树节点的多个属性值

二、平台设备总线

2.1 介绍

        平台设备总线

2.2 匹配设备树 --- 必须掌握

        驱动端注册

        驱动端注销

        资源的获取

2.3 设备端和驱动端都写 --- 了解

        设备端

        设备端注册

        设备端注销

        驱动端

        获取资源


一、设备树节点的多个属性值

二、平台设备总线

2.1 介绍

        平台设备总线

                用于解决内核冗余问题的方式

                        设备树也是解决冗余的

                平台设备总线会将驱动开发再次分割为两层

                        驱动层,设备层

                设备层去提供设备信息 --- 设备树

                驱动层去根据设备信息完成驱动的编写

                        驱动的编写 --- 生成设备文件,描述文件接口,控制硬件设备的运行

                之前做的就是驱动端 ,平台设备总线给我们了一个规范

                        从设备树获取节点信息的规范

                        在加入设备树之后 --- 核心就是获取节点信息

                        获取节点信息的核心 --- 找到节点

2.2 匹配设备树 --- 必须掌握

        设备端不需要写,设备树就是设备端,只需要完成驱动端

        关键字:platform

        头文件:#include <platform_device.h>

        驱动端注册

        函数原型

                int platform_driver_register(struct platform_driver *)

        函数参数

struct platform_driver{         //平台设备总线驱动端核心结构体//核心作用 --- 匹配设备树节点信息int (*probe)(struct platform_device *)         //匹配成功之后执行的第一个函数int (*remove)(struct platform_device *)         //调用卸载函数会执行这个函数中的内容struct device_driver driver{const char *name;         //驱动端和设备端匹配方式之一 ,但是不是我们匹配设备树的方式struct module *owner;        //固定填写const struct of_device_id *of_match_table{char name[32];         //设备节点的名字char compatible[128];         //设备节点中的 compatible 属性}}} 

        函数返回值

                成功返回 0,失败返回非 0

                但是在实际应用中,这个返回值不准确

                之前遇到的成员都是指针类型,现在有了一个数组类型

                        数组只有在定义的时候可以直接给数组赋值

        在使用平台设备总线的时候,加载函数一般只做驱动端匹配(核心结构体的注册),卸载函数一般只做驱动的注销

        原本加载函数中的内容需要写在(*probe)函数,原本卸载函数的内容就写在(*remove)函数

        驱动端注销

        函数原型

                void platform_driver_unregister(struct platform_driver *)

        函数参数

                同上

        资源的获取

        (*probe)函数的参数

struct platform_device{struct device dev{struct device_node *of_node;}} 

2.3 设备端和驱动端都写 --- 了解

        用户需要完成两个.c 文件,总共两个.ko 文件

        设备端需要用户填充具体的资源信息

        驱动端匹配设备端,获取设备端的资源信息

        只有驱动端和设备端匹配成功才可以执行 --- (*probe)函数

        和匹配设备树的区别

                资源 --- 结构体填充

                匹配方式

        设备端

        设备端注册

        函数原型

                int platform_device_register(struct platform_device *)

        函数参数 

struct platform_device{         //平台设备总线设备端核心结构体const char *name; //平台设备总线一般方法的匹配名字int id;         //固定填-1struct device dev;{void(*release)(struct device *dev)         //无所谓,给个空函数}u32 num_resources;         //传递资源的数量struct resource *resource;{resource_size_t start;         //资源的起始地址 --- 可以用来传递有效电平resource_size_t end;         //资源的结束地址 --- 可以用来传递 GPIO 号const char *name;         //传递和不传递都可以 --- 可以用来传递设备文件名unsigned long flags;         //资源的类型 ,使用的是内存资源 --- IORESOURCE_MEM}} 

        函数返回值

                成功返回 0,失败返回负数

        其中包括了资源的填充

        设备端注销

        函数原型

                void platform_device_unregister(struct platform_device *)

        驱动端

        获取资源

        函数原型                

                struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num)

        函数参数

                struct platform_device *:(*probe)的参数

                type:类型 --- 获取资源的类型 --- IORESOURCE_MEM

                num:获取资源的下标

                           可以一次性传递多个资源 --- 下标从 0 开始

        函数返回值

                成功返回资源核心结构体 ,失败返回 NULL    

http://www.xdnf.cn/news/1138951.html

相关文章:

  • JPA 与 MyBatis-Plus 数据库自增主键实现方案
  • GraphQL的N+1问题如何被DataLoader巧妙化解?
  • 【人工智能99问】梯度消失、梯度爆炸的定义、后果及规避手段?(7/99)
  • 使用位运算优化 Vue.js 应用:高效状态管理技巧
  • deep learning(李宏毅)--(六)--loss
  • 虚拟化测试工具Parasoft Virtualize如何为汽车企业提供仿真测试?
  • Helm-k8s包管理工具(一)核心概念、helm工作目录
  • 【Servo】伺服驱动器扫频功能方案文档
  • 有痛呻吟!!!
  • Redis面试相关问题总结
  • 离散与组合数学 杂记
  • 学习设计模式《十八》——备忘录模式
  • AI安全威胁之MCP Server投毒攻击实践
  • 深入理解进程等待:wait的简化与waitpid的灵活性
  • centos中新增硬盘挂载文件夹
  • 【FFmpeg 快速入门】本地播放器 项目
  • 林曦词典|文质彬彬
  • 物联网主机在化工园区安全风险智能化管控平台中的应用
  • mongodb 入门级别操作
  • 搞清MVCC
  • 优化 CSS 性能
  • 面试Redis篇-深入理解Redis缓存击穿
  • Selenium 启动的浏览器自动退出问题分析
  • 全面升级!WizTelemetry 可观测平台 2.0 深度解析:打造云原生时代的智能可观测平台
  • 杭州卓健信息科技有限公司 Java 面经
  • web前端渡一大师课 CSS属性计算过程
  • 损失函数的等高线与参数置零的关系
  • 从AWS MySQL数据库下载备份到S3的完整解决方案
  • Linux操作系统之线程:线程概念
  • mongodb-org-mongos : Depends: libssl1.1 (>= 1.1.1) but it is not installable