96SEO 2026-02-20 02:55 0
Device”的设备内核是这样描述它们的Documentation/driver-model/platform.txt

概括来说Platform设备包括基于端口的设备已不推荐使用保留下来只为兼容旧设备legacy连接物理总线的桥设备集成在SOC平台上面的控制器连接在其它bus上的设备很少见。
等等。
bus直接寻址例如在嵌入式系统常见的“寄存器”。
因此由于这个共性内核在设备模型的基础上device和device_driver对这些设备进行了更进一步的封装抽象出paltform
platform总线是虚拟的平台总线是linux设备驱动模型为了保持设备驱动的统一性而虚拟出来的总线。
总线将设备和驱动绑定系统每注册一个设备的时候会寻找与之匹配的驱动相反系统每注册一个驱动的时候会寻找与之匹配的设备而匹配由总线完成。
可以说paltform设备对Linux驱动工程师是非常重要的因为我们编写的大多数设备驱动都是为了驱动plaftom设备。
本文我们就来看看Platform设备在内核中的实现。
include/linux/platform_device.h
Driver基于底层device_driver模块抽象出Platform
include/linux/platform_device.h
dev真正的设备Platform设备只是一个特殊的设备因此其核心逻辑还是由底层的模块实现。
id_auto指示在注册设备时是否自动赋予ID值不需要人为指定啦可以懒一点啦。
num_resources、resource该设备的资源描述由struct
resourceinclude/linux/ioport.h结构抽象。
在Linux中系统资源包括I/O、Memory、Register、IRQ、DMA、Bus等多种类型。
这些资源大多具有独占性不允许多个设备同时使用因此Linux内核提供了一些API用于分配、管理这些资源。
resource组织这些资源如名称、类型、起始、结束地址等并保存在该设备的resource指针中即可。
然后在设备probe时设备需求会调用资源管理接口分配、使用这些资源。
而内核的资源管理逻辑可以判断这些资源是否已被使用、是否可被使用等等。
include/linux/platform_device.h
device_driver非常类似无非就是提供probe、remove、suspend、resume等回调函数这里不再细说。
of_match_table、acpi_match_table
内核会在合适的时机检查device和device_driver的名字如果匹配则执行probe。
其实除了名称之外还有一些宽泛的匹配方式例如这里提到的各种match
Device主要提供设备的分配、注册等接口供其它driver使用常用的包括
platform_device_register(struct
platform_device_unregister(struct
*platform_get_resource_byname(struct
platform_device_add_resources(struct
中添加自定义的数据保存在pdev-dev.platform_data指针中
platform_device_add_data(struct
platform_driver_register(struct
platform_driver_unregister(struct
platform_device_register一次注册单个设备这部分一般在
error;early_platform_cleanup();error
bus_register(platform_bus_type);
(error)device_unregister(platform_bus);return
EXPORT_SYMBOL_GPL(platform_bus);
的总线设备其他的platform设备都是它的子设备所以这里先注册这个设备
driver因为他们俩注册肯定是有先后顺序的所以需要看看源代码
platform_driver_register(struct
(drv-shutdown)drv-driver.shutdown
EXPORT_SYMBOL_GPL(platform_driver_register);
drv-shutdown))printk(KERN_WARNING
{put_driver(other);printk(KERN_ERR
----------------------------(2)if
(ret)bus_remove_driver(drv);return
EXPORT_SYMBOL_GPL(driver_register);
kset_find_obj(bus-p-drivers_kset,
EXPORT_SYMBOL_GPL(driver_find);看看核心函数
.........list_for_each_entry(k,
}kset_find_obj通过循环操作根据我们给的名字name在指定的bus中循环对比查看是否有相同的名字name这个name存放在kobj中。
其实这就是一个循环链表的遍历过程
通过我们给定的name在某bus中寻找驱动比对名字看看驱动是否已经装载
driver_find拿到了drv-name和drv-bus开始找驱动
通过driver_find传递的bus-p-drivers_kset利用list_for_each_entry遍历kset循环链表。
kset结构体中有循环链表指针next和prev
:如果找到则返回device_driver的指针如果没有找到则返回了NULL。
....klist_init(priv-klist_devices,
drv-bus-p-drivers_autoprobe其实就是
platform_bus_type-subsys_private-drivers_autoprobe
bus_kset;priv-subsys.kobj.ktype
bus_ktype;priv-drivers_autoprobe
-EINVAL;klist_iter_init_node(bus-p-klist_devices,
data);klist_iter_exit(i);return
*/device_lock(dev-parent);device_lock(dev);if
(!dev-driver)driver_probe_device(drv,
(dev-parent)device_unlock(dev-parent);return
platform_match_id(pdrv-id_table,
(!device_is_registered(dev))return
drv-name);pm_runtime_get_noresume(dev);pm_runtime_barrier(dev);ret
drv);pm_runtime_put_sync(dev);return
platform_device_register(struct
{device_initialize(pdev-dev);return
EXPORT_SYMBOL_GPL(platform_device_register);
(!pdev-dev.parent)pdev-dev.parent
pdev-id);elsedev_set_name(pdev-dev,
EXPORT_SYMBOL_GPL(platform_device_add);
get_device(dev-parent);setup_parent(dev,
(platform_notify)platform_notify(dev);error
device_create_sys_dev_entry(dev);if
devtattrError;devtmpfs_create_node(dev);}
device_add_class_symlinks(dev);if
DPMError;device_pm_add(dev);bus_probe_device(dev);
https://blog.csdn.net/Richard_LiuJH/article/details/45825333
https://blog.csdn.net/Richard_LiuJH/article/details/48245715
https://blog.csdn.net/Hansomewang/article/details/78969006
https://blog.csdn.net/fml1997/article/details/77622860
https://blog.csdn.net/thl789/article/details/6723350
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback