【问题标题】:How can I choose different device trees from inside u-boot for the Linux kernel如何从 u-boot 中为 Linux 内核选择不同的设备树
【发布时间】:2015-10-20 15:35:28
【问题描述】:

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

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

【问题讨论】:

    标签: c linux linux-kernel u-boot device-tree


    【解决方案1】:

    bootm 命令采用三个参数:

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

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

    【讨论】:

    • 但是我该如何选择它们呢?我本来打算有一个新的 u-boot 命令,它会输出依赖于板 rev 的 fdt 的不同名称,但我相信不可能获取命令的输出并使用它来填充 u-boot 中的环境变量。
    • 你想把同一个启动 SD 卡放到不同的板上并让它们自动启动吗?您使用什么来确定架构?
    • 是的。我想要一张可以应对在多个不同板上启动的 SD 卡(好吧,相同的板,但不同的版本导致硬件不兼容)。有一组连接 GPIO 的电阻器可以让我修改电路板。
    • 那么如何获得修订版?您有读取这些 GPIO 的自定义 u-boot 吗?它可以将修订写入环境变量吗?如果是这样,您可以使用iftest 命令,这些命令可以用u-boot 编译。
    • here。我认为它完全解决了您的问题。
    【解决方案2】:

    迟到的答案,但我最近添加以处理同样的问题。

    使用 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-09
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2018-09-27
      相关资源
      最近更新 更多