我有一个带有spi到can芯片的arm64 linux自定义板,芯片有时是mcp2515,有时是mcp2518fd.But,它们使用不同的驱动程序(mcp251x.ko/mcp25xxfd.ko)。这是我的dts:
&spi4 {
status = "okay";
canfd@0 {
compatible = "microchip,mcp2515", "microchip,mcp2518fd";
reg = <0x0>;
clocks = <&clk20m>;
#interrupts = <&gpio3 RK_PB6 IRQ_TYPE_LEVEL_LOW>;
interrupt-parent = <&gpio3>;
interrupts = <RK_PB6 IRQ_TYPE_LEVEL_LOW>;
spi-max-frequency = <4000000>;
};
};
问题是,如果芯片是mcp2518fd,内核只匹配第一个兼容的“微芯片,mcp2515,然后驱动程序(mcp251x.ko)探针失败。
我能修改dts或驱动程序src以满足这一需求吗?如果驱动程序探测失败和内核匹配下一个兼容?
或者唯一的解决方案是将两个驱动程序合并成一个?
发布于 2022-08-18 09:54:33
兼容的字符串应该是从最特定到最一般的层次顺序,例如为特定的芯片指定ID,然后是具有公共编程接口的“系列”相关芯片的ID (通常比特定于芯片的编程接口具有更少的特性)。这在这种情况下不适用,因为microchip,mcp2515
和microchip,mcp2518fd
指的是没有分层关系的不同的特定芯片。
设备树节点需要指定安装哪种SPI到CAN控制器.这意味着您需要为每种类型的板加载不同的.dtb文件,或者有一个基本的.dtb文件,并在基本的.dtb文件之上加载不同的“设备树覆盖”(.dtbo)文件。引导加载程序可以根据引导加载器中的某些存储设置选择不同的.dtb文件。不同的.dtbo文件可以分别由引导加载程序或Linux操作系统根据引导加载程序中的某些存储设置或在Linux操作系统中加载。
可以在运行时使用"DT-Overlay configfs接口“(CONFIG_OF_CONFIGFS
)在Linux操作系统中加载不同的设备树覆盖,但这需要修补内核源。这些补丁可以在主题/覆盖上找到。
https://stackoverflow.com/questions/73397334
复制相似问题