Linux —— 驱动——platform平台总线

platform平台总线是Linux内核中一个重要的概念,主要用于管理那些不通过传统物理总线(如USB、I2C、SPI等)连接的设备,特别是SoC(System on Chip,片上系统)内部集成的外设。以下是对platform平台总线的详细介绍:

一、基本概念

定义:platform平台总线是Linux内核为了保持设备驱动的统一性而虚拟出来的一条总线。它并非物理上存在,而是一种软件抽象,用于连接设备与驱动。
目的:解决嵌入式系统中,部分设备(如SoC内部集成的外设)不依附于传统物理总线的问题,使得所有设备都能通过统一的机制进行管理和注册。

二、主要组成部分

platform_device:表示platform总线下的设备。每个platform_device都包含设备的名称、ID、资源(如内存地址、中断号等)以及设备特定的数据。
platform_driver:表示驱动程序,用于与platform_device进行匹配并控制设备。每个platform_driver都包含探测(probe)函数、移除(remove)函数等,用于设备的初始化和卸载。

三、工作流程

(1)系统启动时注册platform总线:在系统启动过程中,Linux内核会在bus系统中注册platform总线,为其后续的设备和驱动管理提供基础。
bus_type结构体:

(2)注册platform_device:内核移植人员负责将SoC内部集成的外设注册为platform_device,包括设备的名称、ID、资源等信息。

  • name:设备的名称,用于与驱动程序进行匹配。
  • id:设备的ID号,用于区分相同名称下的不同设备实例。匹配名字,-1时不匹配id_entryid_entry
  • dev:一个嵌套的device结构体,包含了设备的通用设备信息,如设备在设备模型中的抽象表示。
  • num_resources 和 resource:分别表示设备资源的数量和指向资源描述符数组的指针,这些资源包括设备的物理地址、中断号等。

  • start:资源的起始地址或编号。对于内存资源,这通常是内存的起始物理地址;对于I/O端口资源,这是端口的起始编号;对于中断资源,这是中断号。
  • end:资源的结束地址或编号。这定义了资源范围的上限,确保驱动程序不会超出设备所占用的资源范围。
  • name:资源的名称。这是一个字符串,用于标识资源,但通常不直接用于驱动程序的匹配或资源请求。
  • flags:资源的类型和属性。这个字段是一个位掩码,用于指示资源的具体类型和可能的其他属性。Linux内核定义了多个宏来表示不同类型的资源,如IORESOURCE_MEM(内存资源)、IORESOURCE_IO(I/O端口资源)、IORESOURCE_IRQ(中断资源)等。此外,还可以设置其他标志位来表示资源的特定属性,如IORESOURCE_PREFETCH(可预取的内存资源)等。

  • id_entry:用于匹配设备和驱动程序的ID结构体指针。
  • pdriver:指向设备对应的平台驱动程序的指针。


(3)注册platform_driver:设备驱动开发人员负责编写并注册platform_driver,包括探测函数、移除函数等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值