如何在不使用非安全引导程序的情况下使用TF-A直接引导Linux内核?

安全之安全(security²)博客目录导读


问题:如何在不使用非安全引导程序(Non-secure Bootloader)的情况下使用TF-A直接引导Linux内核?

        作为一名软件开发人员,使用非安全引导加载程序引导Linux内核,例如用于嵌入式系统的u-boot引导加载程序,或用于基础设施系统的edk2引导加载程序。

        然而,对于裸机开发,希望使用TF-A来直接引导Linux内核,而不使用非安全引导加载程序。我怎么做呢?

答案

        通常,TF-A支持u-boot bootloader或edk2非安全引导加载程序作为BL33镜像。然后,BL33镜像引导内核,但它也可以直接引导Linux内核。 

        构建选项ARM_LINUX_KERNEL_AS_BL33用于此特殊场景。Linux内核期望寄存器x0-x3在引导时具有特定的值。这些值在Linux内核文档中描述如下:

  • x0 = 

  • x1 = 0 (reserved for future use)

  • x2 = 0 (reserved for future use)

  • x3 = 0 (reserved for future use)

        因此,当通过将ARM_LINUX_KERNEL_AS_BL33设置为1来使用该特性时,设备树blob (DTB)和Linux内核镜像(BL33)可以通过BL2加载,并且DTB地址可以通过x0寄存器从TF-A传递到内核。

        此外,Linux内核镜像(BL33)由BL2加载,但是起始地址必须使用PRELOADED_BL33_BASE选项指定。

        以下示例展示了基于arm的FVP模型的构建选项:

make CROSS_COMPILE=aarch64-none-elf- \

PLAT=fvp \

FVP_HW_CONFIG_DTS=fdts/fvp-base-gicv3-psci-1t.dts \

ARM_LINUX_KERNEL_AS_BL33=1 \

PRELOADED_BL33_BASE=0x84000000 \

all fip

参考:Documentation – Arm Developer

你可能感兴趣的:(ARM安全架构,TF-A,ATF,bootloader,linux,bl33,edk2,uboot)