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

五、平台设备与平台驱动

一、概述

  1. 平台总线是一个虚拟总线,抽象层面上外设可以通过平台总线与CPU相连
  2. 平台设备和平台驱动就像一个人字一样挂在平台总线两侧,当一个新的平台设备或平台驱动被注册进系统,会在另一条枝干上搜索对应的平台驱动或设备,完成初始化
  3. 平台设备在/sys/bus/platform/devices下会有相应的文件对应
  4. 平台驱动在/sys/bus/platform/drivers下会有相应的文件对应

二、平台设备关键API和结构体

// 注册一个平台设备
int platform_device_register(struct platform_device *pdev);
// 注销一个平台设备
void platform_device_unregister(struct platform_device *pdev);
// platform_device结构体
struct platform_device {const char	*name;              // 名字int		id;                     // IDstruct device	dev;            // 继承的deviceu32		num_resources;          // 资源数量struct resource	*resource;      // 资源结构体指针const struct platform_device_id	*id_entry;      // 设备ID表指针...
};
// 资源结构体
struct resource {resource_size_t start;          // 资源起始地址resource_size_t end;            // 资源结束地址const char *name;               // 名称unsigned long flags;            // 标志位unsigned long desc;             // 描述信息struct resource *parent, *sibling, *child;  // 父资源、兄弟资源、子资源
};
// 资源标志位
#define IORESOURCE_IO		0x00000100	/* PCI/ISA I/O ports */
#define IORESOURCE_MEM		0x00000200
#define IORESOURCE_REG		0x00000300	/* Register offsets */
#define IORESOURCE_IRQ		0x00000400
#define IORESOURCE_DMA		0x00000800
#define IORESOURCE_BUS		0x00001000

三、平台驱动相关API与结构体

// 注册平台驱动
int platform_driver_register(struct platform_driver *driver);
// 注销平台驱动
void platform_device_unregister(struct platform_device *pdev);
// platform_driver结构体
struct platform_driver {int (*probe)(struct platform_device *);                      // 函数指针int (*remove)(struct platform_device *);void (*shutdown)(struct platform_device *);int (*suspend)(struct platform_device *, pm_message_t state);int (*resume)(struct platform_device *);struct device_driver driver;    // 结构体内有name成员,成员与platform_device的name成员匹配后进入probe函数const struct platform_device_id *id_table;      // 用于driver和device的匹配,优先级高于name
};

四、其他API与结构体

// 从platform_device结构体中遍历寻找type匹配的第num个资源,返回resource结构体的指针
struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num);
http://www.rkmt.cn/news/53520.html

相关文章:

  • linux c 开发 工具
  • Token快过期的三种续期方案 - 详解
  • 游戏统一包模式下活动营销系统后续的发展方向
  • tryhackme-网络安全基础-网络- 网络概念-24
  • Pandas GroupBy 的 10 个实用技巧
  • Lazarus使用cef打开文件和下载设置
  • Pjudge #21741. 【NOIP Round #5】青鱼和区间 题解
  • 完全平方和的推广
  • 2025.11.18
  • CSS学习笔记(六):CSS预处理器 - 实践
  • linux c web
  • 2025年11月免手扶吸奶器,穿戴式吸奶器,百元吸奶器品牌测评排名,清洁便捷优选!
  • 基于Redis的滑动窗口限流-Golang实现
  • 实用指南:《中国电力产业数字化》深度解析与前沿展望(下)——中国电力数字化转型路线图:SPARK 融合平台的设计与落地方案
  • Mac 怎么安装 PyCharm 2020.1.dmg?超简单教程(附安装包)
  • C# 蓝牙远程控制应用:从零达成移动设备与硬件的无线交互
  • AI热潮下的冷思考:从估值泡沫到就业现实
  • 杨辉三角形
  • 20232305 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • 春秋云境Apache OFBiz 目录遍历致代码执行漏洞 CVE-2024-36104
  • 在 Ubuntu 20.04 上安装 gcc/g++ 11,并使用 update-alternatives 管理多个版本。
  • Doris学习笔记
  • Spring AI Alibaba 项目源码学习(十一)-Hook
  • ftp,sftp,scp,tftp几种简单对比,以及python实现ftp功能
  • 实用指南:深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发
  • linux burpsuite
  • DS trick record 1
  • 2025年11月成都合同律师,成都律师,成都婚姻律师事务所推荐,资深经验与品牌保障口碑之选!
  • (CF2166) Codeforces Round 1064 (Div. 2)
  • 详细介绍:【C++庖丁解牛】哈希表/散列表的设计原理 | 哈希函数