Linux中platform用于做什么,有什么特点和好处
Admin 2022-07-21 群英技术资讯 491 次浏览
在linux中,platform是一个虚拟总线,与真实的“spi/sdio/usb/pcie”等总线对应;platform能够把硬件和软件分离出来,platform所描述的资源有一个共同点是在CPU的总线上直接取址,平台设备会分到一个名称以及一系列诸如地址和中断请求号之类的资源。
本教程操作环境:linux7.3系统、Dell G3电脑。
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)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
CentOS下搭建tomcat集群全记录
CentOS7.3下部署Rsyslog+LogAnalyzer+MySQL中央日志服务器
方法:1、用“stat 文件路径”命令获取文件的inode号;2、用“df -h”获取文件所在的磁盘路径;3、根据获取的文件inode号和磁盘路径,用“debugfs -R 'stat' 磁盘路径”命令获取文件创建时间。
在linux中,可以利用mcelog来查看硬件错误;mcelog是用于检查硬件错误的工具,可根据错误导致的热重启或硬重启来获取错误,热重启的错误信息会被捕获到,硬重启的错误捕获不到,可用“yum install mcelog”命令进行安装。
CentOS7 搭建docker registry 私库
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008