From a4266ba978bc25a0c7739493799e0c4ee2070672 Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Sun, 12 Apr 2020 22:22:29 +0200 Subject: [PATCH] More Makefile fixes --- 01_wait_forever/Makefile | 50 ++++---- 02_runtime_init/Makefile | 50 ++++---- 03_hacky_hello_world/Makefile | 50 ++++---- 03_hacky_hello_world/README.md | 32 ++--- 04_zero_overhead_abstraction/Makefile | 50 ++++---- 05_safe_globals/Makefile | 50 ++++---- 06_drivers_gpio_uart/Makefile | 50 ++++---- 07_uart_chainloader/Makefile | 67 +++++------ 07_uart_chainloader/README.md | 71 ++++++------ 08_timestamps/Makefile | 58 +++++----- 08_timestamps/README.md | 46 ++++---- 09_hw_debug_JTAG/Makefile | 78 ++++++------- 09_hw_debug_JTAG/README.md | 52 ++++----- 10_privilege_level/Makefile | 78 ++++++------- 11_virtual_memory/Makefile | 78 ++++++------- 12_exceptions_part1_groundwork/Makefile | 78 ++++++------- 13_integrated_testing/Makefile | 105 ++++++++--------- 13_integrated_testing/README.md | 89 +++++++------- 14_exceptions_part2_peripheral_IRQs/Makefile | 109 ++++++++---------- 14_exceptions_part2_peripheral_IRQs/README.md | 25 ++-- X1_JTAG_boot/Makefile | 58 +++++----- 21 files changed, 627 insertions(+), 697 deletions(-) diff --git a/01_wait_forever/Makefile b/01_wait_forever/Makefile index 581b753c..ffb3c79d 100644 --- a/01_wait_forever/Makefile +++ b/01_wait_forever/Makefile @@ -3,44 +3,42 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -d in_asm -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -d in_asm -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -d in_asm -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -d in_asm -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -49,7 +47,7 @@ DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /wo DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm @@ -80,10 +78,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/02_runtime_init/Makefile b/02_runtime_init/Makefile index 581b753c..ffb3c79d 100644 --- a/02_runtime_init/Makefile +++ b/02_runtime_init/Makefile @@ -3,44 +3,42 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -d in_asm -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -d in_asm -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -d in_asm -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -d in_asm -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -49,7 +47,7 @@ DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /wo DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm @@ -80,10 +78,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/03_hacky_hello_world/Makefile b/03_hacky_hello_world/Makefile index d642135b..dd6aaab5 100644 --- a/03_hacky_hello_world/Makefile +++ b/03_hacky_hello_world/Makefile @@ -3,44 +3,42 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -49,7 +47,7 @@ DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /wo DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm @@ -80,10 +78,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/03_hacky_hello_world/README.md b/03_hacky_hello_world/README.md index 9cb0815c..d8a0fb21 100644 --- a/03_hacky_hello_world/README.md +++ b/03_hacky_hello_world/README.md @@ -31,23 +31,23 @@ Kernel panic: Stopping here. diff -uNr 02_runtime_init/Makefile 03_hacky_hello_world/Makefile --- 02_runtime_init/Makefile +++ 03_hacky_hello_world/Makefile -@@ -13,7 +13,7 @@ - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 -- QEMU_RELEASE_ARGS = -d in_asm -display none -+ QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 +@@ -11,7 +11,7 @@ + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 +- QEMU_RELEASE_ARGS = -d in_asm -display none ++ QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) -@@ -21,7 +21,7 @@ - OUTPUT = 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 - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 +@@ -19,7 +19,7 @@ + OUTPUT = 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 + 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 diff --git a/04_zero_overhead_abstraction/Makefile b/04_zero_overhead_abstraction/Makefile index d642135b..dd6aaab5 100644 --- a/04_zero_overhead_abstraction/Makefile +++ b/04_zero_overhead_abstraction/Makefile @@ -3,44 +3,42 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -49,7 +47,7 @@ DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /wo DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm @@ -80,10 +78,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/05_safe_globals/Makefile b/05_safe_globals/Makefile index d642135b..dd6aaab5 100644 --- a/05_safe_globals/Makefile +++ b/05_safe_globals/Makefile @@ -3,44 +3,42 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -49,7 +47,7 @@ DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /wo DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm @@ -80,10 +78,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/06_drivers_gpio_uart/Makefile b/06_drivers_gpio_uart/Makefile index d642135b..dd6aaab5 100644 --- a/06_drivers_gpio_uart/Makefile +++ b/06_drivers_gpio_uart/Makefile @@ -3,44 +3,42 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -49,7 +47,7 @@ DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /wo DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE) -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm @@ -80,10 +78,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/07_uart_chainloader/Makefile b/07_uart_chainloader/Makefile index 691952fb..46d7ae53 100644 --- a/07_uart_chainloader/Makefile +++ b/07_uart_chainloader/Makefile @@ -3,54 +3,50 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -63,9 +59,9 @@ DOCKER_QEMU = $(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) $(DOCKER_ARG_DEV) -DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) + DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -86,10 +82,7 @@ doc: $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) -qemu: - @echo "This board is not yet supported for QEMU." - -qemuasm: +qemu qemuasm: @echo "This board is not yet supported for QEMU." else qemu: all @@ -109,10 +102,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/07_uart_chainloader/README.md b/07_uart_chainloader/README.md index c80e1212..51544dfa 100644 --- a/07_uart_chainloader/README.md +++ b/07_uart_chainloader/README.md @@ -94,42 +94,40 @@ Binary files 06_drivers_gpio_uart/demo_payload_rpi4.img and 07_uart_chainloader/ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile --- 06_drivers_gpio_uart/Makefile +++ 07_uart_chainloader/Makefile -@@ -7,6 +7,14 @@ - BSP = rpi3 - endif +@@ -5,6 +5,12 @@ + # Default to the RPi3 + BSP ?= rpi3 +# Default to a serial device name that is common in Linux. -+ifndef DEV_SERIAL -+ DEV_SERIAL = /dev/ttyUSB0 -+endif ++DEV_SERIAL ?= /dev/ttyUSB0 + +# Query the host system's kernel name -+UNAME_S := $(shell uname -s) ++UNAME_S = $(shell uname -s) + # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat -@@ -15,7 +23,8 @@ - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - 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 -+ CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img + TARGET = aarch64-unknown-none-softfloat +@@ -13,7 +19,8 @@ + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 ++ CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img -@@ -23,7 +32,8 @@ - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - 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 -+ CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img +@@ -21,7 +28,8 @@ + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 ++ CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img endif - SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) -@@ -46,12 +56,22 @@ + SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +@@ -44,12 +52,22 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial @@ -138,28 +136,29 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile DOCKER_QEMU = $(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) $(DOCKER_ARG_DEV) + -+DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) ++ DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) +endif -+ - EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) -+EXEC_MINIPUSH = ruby ../utils/minipush.rb -.PHONY: all doc qemu clippy clean readelf objdump nm ++EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) ++EXEC_MINIPUSH = ruby ../utils/minipush.rb ++ +.PHONY: all doc qemu qemuasm chainboot clippy clean readelf objdump nm all: clean $(OUTPUT) -@@ -68,11 +88,20 @@ +@@ -64,13 +82,19 @@ + $(DOC_CMD) --document-private-items --open + ifeq ($(QEMU_MACHINE_TYPE),) - qemu: +-qemu: ++qemu qemuasm: @echo "This board is not yet supported for QEMU." -+ -+qemuasm: -+ @echo "This board is not yet supported for QEMU." else qemu: all @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT) diff --git a/08_timestamps/Makefile b/08_timestamps/Makefile index d4cea8bd..4b18773a 100644 --- a/08_timestamps/Makefile +++ b/08_timestamps/Makefile @@ -3,52 +3,48 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -61,9 +57,9 @@ DOCKER_QEMU = $(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) $(DOCKER_ARG_DEV) -DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) + DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -101,10 +97,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/08_timestamps/README.md b/08_timestamps/README.md index 8fea0c6e..bcbb663f 100644 --- a/08_timestamps/README.md +++ b/08_timestamps/README.md @@ -46,27 +46,27 @@ 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 -@@ -23,8 +23,7 @@ - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - 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 -+ RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 +@@ -19,8 +19,7 @@ + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 ++ RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img -@@ -32,8 +31,7 @@ - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - 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 -+ RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img +@@ -28,8 +27,7 @@ + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 ++ RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif - SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) -@@ -71,7 +69,7 @@ + SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +@@ -67,7 +65,7 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) EXEC_MINIPUSH = ruby ../utils/minipush.rb @@ -75,13 +75,13 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile all: clean $(OUTPUT) -@@ -88,19 +86,13 @@ +@@ -82,18 +80,15 @@ + $(DOC_CMD) --document-private-items --open + ifeq ($(QEMU_MACHINE_TYPE),) - qemu: +-qemu qemuasm: ++qemu: @echo "This board is not yet supported for QEMU." -- --qemuasm: -- @echo "This board is not yet supported for QEMU." else qemu: all @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT) diff --git a/09_hw_debug_JTAG/Makefile b/09_hw_debug_JTAG/Makefile index 66f6722e..24dd68c2 100644 --- a/09_hw_debug_JTAG/Makefile +++ b/09_hw_debug_JTAG/Makefile @@ -3,56 +3,52 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + 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) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -68,13 +64,13 @@ DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(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) $(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) -DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(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) + DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) else -DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# + DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -112,9 +108,9 @@ openocd: @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - cp $(KERNEL_ELF) kernel_for_jtag - @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) + cp $(KERNEL_ELF) kernel_for_jtag + @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef gdb: clean $(SOURCES) @@ -130,10 +126,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/09_hw_debug_JTAG/README.md b/09_hw_debug_JTAG/README.md index 03e4c3ef..16d1fe3c 100644 --- a/09_hw_debug_JTAG/README.md +++ b/09_hw_debug_JTAG/README.md @@ -305,25 +305,25 @@ 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 -@@ -22,6 +22,8 @@ - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none -+ 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 +@@ -18,6 +18,8 @@ + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none ++ 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) -@@ -30,6 +32,8 @@ - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none -+ 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 +@@ -26,6 +28,8 @@ + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none ++ 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 -@@ -55,21 +59,28 @@ +@@ -51,21 +55,28 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils @@ -336,13 +336,13 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile # 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) $(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) -+DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(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) ++ DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +else -+DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# ++ DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -353,7 +353,7 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile all: clean $(OUTPUT) -@@ -94,6 +105,24 @@ +@@ -90,6 +101,24 @@ chainboot: all @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(OUTPUT) @@ -364,9 +364,9 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile + @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) + +define gen_gdb -+ RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) -+ cp $(KERNEL_ELF) kernel_for_jtag -+ @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag ++ RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) ++ cp $(KERNEL_ELF) kernel_for_jtag ++ @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag +endef + +gdb: clean $(SOURCES) diff --git a/10_privilege_level/Makefile b/10_privilege_level/Makefile index 66f6722e..24dd68c2 100644 --- a/10_privilege_level/Makefile +++ b/10_privilege_level/Makefile @@ -3,56 +3,52 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + 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) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -68,13 +64,13 @@ DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(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) $(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) -DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(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) + DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) else -DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# + DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -112,9 +108,9 @@ openocd: @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - cp $(KERNEL_ELF) kernel_for_jtag - @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) + cp $(KERNEL_ELF) kernel_for_jtag + @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef gdb: clean $(SOURCES) @@ -130,10 +126,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/11_virtual_memory/Makefile b/11_virtual_memory/Makefile index 66f6722e..24dd68c2 100644 --- a/11_virtual_memory/Makefile +++ b/11_virtual_memory/Makefile @@ -3,56 +3,52 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + 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) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -68,13 +64,13 @@ DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(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) $(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) -DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(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) + DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) else -DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# + DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -112,9 +108,9 @@ openocd: @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - cp $(KERNEL_ELF) kernel_for_jtag - @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) + cp $(KERNEL_ELF) kernel_for_jtag + @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef gdb: clean $(SOURCES) @@ -130,10 +126,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/12_exceptions_part1_groundwork/Makefile b/12_exceptions_part1_groundwork/Makefile index 66f6722e..24dd68c2 100644 --- a/12_exceptions_part1_groundwork/Makefile +++ b/12_exceptions_part1_groundwork/Makefile @@ -3,56 +3,52 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + 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) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + 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 -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -68,13 +64,13 @@ DOCKER_GDB = $(DOCKER_CMD) $(DOCKER_ARG_NET) $(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) $(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) -DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(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) + DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) else -DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# + DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -112,9 +108,9 @@ openocd: @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - cp $(KERNEL_ELF) kernel_for_jtag - @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) + cp $(KERNEL_ELF) kernel_for_jtag + @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef gdb: clean $(SOURCES) @@ -130,10 +126,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/13_integrated_testing/Makefile b/13_integrated_testing/Makefile index d535b926..d2800434 100644 --- a/13_integrated_testing/Makefile +++ b/13_integrated_testing/Makefile @@ -3,70 +3,66 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + 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) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - # QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + 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 # Testing-specific arguments ifdef TEST - ifeq ($(TEST),unit) - TEST_ARG = --lib - else - TEST_ARG = --test $(TEST) - endif + ifeq ($(TEST),unit) + TEST_ARG = --lib + else + TEST_ARG = --test $(TEST) + endif endif QEMU_MISSING_STRING = "This board is not yet supported for QEMU." -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) TEST_CMD = cargo test $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -84,13 +80,13 @@ DOCKER_TEST = $(DOCKER_CMD_TEST) $(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_USER) $(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) -DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(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) + DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) else -DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# + DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -111,21 +107,18 @@ doc: $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) -qemu: - @echo $(QEMU_MISSING_STRING) - -test: +qemu test: @echo $(QEMU_MISSING_STRING) else qemu: all @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT) define KERNEL_TEST_RUNNER - #!/usr/bin/env bash + #!/usr/bin/env bash - $(OBJCOPY_CMD) $$1 $$1.img - TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') - $(DOCKER_TEST) ruby tests/runner.rb $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY + $(OBJCOPY_CMD) $$1 $$1.img + TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') + $(DOCKER_TEST) ruby tests/runner.rb $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY endef export KERNEL_TEST_RUNNER @@ -146,9 +139,9 @@ openocd: @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - cp $(KERNEL_ELF) kernel_for_jtag - @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) + cp $(KERNEL_ELF) kernel_for_jtag + @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef gdb: clean $(SOURCES) @@ -164,10 +157,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/13_integrated_testing/README.md b/13_integrated_testing/README.md index d730a826..5acc833c 100644 --- a/13_integrated_testing/README.md +++ b/13_integrated_testing/README.md @@ -346,11 +346,11 @@ The file `kernel_test_runner.sh` does not exist by default. We generate it on de ```Makefile define KERNEL_TEST_RUNNER - #!/usr/bin/env bash + #!/usr/bin/env bash - $(OBJCOPY_CMD) $$1 $$1.img - TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') - $(DOCKER_TEST) ruby tests/runner.rb $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY + $(OBJCOPY_CMD) $$1 $$1.img + TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') + $(DOCKER_TEST) ruby tests/runner.rb $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY endef export KERNEL_TEST_RUNNER @@ -819,48 +819,48 @@ diff -uNr 12_exceptions_part1_groundwork/Cargo.toml 13_integrated_testing/Cargo. diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile --- 12_exceptions_part1_groundwork/Makefile +++ 13_integrated_testing/Makefile -@@ -22,6 +22,7 @@ - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none -+ QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting - 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 -@@ -32,12 +33,24 @@ - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none -+ # QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting - 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 +@@ -18,6 +18,7 @@ + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none ++ QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + 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,12 +29,24 @@ + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none ++ QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + 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 +# Testing-specific arguments +ifdef TEST -+ ifeq ($(TEST),unit) -+ TEST_ARG = --lib -+ else -+ TEST_ARG = --test $(TEST) -+ endif ++ ifeq ($(TEST),unit) ++ TEST_ARG = --lib ++ else ++ TEST_ARG = --test $(TEST) ++ endif +endif + +QEMU_MISSING_STRING = "This board is not yet supported for QEMU." + - SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) + SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) -@@ -50,6 +63,7 @@ +@@ -46,6 +59,7 @@ RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) +TEST_CMD = cargo test $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary -@@ -57,18 +71,20 @@ + --strip-all \ + -O binary +@@ -53,18 +67,20 @@ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils @@ -880,12 +880,12 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile # 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_CMD_DEV = $(DOCKER_CMD) $(DOCKER_ARG_DEV) ++ DOCKER_CMD_DEV = $(DOCKER_CMD_USER) $(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) -@@ -80,7 +96,7 @@ + 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) +@@ -76,7 +92,7 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) EXEC_MINIPUSH = ruby ../utils/minipush.rb @@ -894,25 +894,24 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile all: clean $(OUTPUT) -@@ -96,10 +112,28 @@ +@@ -91,11 +107,26 @@ + $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) - qemu: +-qemu: - @echo "This board is not yet supported for QEMU." -+ @echo $(QEMU_MISSING_STRING) -+ -+test: ++qemu test: + @echo $(QEMU_MISSING_STRING) else qemu: all @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT) + +define KERNEL_TEST_RUNNER -+ #!/usr/bin/env bash ++ #!/usr/bin/env bash + -+ $(OBJCOPY_CMD) $$1 $$1.img -+ TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') -+ $(DOCKER_TEST) ruby tests/runner.rb $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY ++ $(OBJCOPY_CMD) $$1 $$1.img ++ TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') ++ $(DOCKER_TEST) ruby tests/runner.rb $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY +endef + +export KERNEL_TEST_RUNNER diff --git a/14_exceptions_part2_peripheral_IRQs/Makefile b/14_exceptions_part2_peripheral_IRQs/Makefile index 6b8f3b2c..49930b0d 100644 --- a/14_exceptions_part2_peripheral_IRQs/Makefile +++ b/14_exceptions_part2_peripheral_IRQs/Makefile @@ -3,71 +3,67 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + 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) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - # QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting - 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 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting + 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 # Testing-specific arguments ifdef TEST - ifeq ($(TEST),unit) - TEST_ARG = --lib - else - TEST_ARG = --test $(TEST) - endif + ifeq ($(TEST),unit) + TEST_ARG = --lib + else + TEST_ARG = --test $(TEST) + endif endif QEMU_MISSING_STRING = "This board is not yet supported for QEMU." -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs FEATURES = bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ - --release + --features $(FEATURES) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) TEST_CMD = cargo test $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -85,17 +81,17 @@ DOCKER_TEST = $(DOCKER_CMD_TEST) $(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_USER) $(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) -DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(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) + DOCKER_OPENOCD = $(DOCKER_CMD_DEV) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) else -DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# + DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# endif -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) -EXEC_MINIPUSH = ruby ../utils/minipush.rb +EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm test @@ -113,21 +109,18 @@ doc: qemu: FEATURES += --features qemu-quirks ifeq ($(QEMU_MACHINE_TYPE),) -qemu: - @echo $(QEMU_MISSING_STRING) - -test: +qemu test: @echo $(QEMU_MISSING_STRING) else qemu: all @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT) define KERNEL_TEST_RUNNER - #!/usr/bin/env bash + #!/usr/bin/env bash - $(OBJCOPY_CMD) $$1 $$1.img - TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') - $(DOCKER_TEST) ruby tests/runner.rb $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY + $(OBJCOPY_CMD) $$1 $$1.img + TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') + $(DOCKER_TEST) ruby tests/runner.rb $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY endef export KERNEL_TEST_RUNNER @@ -149,9 +142,9 @@ openocd: @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - cp $(KERNEL_ELF) kernel_for_jtag - @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) + cp $(KERNEL_ELF) kernel_for_jtag + @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef gdb: clean $(SOURCES) @@ -167,10 +160,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/14_exceptions_part2_peripheral_IRQs/README.md b/14_exceptions_part2_peripheral_IRQs/README.md index ddb06767..58a042f5 100644 --- a/14_exceptions_part2_peripheral_IRQs/README.md +++ b/14_exceptions_part2_peripheral_IRQs/README.md @@ -762,37 +762,26 @@ diff -uNr 13_integrated_testing/Cargo.toml 14_exceptions_part2_peripheral_IRQs/C diff -uNr 13_integrated_testing/Makefile 14_exceptions_part2_peripheral_IRQs/Makefile --- 13_integrated_testing/Makefile +++ 14_exceptions_part2_peripheral_IRQs/Makefile -@@ -56,8 +56,9 @@ +@@ -52,8 +52,9 @@ RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs +FEATURES = bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ -- --features bsp_$(BSP) \ -+ --features $(FEATURES) \ - --release +- --features bsp_$(BSP) \ ++ --features $(FEATURES) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) -@@ -93,8 +94,8 @@ - DOCKER_OPENOCD = echo "Not yet supported on non-Linux systems."; \# - endif - --EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) --EXEC_MINIPUSH = ruby ../utils/minipush.rb -+EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) -+EXEC_MINIPUSH = ruby ../utils/minipush.rb - - .PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm test - -@@ -110,6 +111,7 @@ +@@ -106,6 +107,7 @@ doc: $(DOC_CMD) --document-private-items --open +qemu: FEATURES += --features qemu-quirks ifeq ($(QEMU_MACHINE_TYPE),) - qemu: + qemu test: @echo $(QEMU_MISSING_STRING) -@@ -129,6 +131,7 @@ +@@ -122,6 +124,7 @@ endef export KERNEL_TEST_RUNNER diff --git a/X1_JTAG_boot/Makefile b/X1_JTAG_boot/Makefile index d4cea8bd..4b18773a 100644 --- a/X1_JTAG_boot/Makefile +++ b/X1_JTAG_boot/Makefile @@ -3,52 +3,48 @@ ## Copyright (c) 2018-2020 Andre Richter # Default to the RPi3 -ifndef BSP - BSP = rpi3 -endif +BSP ?= rpi3 # Default to a serial device name that is common in Linux. -ifndef DEV_SERIAL - DEV_SERIAL = /dev/ttyUSB0 -endif +DEV_SERIAL ?= /dev/ttyUSB0 # Query the host system's kernel name -UNAME_S := $(shell uname -s) +UNAME_S = $(shell uname -s) # BSP-specific arguments ifeq ($(BSP),rpi3) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - QEMU_BINARY = qemu-system-aarch64 - QEMU_MACHINE_TYPE = raspi3 - QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = raspi3 + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) - TARGET = aarch64-unknown-none-softfloat - OUTPUT = kernel8.img - # QEMU_BINARY = qemu-system-aarch64 - # QEMU_MACHINE_TYPE = - # QEMU_RELEASE_ARGS = -serial stdio -display none - LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + TARGET = aarch64-unknown-none-softfloat + OUTPUT = kernel8.img + QEMU_BINARY = qemu-system-aarch64 + QEMU_MACHINE_TYPE = + QEMU_RELEASE_ARGS = -serial stdio -display none + LINKER_FILE = src/bsp/raspberrypi/link.ld + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) +SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs COMPILER_ARGS = --target=$(TARGET) \ - --features bsp_$(BSP) \ - --release + --features bsp_$(BSP) \ + --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) OBJCOPY_CMD = rust-objcopy \ - --strip-all \ - -O binary + --strip-all \ + -O binary KERNEL_ELF = target/$(TARGET)/release/kernel @@ -61,9 +57,9 @@ DOCKER_QEMU = $(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) $(DOCKER_ARG_DEV) -DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) + DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) endif EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -101,10 +97,10 @@ clean: rm -rf target readelf: - readelf -a kernel + readelf -a $(KERNEL_ELF) objdump: - cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel + rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) nm: - cargo nm --target $(TARGET) -- -print-size kernel | sort + rust-nm --demangle --print-size $(KERNEL_ELF) | sort