linux中platform是什么

49次阅读
没有评论

共计 2110 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要讲解了“linux 中 platform 是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“linux 中 platform 是什么”吧!

在 linux 中,platform 是一个虚拟总线,与真实的“spi/sdio/usb/pcie”等总线对应;platform 能够把硬件和软件分离出来,platform 所描述的资源有一个共同点是在 CPU 的总线上直接取址,平台设备会分到一个名称以及一系列诸如地址和中断请求号之类的资源。

本教程操作环境:linux7.3 系统、Dell G3 电脑。

linux 中 platform 是什么意思

platform 为虚拟总线,与真实的 spi/sdio/usb/pcie 等总线对应

逻辑总线的的一个重要功能是发现设备并且找到合适的驱动以操作这个设备。

platform 总线是一种虚拟的逻辑总线,满足逻辑互联功能。为了统一管理设备,platform 可以把物理上不存在总线的一类设备,用平台总线统一把它们管理起来。

常见的总线如 USB,SPI,UART,PCI,I2S 等总线,是在物理上实实在在存在的总线。Linux 系统为这类总线设计了一种统一管理它们的方法,即 bus。同时也为在物理上没有总线的设备也统一设计了 platform 总线,所以 Linux 内核设计者就设计了 platform 总线,也就是说,plarform 总线就是为了 SoC 内部设备在物理上没有总线的设备设计的,它统一归属 bus 总线一类。

这样做的好处是,设备(device)端代码的编写者只关心具体的硬件部分,设备共性的部分(稳定不变的部分)被内核设计者完成了,这样降低了驱动编写的难度。

通过 platform 总线,可以将设备属性(也叫数据)和驱动分离,这样可以使用相同的驱动支持同一功能核心硬件的不同设备。这样避免了一个设备就需要一个驱动的现象,降低了重复性劳动。

扩展知识

platform 平台总线相关定义

platform 平台总线相关的对象定义在文件 drivers/base/platform.c 中。这个文件中实现了平台总线对象和对象操作方法方面的内容。

两个重要的数据结构体

1、platform_driver

这是内嵌一个 device_driver 的结构体对象,其中定义了操作对象的方法。

2、platform_device

它是一个内嵌了 device 结构体对象,其中定义了设备描述资源的属性。

具体对象定义如下:

1、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; // 驱动的通用属性
const struct platform_device_id *id_table; // 设备ID表
};

platform_device 对象对定义:

struct platform_device 
const char* name;  // 平台总线中设备的名字, 在平台总线下有多个设备,每个设备都有自己的名称
intid;   // 设备的排序
struct devicedev;  // 所有设备通用的属性
u32num_resources;  // 设备资源,如 IO 等一些外设等的个数
struct resource* resource; // 设备资源的首地址,和上面的个数 num_resources 一起构成一个数组来表示这个资源
const struct platform_device_id*id_entry; // 设备ID表,表示同一种类型的几个设备的ID号,数组表示。struct pdev_archdataarchdata; /* arch specific additions */// 用户自定义数据,扩展数据
};

注册平台总线驱动的函数:

int platform_driver_register(struct platform_driver *drv)

注册平台总线设备的函数:

int platform_device_register(struct platform_device *pdev)

感谢各位的阅读,以上就是“linux 中 platform 是什么”的内容了,经过本文的学习后,相信大家对 linux 中 platform 是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-29发表,共计2110字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)