4. OP-TEE+qemu的编译--bios.bin镜像的编译

   bios.bin镜像是启动的时候会被使用到的主要image,在编译目标run-only中,最终借助qemu-system-arm命令来启动OP-TEE和linux kern,以及挂载rootfs,在运行该命令时,其中有一个参数为"-bios",该参数就是告诉qemu使用其后所带的bios.bin来启动。

  bios.bin中会包含linux kernel image, OP-TEE OS的image以及rootfs。该镜像文件是在bios-qemu的目标中被编译出来的,该编译目标如下,定义在build/Makefile文件中:

  当该目标依赖的update_rootfs和optee-os编译完成之后,会调用定义在qemu,mk文件中的bios-qemu-common函数来执行bios.bin镜像文件的编译和生成,该函数的定义如下:

################################################################################
# QEMU
################################################################################
define bios-qemu-common
	+$(MAKE) -C $(BIOS_QEMU_PATH) \
		CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
		O=$(ROOT)/out/bios-qemu \
		BIOS_NSEC_BLOB=$(LINUX_PATH)/arch/arm/boot/zImage \
		BIOS_NSEC_ROOTFS=$(GEN_ROOTFS_PATH)/filesystem.cpio.gz \
		BIOS_SECURE_BLOB=$(OPTEE_OS_BIN) \
		PLATFORM_FLAVOR=virt
endef

  执行该函数时会编译有变量BIOS_QEMU_PATH定义的目录,该函数执行的时候会执行makeBIOS_QEMU_PATH定义的目录,并带入相关的编译参数,参数说明如下:

CROSS_COMPILE:编译时使用的编译参数,包括编译器,cflag等

O:编译结果的输出目录

BIO_NSEC_BLOB:定义该变量,指定linux kernel image的名称和路径

BIOS_NSEC_ROOTFS:定义该变量,指定生成的rootfs存在的目录和cpio格式文件名

BIOS_SECURE_BLOB:定义该变量,指定OP-TEE OS镜像文件名

PLATFORM_FLAVOR:定义该变量,设定平台变量

  在使用qemu+OP-TEE方式运行时,BIOS_QEMU_PATH的值为bios_qemu_tz_arm。也即是在此情况下是去编译bios_qemu_tz_arm目录,进入该目录,找到Makefile文件,并找到对应的all目标,然后进行编译。

通过在Makefile中include各种.mk文件,完全展开之后,真正的all目标实体被定义在bios_qemu_tz_arm/bios/link.mk文件中,具体内容如下:

bios_qemu_tz_arm目录中makefile的all目标的整体依赖关系如下:


从上图的目标依赖关系可以看到, 在make指令中设定的几个变量都被使用到了,编译的时候,linux kernel image, OP-TEE os image, rootfs都会被转换成.o文件,然后再和其他的.o文件(main.o, entry.o等)一起连接成bios.bin文件。

linux kernel image将会被放在bios.bin中名称为nsec_blob的section中

OP-TEE os image将会被放在bios.bin中名称为secure_blob的section中

rootfs image将会被放在bios.bin中名称为nsec_rootfs的section中

上述将image转换成.o文件的动作是通过OBJCOPY带--rename-section参数来实现的,具体的内容可以link.mk文件中找到bios_qemu_tz_arm/bios/entry.s文件存放的就是在启动的时候bios.bin的入口文件

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值