我目前正在使用 Linux(基于 Freescale i.MX6)开发嵌入式设备。我的平台启用了 DT(即所有设备实例化都源自扁平设备树,而不是板初始化源文件)。
在这种情况下,我需要实例化一个设备,该设备使用尚未移植到 DT 的驱动程序……这可能吗?我的意思是:是否可以混合通过设备树实例化的设备和以旧方式实例化的设备(例如,通过 i2c_register_board_info
用于 I2C 设备)?
如果是这样,是否也可以使用通常的方式将平台数据传递给旧式驱动程序(例如,对于 I2C 设备,通过 struct i2c_board_info
)?或者,作为基于平台 DT 的平台,struct i2c_board_info
中的 .platform_data
字段将始终为 NULL
?
您知道网络上有一些示例吗?
谢谢。
最佳答案
我认为您希望以传统方式实例化平台驱动程序,而不是与设备树绑定(bind)。
你应该引用下面这个函数和内核中的用法。
static inline struct platform_device *platform_device_register_data(
struct device *parent, const char *name, int id,
const void *data, size_t size)
引用:https://elixir.bootlin.com/linux/latest/source/include/linux/platform_device.h#L160
可以调用此函数来注册任何平台驱动程序,并且平台数据可以从从设备树 (DT) 探测到的父驱动程序传递给此驱动程序。
关于Linux 驱动程序 : device tree and old-style driver instantiation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32225100/