zircon编译过程分析

首先,构建完成以后,执行run-zircon-arm64脚本在qemu中模拟zircon运行,如下:

$ ./scripts/run-zircon-arm64 CMDLINE: TERM=xterm-256color kernel.entropy-mixin=8d417aca1555bba28fbb63719ba097e90818464c50ab8434cefd92258ce4ee3c kernel.halt-on-panic=true + exec /home/pomelo/work/zircon/zircon/scripts/../prebuilt/downloads/qemu/bin/qemu-system-aarch64 -kernel /home/pomelo/work/zircon/zircon/build-arm64/qemu-boot-shim.bin -initrd /home/pomelo/work/zircon/zircon/build-arm64/zircon.zbi -m 2048 -nographic -net none -smp 4 -machine virtualization=true -cpu cortex-a53 -machine virt,gic_version=3 -append 'TERM=xterm-256color kernel.entropy-mixin=8d417aca1555bba28fbb63719ba097e90818464c50ab8434cefd92258ce4ee3c kernel.halt-on-panic=true '

通过-kernel和-initrd参数可以看出来,qemu运行zircon主要依赖2个镜像 qemu-boot-shim.bin 和 zircon.zbi 。其中qemu-boot-shim.bin的功能是根据qemu aarch64硬件传入的参数,计算得到dts,设置zircon.zbi执行所需要的环境和变量,然跳转到zircon.zbi执行。zircon.zbi是真正的内核映像。

 

为了方便了解镜像的组成,在构建工程的时候添加V=1可以看到整个镜像的编译过程

make -j4 arm64 V=1

1、qemu-boot-shim.bin的生成过程

先生成boot-shim.elf,再通过objcopy后得到qemu-boot-shim.bin

./prebuilt/downloads/gcc/bin/aarch64-elf-objcopy -O binary build-arm64/boot-shim/qemu/boot-shim.elf build-arm64/qemu-boot-shim.bin

boot-shim.elf由对应的obj文件链接生成,链接脚本为boot-shim.ld。

linking build-arm64/boot-shim/qemu/boot-shim.elf
./prebuilt/downloads/gcc/bin/aarch64-elf-ld 
      -nostdlib --build-id -z noexecstack -z max-page-size=4096 --fix-cortex-a53-843419  --gc-sections --emit-relocs --build-id=none 
      ./build-arm64/boot-shim/qemu/kernel/target/arm64/boot-shim/boot-shim.S.o 
      ./build-arm64/boot-shim/qemu/kernel/target/arm64/boot-shim/boot-shim.c.o 
      ./build-arm64/boot-shim/qemu/kernel/target/arm64/boot-shim/debug.c.o 
      ./build-arm64/boot-shim/qemu/kernel/target/arm64/boot-shim/devicetree.c.o 
      ./build-arm64/boot-shim/qemu/kernel/target/arm64/boot-shim/util.c.o 
      ./build-arm64/boot-shim/qemu/kernel/target/arm64/boot-shim/qemu-uart.c.o 
      ./build-arm64/boot-shim/qemu/kernel/lib/libc/string/memcpy.c.o 
      ./build-arm64/boot-shim/qemu/kernel/lib/libc/string/memmove.c.o 
      ./build-arm64/boot-shim/qemu/kernel/lib/libc/string/memset.c.o 
      ./build-arm64/boot-shim/qemu/kernel/lib/libc/string/strcmp.c.o 
      ./build-arm64/boot-shim/qemu/kernel/lib/libc/string/strncmp.c.o 
      ./build-arm64/boot-shim/qemu/system/ulib/libzbi/zbi.c.o 
      -defsym KERNEL_ALIGN=65536 
      -T kernel/target/arm64/boot-shim/boot-shim.ld 
      -o build-arm64/boot-shim/qemu/boot-shim.elf

2、zircon.zbi的生成过程

zircon.zbi依赖于kernel.zbi和文件系统,文件系统包含了sample和ddk-sample,文件列表为bootfs.manifest. 通过build-arm64/tools/zbi工具最后打包为zircon.zbi。

