【发布时间】:2015-10-20 15:35:28
【问题描述】:
我需要将设备树的不同变体传递给我的 linux 内核,这取决于只能在运行时确定的板修订版。
设置内核启动以处理只能在启动时从 u-boot 中确定的各种硬件布局的既定方法是什么?
【问题讨论】:
标签: c linux linux-kernel u-boot device-tree
我需要将设备树的不同变体传递给我的 linux 内核,这取决于只能在运行时确定的板修订版。
设置内核启动以处理只能在启动时从 u-boot 中确定的各种硬件布局的既定方法是什么?
【问题讨论】:
标签: c linux linux-kernel u-boot device-tree
bootm 命令采用三个参数:
bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}
而第三个是内存中扁平设备树 blob 的地址。因此,如果您有不同的设备树,请将它们加载到不同的内存地址并将它们传递给bootm,或者使用不同的 blob 加载该内存地址。
【讨论】:
if 和test 命令,这些命令可以用u-boot 编译。
迟到的答案,但我最近添加以处理同样的问题。
使用 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
您当然可以用一个更复杂的宏来包装这个宏,该宏将在每次启动时执行。
【讨论】: