From b30bc518c493aae1ef80b4456eecb03138dc7542 Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Sun, 1 Nov 2020 15:54:11 +0100 Subject: [PATCH] Switch to GCC objdump and nm The GCC versions of `objdump` and `nm` seem to have better out-of-the-box support (for AArch64). Demangling works better, and instructions in objdump are presented as 4 bytes instead of 4 * 1 bytes, which helps a lot. Hence, switch to the GCC versions for now until LLVM has caught up. --- 01_wait_forever/Makefile | 15 ++++-- 02_runtime_init/Makefile | 15 ++++-- 03_hacky_hello_world/Makefile | 15 ++++-- 03_hacky_hello_world/README.md | 10 ++-- 04_zero_overhead_abstraction/Makefile | 15 ++++-- 05_safe_globals/Makefile | 15 ++++-- 06_drivers_gpio_uart/Makefile | 15 ++++-- 07_uart_chainloader/Makefile | 20 +++++--- 07_uart_chainloader/README.md | 37 +++++++++----- 08_timestamps/Makefile | 17 ++++--- 08_timestamps/README.md | 28 ++++++++--- 09_hw_debug_JTAG/Makefile | 19 ++++--- 09_hw_debug_JTAG/README.md | 29 +++++------ 10_privilege_level/Makefile | 19 ++++--- .../Makefile | 19 ++++--- 12_exceptions_part1_groundwork/Makefile | 19 ++++--- 13_integrated_testing/Makefile | 22 ++++---- 13_integrated_testing/README.md | 47 ++++++------------ 14_exceptions_part2_peripheral_IRQs/Makefile | 22 ++++---- 14_exceptions_part2_peripheral_IRQs/README.md | 2 +- 15_virtual_mem_part2_mmio_remap/Makefile | 22 ++++---- X1_JTAG_boot/Makefile | 17 ++++--- X1_JTAG_boot/jtag_boot_rpi3.img | Bin 7392 -> 7392 bytes X1_JTAG_boot/jtag_boot_rpi4.img | Bin 7360 -> 7360 bytes docker/rustembedded-osdev-utils/Dockerfile | 5 ++ 25 files changed, 269 insertions(+), 175 deletions(-) diff --git a/01_wait_forever/Makefile b/01_wait_forever/Makefile index c9ee53d0..bc5e47c8 100644 --- a/01_wait_forever/Makefile +++ b/01_wait_forever/Makefile @@ -12,6 +12,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -d in_asm -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -20,6 +22,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -d in_asm -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -45,9 +49,11 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -82,11 +88,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/02_runtime_init/Makefile b/02_runtime_init/Makefile index c9ee53d0..bc5e47c8 100644 --- a/02_runtime_init/Makefile +++ b/02_runtime_init/Makefile @@ -12,6 +12,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -d in_asm -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -20,6 +22,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -d in_asm -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -45,9 +49,11 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -82,11 +88,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/03_hacky_hello_world/Makefile b/03_hacky_hello_world/Makefile index 46037095..b6b62c58 100644 --- a/03_hacky_hello_world/Makefile +++ b/03_hacky_hello_world/Makefile @@ -12,6 +12,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -20,6 +22,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -45,9 +49,11 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -82,11 +88,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/03_hacky_hello_world/README.md b/03_hacky_hello_world/README.md index 9bbcf105..4fac48da 100644 --- a/03_hacky_hello_world/README.md +++ b/03_hacky_hello_world/README.md @@ -37,18 +37,18 @@ diff -uNr 02_runtime_init/Makefile 03_hacky_hello_world/Makefile QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -d in_asm -display none + QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 - else ifeq ($(BSP),rpi4) -@@ -19,7 +19,7 @@ +@@ -21,7 +21,7 @@ KERNEL_BIN = kernel8.img QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = - QEMU_RELEASE_ARGS = -d in_asm -display none + QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 - endif diff -uNr 02_runtime_init/src/bsp/raspberrypi/console.rs 03_hacky_hello_world/src/bsp/raspberrypi/console.rs --- 02_runtime_init/src/bsp/raspberrypi/console.rs diff --git a/04_zero_overhead_abstraction/Makefile b/04_zero_overhead_abstraction/Makefile index 46037095..b6b62c58 100644 --- a/04_zero_overhead_abstraction/Makefile +++ b/04_zero_overhead_abstraction/Makefile @@ -12,6 +12,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -20,6 +22,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -45,9 +49,11 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -82,11 +88,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/05_safe_globals/Makefile b/05_safe_globals/Makefile index 46037095..b6b62c58 100644 --- a/05_safe_globals/Makefile +++ b/05_safe_globals/Makefile @@ -12,6 +12,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -20,6 +22,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -45,9 +49,11 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -82,11 +88,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/06_drivers_gpio_uart/Makefile b/06_drivers_gpio_uart/Makefile index 46037095..b6b62c58 100644 --- a/06_drivers_gpio_uart/Makefile +++ b/06_drivers_gpio_uart/Makefile @@ -12,6 +12,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -20,6 +22,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -45,9 +49,11 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -82,11 +88,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/07_uart_chainloader/Makefile b/07_uart_chainloader/Makefile index 39bbc443..7ac28e4b 100644 --- a/07_uart_chainloader/Makefile +++ b/07_uart_chainloader/Makefile @@ -18,6 +18,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 -C relocation-model=pic CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img @@ -27,6 +29,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 -C relocation-model=pic CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img @@ -53,15 +57,17 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DEV = --privileged -v /dev:/dev -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) endif @@ -107,11 +113,13 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .got \ + $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/07_uart_chainloader/README.md b/07_uart_chainloader/README.md index c23fb7e7..4cc07973 100644 --- a/07_uart_chainloader/README.md +++ b/07_uart_chainloader/README.md @@ -116,9 +116,9 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile # BSP-specific arguments ifeq ($(BSP),rpi3) TARGET = aarch64-unknown-none-softfloat -@@ -13,7 +19,8 @@ - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none +@@ -15,7 +21,8 @@ + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 -C relocation-model=pic @@ -126,9 +126,9 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile else ifeq ($(BSP),rpi4) TARGET = aarch64-unknown-none-softfloat KERNEL_BIN = kernel8.img -@@ -21,7 +28,8 @@ - QEMU_MACHINE_TYPE = - QEMU_RELEASE_ARGS = -serial stdio -display none +@@ -25,7 +32,8 @@ + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 -C relocation-model=pic @@ -136,19 +136,20 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile endif # Export for build.rs -@@ -46,12 +54,23 @@ - +@@ -51,13 +59,24 @@ DOCKER_IMAGE = rustembedded/osdev-utils - DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial + DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial + DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t +DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils +DOCKER_ARG_DEV = --privileged -v /dev:/dev - DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) + DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) + DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +# Dockerize commands that require USB device passthrough only on Linux +ifeq ($(UNAME_S),Linux) -+ DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) ++ DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) + + DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) +endif @@ -162,7 +163,7 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile all: $(KERNEL_BIN) -@@ -65,13 +84,19 @@ +@@ -71,13 +90,19 @@ $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) @@ -183,6 +184,18 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile clippy: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) +@@ -88,7 +113,10 @@ + readelf --headers $(KERNEL_ELF) + + objdump: $(KERNEL_ELF) +- @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) ++ @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ ++ --section .text \ ++ --section .got \ ++ $(KERNEL_ELF) + + nm: $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort diff -uNr 06_drivers_gpio_uart/src/_arch/aarch64/cpu.rs 07_uart_chainloader/src/_arch/aarch64/cpu.rs --- 06_drivers_gpio_uart/src/_arch/aarch64/cpu.rs diff --git a/08_timestamps/Makefile b/08_timestamps/Makefile index e45af9cf..4aac53d9 100644 --- a/08_timestamps/Makefile +++ b/08_timestamps/Makefile @@ -18,6 +18,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -26,6 +28,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -51,15 +55,17 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DEV = --privileged -v /dev:/dev -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) endif @@ -101,11 +107,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/08_timestamps/README.md b/08_timestamps/README.md index d67f7cd1..b1008b50 100644 --- a/08_timestamps/README.md +++ b/08_timestamps/README.md @@ -47,9 +47,9 @@ Binary files 07_uart_chainloader/demo_payload_rpi4.img and 08_timestamps/demo_pa diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile --- 07_uart_chainloader/Makefile +++ 08_timestamps/Makefile -@@ -19,8 +19,7 @@ - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none +@@ -21,8 +21,7 @@ + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 -C relocation-model=pic - CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img @@ -57,9 +57,9 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile else ifeq ($(BSP),rpi4) TARGET = aarch64-unknown-none-softfloat KERNEL_BIN = kernel8.img -@@ -28,8 +27,7 @@ - QEMU_MACHINE_TYPE = - QEMU_RELEASE_ARGS = -serial stdio -display none +@@ -32,8 +31,7 @@ + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 -C relocation-model=pic - CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img @@ -67,7 +67,7 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile endif # Export for build.rs -@@ -69,8 +67,7 @@ +@@ -75,8 +73,7 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) EXEC_MINIPUSH = ruby ../utils/minipush.rb @@ -77,7 +77,7 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile all: $(KERNEL_BIN) -@@ -84,18 +81,15 @@ +@@ -90,18 +87,15 @@ $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) @@ -99,6 +99,18 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile clippy: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) +@@ -113,10 +107,7 @@ + readelf --headers $(KERNEL_ELF) + + objdump: $(KERNEL_ELF) +- @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ +- --section .text \ +- --section .got \ +- $(KERNEL_ELF) ++ @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) + + nm: $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort diff -uNr 07_uart_chainloader/src/_arch/aarch64/cpu.rs 08_timestamps/src/_arch/aarch64/cpu.rs --- 07_uart_chainloader/src/_arch/aarch64/cpu.rs diff --git a/09_hw_debug_JTAG/Makefile b/09_hw_debug_JTAG/Makefile index 32e9d6ba..f354c85d 100644 --- a/09_hw_debug_JTAG/Makefile +++ b/09_hw_debug_JTAG/Makefile @@ -18,6 +18,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -28,6 +30,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -55,18 +59,20 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) @@ -130,11 +136,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/09_hw_debug_JTAG/README.md b/09_hw_debug_JTAG/README.md index 53a516b5..93b66a66 100644 --- a/09_hw_debug_JTAG/README.md +++ b/09_hw_debug_JTAG/README.md @@ -305,38 +305,39 @@ Thanks to [@naotaco](https://github.com/naotaco) for laying the groundwork for t diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile --- 08_timestamps/Makefile +++ 09_hw_debug_JTAG/Makefile -@@ -18,6 +18,8 @@ - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 +@@ -20,6 +20,8 @@ QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm + OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg + JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) -@@ -26,6 +28,8 @@ - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = +@@ -30,6 +32,8 @@ QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm + OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg + JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -@@ -53,21 +57,29 @@ - DOCKER_IMAGE = rustembedded/osdev-utils - DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +@@ -58,9 +62,12 @@ + DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial + DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils +DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev +DOCKER_ARG_NET = --network host - DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -+DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) + DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) ++DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) + DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux - ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) +@@ -68,12 +75,17 @@ + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) + DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) @@ -354,7 +355,7 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile all: $(KERNEL_BIN) -@@ -91,6 +103,23 @@ +@@ -97,6 +109,23 @@ chainboot: $(KERNEL_BIN) @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(KERNEL_BIN) diff --git a/10_privilege_level/Makefile b/10_privilege_level/Makefile index 32e9d6ba..f354c85d 100644 --- a/10_privilege_level/Makefile +++ b/10_privilege_level/Makefile @@ -18,6 +18,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -28,6 +30,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -55,18 +59,20 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) @@ -130,11 +136,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/11_virtual_mem_part1_identity_mapping/Makefile b/11_virtual_mem_part1_identity_mapping/Makefile index 32e9d6ba..f354c85d 100644 --- a/11_virtual_mem_part1_identity_mapping/Makefile +++ b/11_virtual_mem_part1_identity_mapping/Makefile @@ -18,6 +18,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -28,6 +30,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -55,18 +59,20 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) @@ -130,11 +136,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/12_exceptions_part1_groundwork/Makefile b/12_exceptions_part1_groundwork/Makefile index 32e9d6ba..f354c85d 100644 --- a/12_exceptions_part1_groundwork/Makefile +++ b/12_exceptions_part1_groundwork/Makefile @@ -18,6 +18,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -28,6 +30,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -55,18 +59,20 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) @@ -130,11 +136,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/13_integrated_testing/Makefile b/13_integrated_testing/Makefile index afba8e91..3cc26552 100644 --- a/13_integrated_testing/Makefile +++ b/13_integrated_testing/Makefile @@ -19,6 +19,8 @@ ifeq ($(BSP),rpi3) QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -30,6 +32,8 @@ else ifeq ($(BSP),rpi4) QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -69,20 +73,21 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD_TEST = docker run -i --rm -v $(shell pwd):/work/tutorial -w /work/tutorial -DOCKER_CMD_USER = $(DOCKER_CMD_TEST) -t +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_USER) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_USER) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_TEST = $(DOCKER_CMD_TEST) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD_USER) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) @@ -161,11 +166,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/13_integrated_testing/README.md b/13_integrated_testing/README.md index f98e558d..35578a29 100644 --- a/13_integrated_testing/README.md +++ b/13_integrated_testing/README.md @@ -846,18 +846,18 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg - JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img - LINKER_FILE = src/bsp/raspberrypi/link.ld -@@ -28,6 +29,7 @@ +@@ -30,6 +31,7 @@ QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg - JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img - LINKER_FILE = src/bsp/raspberrypi/link.ld -@@ -37,6 +39,17 @@ +@@ -41,6 +43,17 @@ # Export for build.rs export LINKER_FILE @@ -875,7 +875,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs -@@ -48,6 +61,7 @@ +@@ -52,6 +65,7 @@ DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) CHECK_CMD = cargo check $(COMPILER_ARGS) @@ -883,32 +883,15 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile OBJCOPY_CMD = rust-objcopy \ --strip-all \ -O binary -@@ -55,18 +69,20 @@ - KERNEL_ELF = target/$(TARGET)/release/kernel - - DOCKER_IMAGE = rustembedded/osdev-utils --DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial -+DOCKER_CMD_TEST = docker run -i --rm -v $(shell pwd):/work/tutorial -w /work/tutorial -+DOCKER_CMD_USER = $(DOCKER_CMD_TEST) -t - DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils - DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot - DOCKER_ARG_DEV = --privileged -v /dev:/dev - DOCKER_ARG_NET = --network host - --DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) --DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -+DOCKER_QEMU = $(DOCKER_CMD_USER) $(DOCKER_IMAGE) -+DOCKER_GDB = $(DOCKER_CMD_USER) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -+DOCKER_TEST = $(DOCKER_CMD_TEST) $(DOCKER_IMAGE) +@@ -68,6 +82,7 @@ - # Dockerize commands that require USB device passthrough only on Linux - ifeq ($(UNAME_S),Linux) -- DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) -+ DOCKER_CMD_DEV = $(DOCKER_CMD_USER) $(DOCKER_ARG_DEV) + DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) + DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) ++DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) + DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) - DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) - DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) -@@ -78,8 +94,8 @@ + # Dockerize commands that require USB device passthrough only on Linux +@@ -84,8 +99,8 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) EXEC_MINIPUSH = ruby ../utils/minipush.rb @@ -919,7 +902,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile all: $(KERNEL_BIN) -@@ -93,11 +109,26 @@ +@@ -99,11 +114,26 @@ $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) diff --git a/14_exceptions_part2_peripheral_IRQs/Makefile b/14_exceptions_part2_peripheral_IRQs/Makefile index cab93584..430a564a 100644 --- a/14_exceptions_part2_peripheral_IRQs/Makefile +++ b/14_exceptions_part2_peripheral_IRQs/Makefile @@ -19,6 +19,8 @@ ifeq ($(BSP),rpi3) QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -30,6 +32,8 @@ else ifeq ($(BSP),rpi4) QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -70,20 +74,21 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD_TEST = docker run -i --rm -v $(shell pwd):/work/tutorial -w /work/tutorial -DOCKER_CMD_USER = $(DOCKER_CMD_TEST) -t +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_USER) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_USER) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_TEST = $(DOCKER_CMD_TEST) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD_USER) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) @@ -162,11 +167,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/14_exceptions_part2_peripheral_IRQs/README.md b/14_exceptions_part2_peripheral_IRQs/README.md index fa54ab95..d15542d8 100644 --- a/14_exceptions_part2_peripheral_IRQs/README.md +++ b/14_exceptions_part2_peripheral_IRQs/README.md @@ -746,7 +746,7 @@ Minipush 1.0 diff -uNr 13_integrated_testing/Makefile 14_exceptions_part2_peripheral_IRQs/Makefile --- 13_integrated_testing/Makefile +++ 14_exceptions_part2_peripheral_IRQs/Makefile -@@ -53,8 +53,9 @@ +@@ -57,8 +57,9 @@ RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs diff --git a/15_virtual_mem_part2_mmio_remap/Makefile b/15_virtual_mem_part2_mmio_remap/Makefile index cab93584..430a564a 100644 --- a/15_virtual_mem_part2_mmio_remap/Makefile +++ b/15_virtual_mem_part2_mmio_remap/Makefile @@ -19,6 +19,8 @@ ifeq ($(BSP),rpi3) QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -30,6 +32,8 @@ else ifeq ($(BSP),rpi4) QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -70,20 +74,21 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD_TEST = docker run -i --rm -v $(shell pwd):/work/tutorial -w /work/tutorial -DOCKER_CMD_USER = $(DOCKER_CMD_TEST) -t +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_USER) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_USER) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_TEST = $(DOCKER_CMD_TEST) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD_USER) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) @@ -162,11 +167,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/X1_JTAG_boot/Makefile b/X1_JTAG_boot/Makefile index e45af9cf..4aac53d9 100644 --- a/X1_JTAG_boot/Makefile +++ b/X1_JTAG_boot/Makefile @@ -18,6 +18,8 @@ ifeq ($(BSP),rpi3) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -26,6 +28,8 @@ else ifeq ($(BSP),rpi4) QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + OBJDUMP_BINARY = aarch64-none-elf-objdump + NM_BINARY = aarch64-none-elf-nm LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -51,15 +55,17 @@ OBJCOPY_CMD = rust-objcopy \ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial +DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DEV = --privileged -v /dev:/dev -DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) - DOCKER_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) + DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) endif @@ -101,11 +107,10 @@ readelf: $(KERNEL_ELF) readelf --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - rust-objdump --arch-name aarch64 --disassemble --demangle --no-show-raw-insn \ - --print-imm-hex $(KERNEL_ELF) + @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) nm: $(KERNEL_ELF) - rust-nm --demangle --print-size $(KERNEL_ELF) | sort + @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort # For rust-analyzer check: diff --git a/X1_JTAG_boot/jtag_boot_rpi3.img b/X1_JTAG_boot/jtag_boot_rpi3.img index 64da0156c54c9b92d3945b69d0a7294c8185e63f..1357692a32fa9a84ff20b4302ef0e3b888a0d39f 100755 GIT binary patch delta 53 zcmV-50LuU1Ip8_483X~Lvl;~70Re%t`UR!|8UO%5`Dp+E6bK|hsp10xs^9|%s^J3( Ls{R7Ax(6l|`}q=n delta 53 zcmV-50LuU1Ip8_483X}=vl;~70Rhpo`UR!|8VDpnsp10xs^9|%s^J3(ssIB36aWA~ L`D6gIx(6l|2tg67 diff --git a/X1_JTAG_boot/jtag_boot_rpi4.img b/X1_JTAG_boot/jtag_boot_rpi4.img index 318a492431774e74f4195e15c03d880605e551e3..b888f28ba0ae8b96825109b6730e5a21cc2b8e9f 100755 GIT binary patch delta 49 zcmV-10M7rwIlwuv4FmyUvknB?0Rcg?>IJ3&761T1`Dg$D6ygH`st5!?so(<$s{R7A HrUx1ojkFK8 delta 49 zcmV-10M7rwIlwuv4Fmx}vknB?0Re%t>IJ3&7UBZ|st5!?so(<$ssIB36aWA~`D6gI HrUx1okVFpE diff --git a/docker/rustembedded-osdev-utils/Dockerfile b/docker/rustembedded-osdev-utils/Dockerfile index 1027f81d..0ee3d988 100644 --- a/docker/rustembedded-osdev-utils/Dockerfile +++ b/docker/rustembedded-osdev-utils/Dockerfile @@ -62,6 +62,11 @@ RUN set -ex; \ make install; \ # GDB wget -P ~ git.io/.gdbinit; \ + # GCC AArch64 tools + wget https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-aarch64-none-elf.tar.xz; \ + tar -xf gcc-arm-9*; \ + cp gcc-arm-9*/bin/aarch64-none-elf-objdump gcc-arm-9*/bin/aarch64-none-elf-nm /usr/local/bin/; \ + rm -rf gcc-arm-9*; \ # Cleanup apt-get purge -y --auto-remove $tempPkgs; \ apt-get autoremove -q -y; \