generating build-arm64/zircon.zbi
compat kernel name build-arm64/zircon.bin
ln -f build-arm64/kernel.zbi build-arm64/zircon.bin
generating build-arm64/qemu-zircon.bin
cat ./build-arm64/qemu-boot-shim.bin ./build-arm64/kernel.zbi > build-arm64/qemu-zircon.bin
build-arm64/tools/zbi -o build-arm64/zircon.zbi --complete=arm64 ./build-arm64/kernel.zbi \
	    --groups=!sample,!ddk-sample ./build-arm64/bootfs.manifest \

使用zbi工具将内核镜像kernel.zbi以及文件列表中的文件打包生成zircon.zbi,文件格式按照system/public/zircon/boot/image.h头文件中的格式定义。

2.1 kernel.zbi的生成过程

kernel.zbi由kernel-image.elf通过objcopy去除符号表得到

generating image build-arm64/kernel.zbi
./prebuilt/downloads/gcc/bin/aarch64-elf-objcopy -O binary build-arm64/kernel-image.elf build-arm64/kernel.zbi

2.2 kernel-image.elf的生成过程

kernel-image.elf依赖于kernel.image.o,kernel-vars.ld,image.ld,zircon.elf

linking build-arm64/kernel-image.elf
./prebuilt/downloads/gcc/bin/aarch64-elf-ld -nostdlib --build-id -z noexecstack -z max-page-size=4096 --fix-cortex-a53-843419 --build-id=none \
	       -o build-arm64/kernel-image.elf -T kernel/image.ld --just-symbols ./build-arm64/zircon.elf \
	       ./build-arm64/kernel-vars.ld ./build-arm64/kernel.image.o

其中kernel.image.o由kernel/arch/arm64/image.S编译得到

assembling kernel/arch/arm64/image.S
./prebuilt/downloads/gcc/bin/aarch64-elf-gcc   \
    -O2 -g -fdebug-prefix-map=/home/pomelo/work/zircon/zircon=. -finline -include ./build-arm64/config-global.h -Wall -Wextra -Wno-multichar -Werror -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-unused-function -Werror=unused-label -Werror=return-type -fno-common -ffunction-sections -fdata-sections -Wno-nonnull-compare -Wno-format-truncation -ffreestanding -include ./build-arm64/config-kernel.h -Wformat=2 -Wvla -Wformat-signedness -fno-exceptions -fno-unwind-tables -fno-omit-frame-pointer -mgeneral-regs-only -fPIE -include kernel/include/hidden.h   -mcpu=cortex-a53 -ffixed-x18 \
       \
    -Isystem/public -Isystem/private -I./build-arm64/gen/global/include -I./build-arm64 -Ikernel/include -Ikernel/platform/generic-arm/include -Ikernel/arch/arm64/include -Ikernel/top/include -Ikernel/dev/hdcp/amlogic_s912/include -Ikernel/dev/interrupt/arm_gic/common/include -Ikernel/dev/interrupt/arm_gic/v2/include -Ikernel/dev/interrupt/arm_gic/v2/include -Ikernel/dev/interrupt/arm_gic/v3/include -Ikernel/dev/iommu/dummy/include -Ikernel/dev/pcie/include -Ikernel/dev/pdev/include -Ikernel/dev/pdev/power/include -Ikernel/dev/power/hisi/include -Ikernel/dev/psci/include -Ikernel/dev/timer/arm_generic/include -Ikernel/dev/uart/amlogic_s905/include -Ikernel/dev/uart/mt8167/include -Ikernel/dev/uart/nxp-imx/include -Ikernel/dev/uart/pl011/include -Ikernel/kernel/include -Isystem/ulib/bitmap/include -Ikernel/lib/bitmap/include -Ikernel/lib/cbuf/include -Ikernel/lib/crashlog/include -Ikernel/lib/debugcommands/include -Ikernel/lib/debuglog/include -Ikernel/lib/fbl/include -Isystem/ulib/fbl/include -Ikernel/lib/fbl/include -Ikernel/lib/ktrace/include -Ikernel/lib/lockdep/include -Isystem/ulib/lockdep/include -Ikernel/lib/lockdep/include -Ikernel/lib/memory_limit/include -Ikernel/lib/mtrace/include -Ikernel/lib/userboot/include -Ikernel/lib/version/include -Isystem/ulib/libzbi/include -Ikernel/lib/zbi/include -Ikernel/object/include -Ikernel/platform/include -Ikernel/syscalls/include -Ikernel/target/include -Ikernel/tests/include -Ikernel/dev/interrupt/include -Ikernel/dev/pdev/interrupt/include -Ikernel/dev/pdev/uart/include -Ikernel/dev/udisplay/include -Ikernel/lib/console/include -Ikernel/lib/counters/include -Ikernel/lib/crypto/include -Ikernel/lib/debug/include -Isystem/ulib/explicit-memory/include -Ikernel/lib/explicit-memory/include -Ikernel/lib/fixed_point/include -Ikernel/lib/header_tests/include -Ikernel/lib/heap/include -Ikernel/lib/heap/include -Ikernel/lib/hypervisor/include -Ikernel/lib/libc/include -Ikernel/lib/oom/include -Ikernel/lib/pci/include -Ikernel/lib/pci/include -Ikernel/lib/pow2_range_allocator/include -Isystem/ulib/pretty/include -Ikernel/lib/pretty/include -Isystem/ulib/region-alloc/include -Ikernel/lib/region-alloc/include -Ikernel/lib/unittest/include -Ikernel/lib/user_copy/include -Ikernel/lib/vdso/include -Isystem/ulib/zircon-internal/include -Ikernel/lib/zircon-internal/include -Isystem/ulib/zxcpp/include -Ikernel/lib/zxcpp/include -Ikernel/vm/include -Ikernel/arch/arm64/hypervisor/include -Ikernel/dev/hw_rng/include -Ikernel/lib/gfx/include -Ikernel/lib/gfxconsole/include -Ikernel/lib/heap/cmpctmalloc/include -Ikernel/lib/io/include -Ithird_party/ulib/cryptolib/include -Ithird_party/lib/cryptolib/include -Ithird_party/lib/jitterentropy/include -Ithird_party/lib/jitterentropy/include -Ithird_party/ulib/uboringssl/include -Ithird_party/lib/uboringssl/include -I./build-arm64 \
    -c kernel/arch/arm64/image.S -MD -MP -MT build-arm64/kernel.image.o -MF build-arm64/kernel.image.d -o build-arm64/kernel.image.o

