如何遍历 linux 设备树节点中的多个寄存器?

how to loop over multiple registers in linux device tree node?

我实现了一个通用驱动程序,在驱动程序中我只想遍历每个已注册的设备并做一些事情。
我的驱动程序是通用的,所以我不想提前知道有关这些设备的任何信息。

我有一些设备树节点:

uart0: uart@1000000 {
    compatible = "generic-driver";
    reg = <0x1000000 0x1000>,<0x1001000 0x1000>,<0x1002000 0x1000>;  
}; 

uart1: uart@2000000 {
    compatible = "generic-driver";
    reg = <0x2000000 0x1000>,<0x2001000 0x1000>,<0x2002000 0x1000>;  
}; 

在驱动程序中我知道如何使用 platform_get_resource 获得第一个偏移量和大小,但是如果我有多个范围怎么办?
我看到了一个通过添加注册名来获取它的选项:

reg = <0x2000000 0x1000>,<0x2001000 0x1000>,<0x2002000 0x1000>;
reg-names = "uart0_0","urat0_1","uart0_2";

所以在驱动程序中我可以使用 platform_get_resource_byname,但是我需要在驱动程序中提前知道 regs 名称 - 但它不再通用 - 不需要!!

所以我的问题是,有没有办法在驱动程序中没有早期信息的情况下循环这些 regs?

提前致谢!!

如果您查看 platform_get_resource 的定义,您会发现最后一个参数是资源编号。因此,对于您提供的资源编号的示例,范围从 0 到 2。

如果您不知道资源的数量,那么您可以 运行 一个循环,直到您得到一个 NULL 作为对 platform_get_resource 的响应。