Linux设备驱动--platform虚拟总线

本文介绍了Linux内核中resource结构体和资源树,重点阐述了platform机制。它将设备资源注册进内核统一管理,用于描述SOC片上资源,适用于与内核运行依赖性不大的外围设备。还说明了Platform设备概念及开发步骤,包括定义和注册设备、实现驱动结构体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、resource结构体:在内核中表示了一个设备使用的资源,描述一个具体的硬件。包括:在总线上的地址,资源名字等

/*
 * Resources are tree-like, allowing
 * nesting etc..
 */
struct resource {
	resource_size_t start;        /* 这段资源的起始 */
	resource_size_t end;          /* 这段资源的结束 */
	const char *name;             /* 这个资源的名字,方便用户查看 */
	unsigned long flags;          /* 标记属于那种资源 */
	struct resource *parent, *sibling, *child;    /* 作为树的节点,链入树中 */
};

2、资源树,通常resource是嵌套的,类似于设备树。

树根:

struct resource iomem_resource = {
	.name	= "PCI mem",
	.start	= 0,
	.end	= -1,
	.flags	= IORESOURCE_MEM,
};

3、platform_device

platform机制:将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时,通过platform_device提供了标准接口进行申请并使用。

platform 是一个虚拟的地址总线,相比 PCI、USB,它主要用于描述SOC上的片上资源。platform 所描述的资源有一个共同点:在CPU 的总线上直接取址。平台设备会分到一个名称(用在驱动绑定中)以及一系列诸如地址和中断请求号(IRQ)之类的资源。

总结,通常情况下只要和内核本身运行依赖性不大的外围设备,相对独立的,拥有各自独自的资源(地址总线和IRQs),都可以用platform_driver实现。如:LCD控制器,网卡控制器、USB控制器、UART控制器、IIC控制器、GPIO控制器等,都可以用platfrom_driver写,而timer,irq等小系统之内的设备则最好不用platfrom_driver机制。

并不是与字符设备、块设备并列的概念,而是Linux系统提供的一种管理设备的手段,所有SOC系统中集成的独立的外设控制器、挂接在SOC内存空间的外设等都属Platform设备。如把内部集成的I2C、PTC、SPI、LCD、看门狗控制器都归纳为Platform设备,而这些设备本身就是字符设备。由此可见Platform中的设备是不分字符设备还是块设备。



 

 

 

开发步骤:

  1. 设备:定义platform_device结构体,并初始化  ; 向系统注册设备:platform_device_register
  2. 驱动:实现platform_driver结构体,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值