2.3 zircon.elf的生成过程

zircon.elf由内核的.o文件链接而成

linking build-arm64/zircon.elf
./prebuilt/downloads/gcc/bin/aarch64-elf-ld -nostdlib --build-id -z noexecstack -z max-page-size=4096 --fix-cortex-a53-843419  --gc-sections --emit-relocs 
    -T kernel/kernel.ld
    build-arm64/kernel-vars.ld 
    build-arm64/kernel/platform/generic-arm/kernel/platform/generic-arm/platform.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/arch.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/boot-mmu.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/debugger.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/exceptions_c.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/feature.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/fpu.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/mmu.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/periphmap.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/spinlock.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/sysreg.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/thread.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/user_copy_c.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/mp.cpp.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/asm.S.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/cache-ops.S.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/exceptions.S.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/mexec.S.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/smccc.S.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/start.S.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/user_copy.S.o 
    build-arm64/kernel/arch/arm64/kernel/arch/arm64/uspace_entry.S.o 
    build-arm64/kernel/top/kernel/top/init.cpp.o 
    build-arm64/kernel/top/kernel/top/main.cpp.o 
    build-arm64/kernel/dev/hdcp/amlogic_s912/kernel/dev/hdcp/amlogic_s912/hdcp.cpp.o 
    build-arm64/kernel/dev/interrupt/arm_gic/common/kernel/dev/interrupt/arm_gic/common/arm_gic_common.cpp.o 
    build-arm64/kernel/dev/interrupt/arm_gic/common/kernel/dev/interrupt/arm_gic/common/arm_gic_hw_interface.cpp.o 
    build-arm64/kernel/dev/interrupt/arm_gic/v2/kernel/dev/interrupt/arm_gic/v2/arm_gicv2.cpp.o 
    build-arm64/kernel/dev/interrupt/arm_gic/v2/kernel/dev/interrupt/arm_gic/v2/arm_gicv2m.cpp.o 
    build-arm64/kernel/dev/interrupt/arm_gic/v2/kernel/dev/interrupt/arm_gic/v2/arm_gicv2m_msi.cpp.o 
    build-arm64/kernel/dev/interrupt/arm_gic/v2/kernel/dev/interrupt/arm_gic/v2/arm_gicv2m_pcie.cpp.o 
    build-arm64/kernel/dev/interrupt/arm_gic/v3/kernel/dev/interrupt/arm_gic/v3/arm_gicv3.cpp.o 
    build-arm64/kernel/dev/interrupt/arm_gic/v3/kernel/dev/interrupt/arm_gic/v3/arm_gicv3_pcie.cpp.o 
    build-arm64/kernel/dev/iommu/dummy/kernel/dev/iommu/dummy/dummy_iommu.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/debug.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pci_config.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pcie_bridge.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pcie_bus_driver.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pcie_caps.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pcie_device.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pcie_irqs.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pcie_quirks.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pcie_root.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/pcie_upstream_node.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/address_provider/mmio.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/address_provider/pio.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/address_provider/designware.cpp.o 
    build-arm64/kernel/dev/pcie/kernel/dev/pcie/address_provider/ecam_region.cpp.o 
    build-arm64/kernel/dev/pdev/kernel/dev/pdev/pdev.cpp.o 
    build-arm64/kernel/dev/pdev/power/kernel/dev/pdev/power/power.cpp.o 
    build-arm64/kernel/dev/power/hisi/kernel/dev/power/hisi/power.cpp.o 
    build-arm64/kernel/dev/psci/kernel/dev/psci/psci.cpp.o 
    build-arm64/kernel/dev/timer/arm_generic/kernel/dev/timer/arm_generic/arm_generic_timer.cpp.o 
    build-arm64/kernel/dev/uart/amlogic_s905/kernel/dev/uart/amlogic_s905/uart.cpp.o 
    build-arm64/kernel/dev/uart/mt8167/kernel/dev/uart/mt8167/uart.cpp.o 
    build-arm64/kernel/dev/uart/nxp-imx/kernel/dev/uart/nxp-imx/uart.cpp.o 
    build-arm64/kernel/dev/uart/pl011/kernel/dev/uart/pl011/uart.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/cmdline.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/debug.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/dpc.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/event.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/init.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/mp.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/mutex.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/percpu.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/sched.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/thread.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/timer.cpp.o 
    build-arm64/kernel/kernel/kernel/kernel/wait.cpp.o 
    build-arm64/kernel/lib/bitmap/system/ulib/bitmap/raw-bitmap.cpp.o 
    build-arm64/kernel/lib/bitmap/system/ulib/bitmap/rle-bitmap.cpp.o 
    build-arm64/kernel/lib/cbuf/kernel/lib/cbuf/cbuf.cpp.o 
    build-arm64/kernel/lib/crashlog/kernel/lib/crashlog/crashlog.cpp.o 
    build-arm64/kernel/lib/debugcommands/kernel/lib/debugcommands/debugcommands.cpp.o 
    build-arm64/kernel/lib/debuglog/kernel/lib/debuglog/debuglog.cpp.o 
    build-arm64/kernel/lib/fbl/kernel/lib/fbl/arena.cpp.o 
    build-arm64/kernel/lib/fbl/kernel/lib/fbl/arena_tests.cpp.o 
    build-arm64/kernel/lib/fbl/kernel/lib/fbl/inline_array_tests.cpp.o 
    build-arm64/kernel/lib/fbl/kernel/lib/fbl/name_tests.cpp.o 
    build-arm64/kernel/lib/fbl/system/ulib/fbl/alloc_checker.cpp.o 
    build-arm64/kernel/lib/ktrace/kernel/lib/ktrace/ktrace.cpp.o 
    build-arm64/kernel/lib/lockdep/kernel/lib/lockdep/lock_dep.cpp.o 
    build-arm64/kernel/lib/memory_limit/kernel/lib/memory_limit/memory_limit.cpp.o 
    build-arm64/kernel/lib/mtrace/kernel/lib/mtrace/mtrace.cpp.o 
    build-arm64/kernel/lib/mtrace/kernel/lib/mtrace/mtrace-ipm.cpp.o 
    build-arm64/kernel/lib/mtrace/kernel/lib/mtrace/mtrace-ipt.cpp.o 
    build-arm64/kernel/lib/userboot/kernel/lib/userboot/userboot.cpp.o 
    build-arm64/kernel/lib/userboot/kernel/lib/userboot/userboot-image.S.o 
    build-arm64/kernel/lib/version/kernel/lib/version/version.cpp.o 
    build-arm64/kernel/lib/zbi/system/ulib/libzbi/zbi.c.o 
    build-arm64/kernel/object/kernel/object/buffer_chain.cpp.o 
    build-arm64/kernel/object/kernel/object/bus_transaction_initiator_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/channel_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/diagnostics.cpp.o 
    build-arm64/kernel/object/kernel/object/dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/event_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/event_pair_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/exception.cpp.o 
    build-arm64/kernel/object/kernel/object/excp_port.cpp.o 
    build-arm64/kernel/object/kernel/object/fifo_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/futex_context.cpp.o 
    build-arm64/kernel/object/kernel/object/futex_node.cpp.o 
    build-arm64/kernel/object/kernel/object/glue.cpp.o 
    build-arm64/kernel/object/kernel/object/guest_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/handle.cpp.o 
    build-arm64/kernel/object/kernel/object/interrupt_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/interrupt_event_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/iommu_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/job_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/log_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/mbuf.cpp.o 
    build-arm64/kernel/object/kernel/object/message_packet.cpp.o 
    build-arm64/kernel/object/kernel/object/pci_device_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/pci_interrupt_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/pinned_memory_token_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/policy_manager.cpp.o 
    build-arm64/kernel/object/kernel/object/port_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/process_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/profile_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/resource_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/resource.cpp.o 
    build-arm64/kernel/object/kernel/object/semaphore.cpp.o 
    build-arm64/kernel/object/kernel/object/socket_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/suspend_token_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/thread_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/timer_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/vcpu_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/virtual_interrupt_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/vm_address_region_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/vm_object_dispatcher.cpp.o 
    build-arm64/kernel/object/kernel/object/wait_state_observer.cpp.o 
    build-arm64/kernel/object/kernel/object/buffer_chain_tests.cpp.o 
    build-arm64/kernel/object/kernel/object/mbuf_tests.cpp.o 
    build-arm64/kernel/object/kernel/object/message_packet_tests.cpp.o 
    build-arm64/kernel/object/kernel/object/state_tracker_tests.cpp.o 
    build-arm64/kernel/platform/kernel/platform/debug.cpp.o 
    build-arm64/kernel/platform/kernel/platform/init.cpp.o 
    build-arm64/kernel/platform/kernel/platform/power.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/syscalls.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/channel.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/ddk.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/ddk_pci.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/debug.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/exceptions.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/fifo.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/futex.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/handle_ops.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/hypervisor.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/zircon.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/object.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/object_wait.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/port.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/profile.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/resource.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/socket.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/system.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/task.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/test.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/timer.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/vmar.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/vmo.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/system_arm64.cpp.o 
    build-arm64/kernel/syscalls/kernel/syscalls/ddk_arm64.cpp.o 
    build-arm64/kernel/target/kernel/target/init.cpp.o 
    build-arm64/kernel/tests/kernel/tests/alloc_checker_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/benchmarks.cpp.o 
    build-arm64/kernel/tests/kernel/tests/cache_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/clock_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/fibo.cpp.o 
    build-arm64/kernel/tests/kernel/tests/lock_dep_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/mem_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/mp_hotplug_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/preempt_disable_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/printf_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/resource_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/sleep_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/string_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/sync_ipi_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/thread_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/timer_tests.cpp.o 
    build-arm64/kernel/tests/kernel/tests/uart_tests.cpp.o 
    build-arm64/kernel/dev/interrupt/kernel/dev/interrupt/msi.cpp.o 
    build-arm64/kernel/dev/pdev/interrupt/kernel/dev/pdev/interrupt/interrupt.cpp.o 
    build-arm64/kernel/dev/pdev/uart/kernel/dev/pdev/uart/uart.cpp.o 
    build-arm64/kernel/dev/udisplay/kernel/dev/udisplay/udisplay.cpp.o 
    build-arm64/kernel/lib/console/kernel/lib/console/console.cpp.o 
    build-arm64/kernel/lib/counters/kernel/lib/counters/counters.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/global_prng.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/global_prng_unittest.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/prng.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/prng_unittest.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/entropy/collector.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/entropy/collector_unittest.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/entropy/hw_rng_collector.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/entropy/jitterentropy_collector.cpp.o 
    build-arm64/kernel/lib/crypto/kernel/lib/crypto/entropy/quality_test.cpp.o 
    build-arm64/kernel/lib/debug/kernel/lib/debug/debug.cpp.o 
    build-arm64/kernel/lib/explicit-memory/system/ulib/explicit-memory/bytes.c.o 
    build-arm64/kernel/lib/fixed_point/kernel/lib/fixed_point/fixed_point.cpp.o 
    build-arm64/kernel/lib/header_tests/kernel/lib/header_tests/pow2_tests.cpp.o 
    build-arm64/kernel/lib/heap/kernel/lib/heap/heap_wrapper.cpp.o 
    build-arm64/kernel/lib/hypervisor/kernel/lib/hypervisor/cpu.cpp.o 
    build-arm64/kernel/lib/hypervisor/kernel/lib/hypervisor/guest_physical_address_space.cpp.o 
    build-arm64/kernel/lib/hypervisor/kernel/lib/hypervisor/hypervisor_unittest.cpp.o 
    build-arm64/kernel/lib/hypervisor/kernel/lib/hypervisor/ktrace.cpp.o 
    build-arm64/kernel/lib/hypervisor/kernel/lib/hypervisor/trap_map.cpp.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/atoi.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/bsearch.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/ctype.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/errno.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/iovec.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/printf.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/rand.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/strtol.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/strtoll.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/stdio.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/qsort.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/eabi.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/atexit.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/memchr.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/memcmp.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/memmove.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strcat.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strchr.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strcmp.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strcoll.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strcpy.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strlcat.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strlcpy.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strlen.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strncat.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strncpy.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strncmp.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strnicmp.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strnlen.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strpbrk.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strrchr.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strspn.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strstr.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/string/strtok.c.o build-arm64/kernel/lib/libc/kernel/lib/libc/string/strxfrm.c.o 
    build-arm64/kernel/lib/libc/kernel/lib/libc/cxa_atexit.cpp.o build-arm64/kernel/lib/libc/third_party/lib/cortex-strings/src/aarch64/memcpy.S.o 
    build-arm64/kernel/lib/libc/third_party/lib/cortex-strings/no-neon/src/aarch64/memset.S.o build-arm64/kernel/lib/oom/kernel/lib/oom/oom.cpp.o 
    build-arm64/kernel/lib/pci/kernel/lib/pci/pio.cpp.o 
    build-arm64/kernel/lib/pow2_range_allocator/kernel/lib/pow2_range_allocator/pow2_range_allocator.cpp.o 
    build-arm64/kernel/lib/pretty/system/ulib/pretty/hexdump.c.o build-arm64/kernel/lib/pretty/system/ulib/pretty/sizes.c.o 
    build-arm64/kernel/lib/region-alloc/system/ulib/region-alloc/region-alloc-c-api.cpp.o 
    build-arm64/kernel/lib/region-alloc/system/ulib/region-alloc/region-alloc.cpp.o 
    build-arm64/kernel/lib/unittest/kernel/lib/unittest/unittest.cpp.o 
    build-arm64/kernel/lib/unittest/kernel/lib/unittest/user_memory.cpp.o build-arm64/kernel/lib/vdso/kernel/lib/vdso/rodso.cpp.o 
    build-arm64/kernel/lib/vdso/kernel/lib/vdso/vdso.cpp.o build-arm64/kernel/lib/vdso/kernel/lib/vdso/vdso-image.S.o 
    build-arm64/kernel/lib/zircon-internal/system/ulib/zircon-internal/empty.c.o build-arm64/kernel/lib/zxcpp/system/ulib/zxcpp/new.cpp.o 
    build-arm64/kernel/lib/zxcpp/system/ulib/zxcpp/pure_virtual.cpp.o build-arm64/kernel/vm/kernel/vm/bootalloc.cpp.o 
    build-arm64/kernel/vm/kernel/vm/bootreserve.cpp.o build-arm64/kernel/vm/kernel/vm/kstack.cpp.o 
    build-arm64/kernel/vm/kernel/vm/page.cpp.o 
    build-arm64/kernel/vm/kernel/vm/pinned_vm_object.cpp.o 
    build-arm64/kernel/vm/kernel/vm/pmm.cpp.o build-arm64/kernel/vm/kernel/vm/pmm_arena.cpp.o 
    build-arm64/kernel/vm/kernel/vm/pmm_node.cpp.o build-arm64/kernel/vm/kernel/vm/vm.cpp.o 
    build-arm64/kernel/vm/kernel/vm/vm_address_region.cpp.o 
    build-arm64/kernel/vm/kernel/vm/vm_address_region_or_mapping.cpp.o 
    build-arm64/kernel/vm/kernel/vm/vm_aspace.cpp.o 
    build-arm64/kernel/vm/kernel/vm/vm_mapping.cpp.o build-arm64/kernel/vm/kernel/vm/vm_object.cpp.o 
    build-arm64/kernel/vm/kernel/vm/vm_object_paged.cpp.o build-arm64/kernel/vm/kernel/vm/vm_object_physical.cpp.o 
    build-arm64/kernel/vm/kernel/vm/vm_page_list.cpp.o build-arm64/kernel/vm/kernel/vm/vm_unittest.cpp.o 
    build-arm64/kernel/vm/kernel/vm/vmm.cpp.o build-arm64/kernel/arch/arm64/hypervisor/kernel/arch/arm64/hypervisor/el2_cpu_state.cpp.o 
    build-arm64/kernel/arch/arm64/hypervisor/kernel/arch/arm64/hypervisor/guest.cpp.o 
    build-arm64/kernel/arch/arm64/hypervisor/kernel/arch/arm64/hypervisor/vcpu.cpp.o 
    build-arm64/kernel/arch/arm64/hypervisor/kernel/arch/arm64/hypervisor/vmexit.cpp.o 
    build-arm64/kernel/arch/arm64/hypervisor/kernel/arch/arm64/hypervisor/gic/gicv2.cpp.o 
    build-arm64/kernel/arch/arm64/hypervisor/kernel/arch/arm64/hypervisor/gic/gicv3.cpp.o 
    build-arm64/kernel/arch/arm64/hypervisor/kernel/arch/arm64/hypervisor/el2.S.o 
    build-arm64/kernel/arch/arm64/hypervisor/kernel/arch/arm64/hypervisor/gic/el2.S.o 
    build-arm64/kernel/dev/hw_rng/kernel/dev/hw_rng/debug.cpp.o 
    build-arm64/kernel/lib/gfx/kernel/lib/gfx/gfx.cpp.o 
    build-arm64/kernel/lib/gfxconsole/kernel/lib/gfxconsole/gfxconsole.cpp.o 
    build-arm64/kernel/lib/heap/cmpctmalloc/kernel/lib/heap/cmpctmalloc/cmpctmalloc.cpp.o 
    build-arm64/kernel/lib/io/kernel/lib/io/console.cpp.o 
    build-arm64/third_party/lib/cryptolib/third_party/ulib/cryptolib/cryptolib.c.o 
    build-arm64/third_party/lib/jitterentropy/third_party/lib/jitterentropy/jitterentropy-base.c.o 
    build-arm64/third_party/lib/uboringssl/third_party/ulib/uboringssl/crypto/chacha/chacha.c.o 
    build-arm64/third_party/lib/uboringssl/third_party/ulib/uboringssl/crypto/fipsmodule/sha/sha256.c.o 
    -o build-arm64/zircon.elf

综上,qemu中模拟运行的zircon.zbi 的生成过程为:

  • zircon内核的源文件编译成的.o文件
  • o文件链接得到zircon.elf
  • kernel.image.o,kernel-vars.ld,image.ld,zircon.elf这四个文件链接得到kernel.image.elf
  • kernel-image.elf去除符号表得到kernel.zbi
  • 使用zbi工具,kernel.zbi合并文件系统得到zircon.zbi

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值