qemu 実行
Zephyrのソースコードが展開されたディレクトリ(絶対パス)を、[zephyr_base]と記述する。$ cd [zephyr_base]/samples/hello_world/microkernel $ QEMU_BIN_PATH=/usr/local/bin make BOARD=qemu_x86 qemu Using [zephyr_base] as source for kernel GEN ./Makefile CHK include/generated/version.h CHK misc/generated/configs.c CHK include/generated/offsets.h CHK misc/generated/sysgen/prj.mdef UPD misc/generated/sysgen/prj.mdef CC kernel/microkernel/k_task.o CC kernel/microkernel/k_idle.o CC kernel/microkernel/k_init.o CC kernel/microkernel/k_command_packet.o CC kernel/microkernel/k_move_data.o CC kernel/microkernel/k_ticker.o CC kernel/microkernel/k_memory_map.o CC kernel/microkernel/k_memory_pool.o CC kernel/microkernel/k_nop.o CC kernel/microkernel/k_offload.o CC kernel/microkernel/k_event.o CC kernel/microkernel/k_mailbox.o CC kernel/microkernel/k_mutex.o CC kernel/microkernel/k_fifo.o CC kernel/microkernel/k_semaphore.o CC kernel/microkernel/k_timer.o CC kernel/microkernel/k_pipe_buffer.o CC kernel/microkernel/k_pipe.o CC kernel/microkernel/k_pipe_get.o CC kernel/microkernel/k_pipe_put.o CC kernel/microkernel/k_pipe_util.o CC kernel/microkernel/k_pipe_xfer.o CC kernel/microkernel/k_nano.o CC kernel/microkernel/k_server.o LD kernel/microkernel/built-in.o LD kernel/built-in.o CC misc/generated/sysgen/kernel_main.o LD misc/generated/sysgen/built-in.o LD misc/generated/built-in.o LD misc/built-in.o CC arch/x86/core/i386_sysV_abi/thread.o LD arch/x86/core/i386_sysV_abi/built-in.o CC arch/x86/core/cpuhalt.o CC arch/x86/core/msr.o CC arch/x86/core/strtask.o LD arch/x86/core/built-in.o LD arch/x86/built-in.o LD arch/built-in.o CC samples/hello_world/microkernel/src/main.o LD samples/hello_world/microkernel/src/built-in.o LINK zephyr.lnk SIDT staticIdt.o LINK zephyr.elf BIN zephyr.bin To exit from QEMU enter: 'CTRL+a, x' [QEMU] CPU: qemu32 qemu-system-i386: warning: Unknown firmware file in legacy mode: genroms/multiboot.bin Hello World!
Makefileをたどる
カレントディレクトリは、[zephyr_base]/samples/hello_world/microkernel/。ここで make コマンドを実行すると、[zephyr_base]/samples/hello_world/microkernel/Makefile を呼び出す。
[zephyr_base]/samples/hello_world/microkernel/Makefile
(省略) include ${ZEPHYR_BASE}/Makefile.inc
qemu ターゲット
[zephyr_base]/Makefile.inc
qemu: $(DOTCONFIG) $(Q)$(call zephyrmake,$(O),$@)
[zephyr_base]/Makefile.inc
zephyrmake = @+$(MAKE) -C $(ZEPHYR_BASE) O=$(1) \ PROJECT=$(PROJECT_BASE) SOURCE_DIR=$(SOURCE_DIR) $(2)下記が実行される。
make -C [zephyr_base] O=[zephyr_base]samples/hello_world/microkernel/outdir PROJCT=[zephyr_base]samples/hello_world/microkernel SOURCE_DIR=[zephyr_base]/samples/hello_world/microkernel qemu↑は、[zephyr_base]/Makefileのqemuターゲットを実行する。
qemu ターゲット
[zephyr_base]/Makefile
qemu: zephyr $(Q)$(QEMU) $(QEMU_FLAGS) $(QEMU_EXTRA_FLAGS) -kernel $(KERNEL_ELF_NAME)下記が実行される。
/usr/local/bin/qemu-system-i386 -m 32 -cpu qemu32 -no-reboot -nographic -vga none -display none -net none -clock dynticks -no-acpi -balloon none -L /usr/share/qemu -bios bios.bin -machine type=pc-0.14 -pidfile qemu.pid -serial mon:stdio -kernel zephyr.elf
$(QEMU)
[zephyr_base]/Makefile
QEMU_BIN_PATH ?= /usr/bin QEMU = $(QEMU_BIN_PATH)/$(QEMU_$(ARCH))今回は、実行時に QEMU_BIN_PATH=/usr/local/bin として、QEMU_BIN_PATH を指定している。
$(QEMU_FLAGS)
[zephyr_base]/arch/x86/Makefile
QEMU_BIOS ?= /usr/share/qemu QEMU_CPU_TYPE_x86 = qemu32 QEMU_X86_NO_REBOOT_y = QEMU_X86_NO_REBOOT_ = -no-reboot QEMU_FLAGS_x86 = -m 32 -cpu $(QEMU_CPU_TYPE_x86) \ $(QEMU_X86_NO_REBOOT_$(CONFIG_REBOOT)) \ -nographic -vga none -display none -net none \ -clock dynticks -no-acpi -balloon none \ -L $(QEMU_BIOS) -bios bios.bin \ -machine type=pc-0.14 QEMU_x86 = qemu-system-i386
コメント