【问题标题】:Does applying a device tree overlay trigger driver probing?应用设备树覆盖会触发驱动程序探测吗?
【发布时间】:2019-09-15 03:42:35
【问题描述】:

假设我有一个在 SoC 上运行的 Linux 系统(我的意思是连接到 FPGA 的 ARM CPU)。如果我用新的比特流重新编程 FPGA,连接到系统的设备现在已经改变。据我了解,此更改是使用设备树覆盖向操作系统发出的信号。

但是,对于设备型号,应用覆盖是否“做正确的事”?以下是应该发生的事情的简短列表:

  • 应删除旧比特流的旧 struct device 条目,并更新 sysfs
  • 应停止旧设备的驱动程序
  • 应注册新比特流的新 struct device 条目,sysfs 已更新
  • 不知何故,这些新的struct device 条目需要与struct device_driver 条目匹配(并且应该调用probe() 函数)

我尝试快速查看device tree overlay source code 以查看这些事件是否发生,但我无法真正理解发生了什么。

回顾一下:应用设备树覆盖(在正在运行的系统上)是否会对设备模型进行所有适当的更改并触发驱动程序的适当卸载和探测?

【问题讨论】:

    标签: linux-device-driver embedded-linux fpga device-driver


    【解决方案1】:

    我想我可能已经明白了。 of_overlay_apply 函数调用overlay_notify。设备树代码(通常以of 为前缀,代表开放固件)维护a list of callbacks。当您运行通知时,会调用这些回调。

    不同的设备/总线驱动程序可以将回调注册到通知回调的全局列表(请参阅here)。例如,i2c 驱动程序注册this function(通过init 函数中的this function call),这似乎完成了所有必要的驱动程序删除/注册。

    因此,“订阅”设备树覆盖通知并执行适当的操作似乎是驱动程序的工作。

    【讨论】:

    • 是和不是。如果为许多驱动程序做了某事,这几乎意味着框架或总线驱动程序或子系统库管理员的工作。
    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多