C 如何从Linux内核的u-boot内部选择不同的设备树

C 如何从Linux内核的u-boot内部选择不同的设备树,c,linux,linux-kernel,u-boot,device-tree,C,Linux,Linux Kernel,U Boot,Device Tree,我需要将设备树的不同变体传递给我的linux内核,具体取决于只能在运行时确定的板版本 设置内核启动以处理各种硬件布局的既定方法是什么?这些硬件布局只能在启动时从u-boot中确定。bootm命令包含三个参数: bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr} 而第三个是内存中扁平设备树blob的地址。因此,如果您有不同的设备树,可以将它们加载到不同的内存地址并将它们传递到bootm,或者使用不同的blob加载该内存地址 bootm命令采用三个参数

我需要将设备树的不同变体传递给我的linux内核,具体取决于只能在运行时确定的板版本


设置内核启动以处理各种硬件布局的既定方法是什么?这些硬件布局只能在启动时从u-boot中确定。

bootm命令包含三个参数:

bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}

而第三个是内存中扁平设备树blob的地址。因此,如果您有不同的设备树,可以将它们加载到不同的内存地址并将它们传递到
bootm
,或者使用不同的blob加载该内存地址

bootm命令采用三个参数:

bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}

而第三个是内存中扁平设备树blob的地址。因此,如果您有不同的设备树,可以将它们加载到不同的内存地址并将它们传递到
bootm
,或者使用不同的blob加载该内存地址

迟了回答,但我最近添加了一个来处理相同的问题

使用u-boot,您实际上可以为此编写宏

设备树文件的u-boot环境变量为“
fdtfile

从这里,您可以定义一个宏,根据您的具体需要设置此变量,例如:

setenv findfdt '
if test $mycondition = value1; then setenv fdtfile devicetree1.dtb; fi;
if test $mycondition = value2; then setenv fdtfile devicetree2.dtb; fi;
..'
然后,您只需创建一个.txt文件来注册此宏,然后使用
mkimage
工具创建一个二进制映像.img以便u-boot加载:

mkimage -T script -d macros.txt macros.img

当然,您可以使用一个更复杂的宏来包装这个宏,该宏将在每次启动时执行

迟了回答,但我最近添加了一个来处理相同的问题

使用u-boot,您实际上可以为此编写宏

设备树文件的u-boot环境变量为“
fdtfile

从这里,您可以定义一个宏,根据您的具体需要设置此变量,例如:

setenv findfdt '
if test $mycondition = value1; then setenv fdtfile devicetree1.dtb; fi;
if test $mycondition = value2; then setenv fdtfile devicetree2.dtb; fi;
..'
然后,您只需创建一个.txt文件来注册此宏,然后使用
mkimage
工具创建一个二进制映像.img以便u-boot加载:

mkimage -T script -d macros.txt macros.img

当然,您可以使用一个更复杂的宏来包装这个宏,该宏将在每次启动时执行

但是我如何选择它们呢?我本来打算使用一个新的u-boot命令,该命令将根据板载版本输出不同的fdt名称,但我认为不可能将命令的输出用于填充u-boot中的环境变量。是否要将相同的引导SD卡放到不同的板上并自动引导它们?你用什么来确定架构?是的。我想要一个SD卡,可以处理被引导到多个不同的板(嗯,相同的板,但不同的修订导致h/w不兼容)。GPIOs上有一组电阻,可以给我电路板的版本。那么如何获得版本呢?你有一个自定义u-boot读取这些GPIO吗?它可以将修订写入环境变量吗?如果是,您可以将
If
test
命令一起使用,该命令可以使用u-boot.Look编译。我认为这完全解决了你们的问题。但我该如何选择它们呢?我本来打算使用一个新的u-boot命令,该命令将根据板载版本输出不同的fdt名称,但我认为不可能将命令的输出用于填充u-boot中的环境变量。是否要将相同的引导SD卡放到不同的板上并自动引导它们?你用什么来确定架构?是的。我想要一个SD卡,可以处理被引导到多个不同的板(嗯,相同的板,但不同的修订导致h/w不兼容)。GPIOs上有一组电阻,可以给我电路板的版本。那么如何获得版本呢?你有一个自定义u-boot读取这些GPIO吗?它可以将修订写入环境变量吗?如果是,您可以将
If
test
命令一起使用,该命令可以使用u-boot.Look编译。我认为这完全解决了你们的问题。