From 76b86a4997db57c37bfe12e7f2fb18e292069183 Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Sun, 10 Mar 2019 14:59:01 +0100 Subject: [PATCH] Use refactored Makefile from JTAG tutorial everywhere. --- 01_bareminimum/Makefile | 29 ++++++++++----- 02_multicore_rust/Makefile | 26 ++++++++----- 03_uart1/Makefile | 26 ++++++++----- 04_mailboxes/Makefile | 24 ++++++++---- 05_uart0/Makefile | 26 ++++++++----- 06_raspbootin64/Makefile | 26 ++++++++----- 07_abstraction/Makefile | 33 +++++++++++------ 08_random/Makefile | 33 +++++++++++------ 09_delays/Makefile | 33 +++++++++++------ 0A_power/Makefile | 33 +++++++++++------ 0B_hw_debug_JTAG/Makefile | 2 +- 0C_exception_levels/Makefile | 59 +++++++++++++++++++++++------- 0C_exception_levels/src/gpio.rs | 2 +- 0C_exception_levels/src/mbox.rs | 2 +- 0C_exception_levels/src/uart.rs | 2 +- 0D_virtual_memory/Makefile | 59 +++++++++++++++++++++++------- 0D_virtual_memory/src/delays.rs | 2 +- 0E_cache_performance/Makefile | 59 +++++++++++++++++++++++------- 0E_cache_performance/src/delays.rs | 2 +- 0F_global_println/Makefile | 57 +++++++++++++++++++++++------ 10_DMA_memory/Makefile | 59 +++++++++++++++++++++++------- 11_exceptions_groundwork/Makefile | 59 +++++++++++++++++++++++------- 22 files changed, 469 insertions(+), 184 deletions(-) diff --git a/01_bareminimum/Makefile b/01_bareminimum/Makefile index dbf18840..9e6276bf 100644 --- a/01_bareminimum/Makefile +++ b/01_bareminimum/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,26 +26,37 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img .PHONY: all qemu clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -d in_asm + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -d in_asm + +clippy: + cargo xclippy --target=$(TARGET) clean: cargo clean diff --git a/02_multicore_rust/Makefile b/02_multicore_rust/Makefile index 6cfaf5cb..9e6276bf 100644 --- a/02_multicore_rust/Makefile +++ b/02_multicore_rust/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,26 +26,34 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img .PHONY: all qemu clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -d in_asm + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -d in_asm clippy: cargo xclippy --target=$(TARGET) diff --git a/03_uart1/Makefile b/03_uart1/Makefile index cfe6c745..a339629e 100644 --- a/03_uart1/Makefile +++ b/03_uart1/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,26 +26,34 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img .PHONY: all qemu clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial null -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial null -serial stdio clippy: cargo xclippy --target=$(TARGET) diff --git a/04_mailboxes/Makefile b/04_mailboxes/Makefile index b3fec44e..a339629e 100644 --- a/04_mailboxes/Makefile +++ b/04_mailboxes/Makefile @@ -26,26 +26,34 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img .PHONY: all qemu clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial null -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial null -serial stdio clippy: cargo xclippy --target=$(TARGET) diff --git a/05_uart0/Makefile b/05_uart0/Makefile index 4797e77b..31029409 100644 --- a/05_uart0/Makefile +++ b/05_uart0/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,26 +26,34 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img .PHONY: all qemu clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio clippy: cargo xclippy --target=$(TARGET) diff --git a/06_raspbootin64/Makefile b/06_raspbootin64/Makefile index 4797e77b..31029409 100644 --- a/06_raspbootin64/Makefile +++ b/06_raspbootin64/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,26 +26,34 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img .PHONY: all qemu clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio clippy: cargo xclippy --target=$(TARGET) diff --git a/07_abstraction/Makefile b/07_abstraction/Makefile index b3e446c7..d9d3fd56 100644 --- a/07_abstraction/Makefile +++ b/07_abstraction/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,31 +26,40 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 .PHONY: all qemu raspboot clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) diff --git a/08_random/Makefile b/08_random/Makefile index b3e446c7..d9d3fd56 100644 --- a/08_random/Makefile +++ b/08_random/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,31 +26,40 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 .PHONY: all qemu raspboot clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) diff --git a/09_delays/Makefile b/09_delays/Makefile index b3e446c7..d9d3fd56 100644 --- a/09_delays/Makefile +++ b/09_delays/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,31 +26,40 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 .PHONY: all qemu raspboot clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) diff --git a/0A_power/Makefile b/0A_power/Makefile index b3e446c7..d9d3fd56 100644 --- a/0A_power/Makefile +++ b/0A_power/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,31 +26,40 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev + +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 .PHONY: all qemu raspboot clippy clean objdump nm all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) diff --git a/0B_hw_debug_JTAG/Makefile b/0B_hw_debug_JTAG/Makefile index c1cc504f..f6d95a8f 100644 --- a/0B_hw_debug_JTAG/Makefile +++ b/0B_hw_debug_JTAG/Makefile @@ -46,7 +46,7 @@ DOCKER_ARG_NET = --network host DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 -.PHONY: all qemu raspboot clippy clean objdump nm jtag +.PHONY: all qemu raspboot clippy clean objdump nm jtagboot openocd gdb gdb-opt0 all: clean kernel8.img diff --git a/0C_exception_levels/Makefile b/0C_exception_levels/Makefile index b3e446c7..f6d95a8f 100644 --- a/0C_exception_levels/Makefile +++ b/0C_exception_levels/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,31 +26,44 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils +CONTAINER_OPENOCD = andrerichter/raspi3-openocd +CONTAINER_GDB = andrerichter/raspi3-gdb + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev +DOCKER_ARG_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/jtag +DOCKER_ARG_NET = --network host -.PHONY: all qemu raspboot clippy clean objdump nm +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 + +.PHONY: all qemu raspboot clippy clean objdump nm jtagboot openocd gdb gdb-opt0 all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) @@ -63,3 +76,23 @@ objdump: nm: cargo nm --target $(TARGET) -- kernel8 | sort + +jtagboot: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_JTAG) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_RASPBOOT) /jtag/jtag_boot.img + +openocd: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_NET) $(CONTAINER_OPENOCD) + +define gen_gdb + $(XRUSTC_CMD) -- $1 + cp $(CARGO_OUTPUT) kernel8_for_jtag + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_NET) $(CONTAINER_GDB) \ + gdb-multiarch -q kernel8_for_jtag +endef + +gdb: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2) + +gdb-opt0: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2 -C opt-level=0) diff --git a/0C_exception_levels/src/gpio.rs b/0C_exception_levels/src/gpio.rs index 608ba532..ad104078 100644 --- a/0C_exception_levels/src/gpio.rs +++ b/0C_exception_levels/src/gpio.rs @@ -1,7 +1,7 @@ /* * MIT License * - * Copyright (c) 2018 Andre Richter + * Copyright (c) 2018-2019 Andre Richter * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/0C_exception_levels/src/mbox.rs b/0C_exception_levels/src/mbox.rs index aeae88bb..a9791c80 100644 --- a/0C_exception_levels/src/mbox.rs +++ b/0C_exception_levels/src/mbox.rs @@ -1,7 +1,7 @@ /* * MIT License * - * Copyright (c) 2018 Andre Richter + * Copyright (c) 2018-2019 Andre Richter * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/0C_exception_levels/src/uart.rs b/0C_exception_levels/src/uart.rs index 4172e059..d3f5796c 100644 --- a/0C_exception_levels/src/uart.rs +++ b/0C_exception_levels/src/uart.rs @@ -1,7 +1,7 @@ /* * MIT License * - * Copyright (c) 2018 Andre Richter + * Copyright (c) 2018-2019 Andre Richter * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/0D_virtual_memory/Makefile b/0D_virtual_memory/Makefile index b3e446c7..f6d95a8f 100644 --- a/0D_virtual_memory/Makefile +++ b/0D_virtual_memory/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,31 +26,44 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils +CONTAINER_OPENOCD = andrerichter/raspi3-openocd +CONTAINER_GDB = andrerichter/raspi3-gdb + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev +DOCKER_ARG_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/jtag +DOCKER_ARG_NET = --network host -.PHONY: all qemu raspboot clippy clean objdump nm +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 + +.PHONY: all qemu raspboot clippy clean objdump nm jtagboot openocd gdb gdb-opt0 all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) @@ -63,3 +76,23 @@ objdump: nm: cargo nm --target $(TARGET) -- kernel8 | sort + +jtagboot: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_JTAG) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_RASPBOOT) /jtag/jtag_boot.img + +openocd: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_NET) $(CONTAINER_OPENOCD) + +define gen_gdb + $(XRUSTC_CMD) -- $1 + cp $(CARGO_OUTPUT) kernel8_for_jtag + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_NET) $(CONTAINER_GDB) \ + gdb-multiarch -q kernel8_for_jtag +endef + +gdb: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2) + +gdb-opt0: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2 -C opt-level=0) diff --git a/0D_virtual_memory/src/delays.rs b/0D_virtual_memory/src/delays.rs index 63414e4f..b1c1fa0f 100644 --- a/0D_virtual_memory/src/delays.rs +++ b/0D_virtual_memory/src/delays.rs @@ -1,7 +1,7 @@ /* * MIT License * - * Copyright (c) 2018 Andre Richter + * Copyright (c) 2018-2019 Andre Richter * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/0E_cache_performance/Makefile b/0E_cache_performance/Makefile index b3e446c7..f6d95a8f 100644 --- a/0E_cache_performance/Makefile +++ b/0E_cache_performance/Makefile @@ -1,7 +1,7 @@ # # MIT License # -# Copyright (c) 2018 Andre Richter +# Copyright (c) 2018-2019 Andre Richter # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -26,31 +26,44 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils +CONTAINER_OPENOCD = andrerichter/raspi3-openocd +CONTAINER_GDB = andrerichter/raspi3-gdb + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev +DOCKER_ARG_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/jtag +DOCKER_ARG_NET = --network host -.PHONY: all qemu raspboot clippy clean objdump nm +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 + +.PHONY: all qemu raspboot clippy clean objdump nm jtagboot openocd gdb gdb-opt0 all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) @@ -63,3 +76,23 @@ objdump: nm: cargo nm --target $(TARGET) -- kernel8 | sort + +jtagboot: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_JTAG) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_RASPBOOT) /jtag/jtag_boot.img + +openocd: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_NET) $(CONTAINER_OPENOCD) + +define gen_gdb + $(XRUSTC_CMD) -- $1 + cp $(CARGO_OUTPUT) kernel8_for_jtag + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_NET) $(CONTAINER_GDB) \ + gdb-multiarch -q kernel8_for_jtag +endef + +gdb: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2) + +gdb-opt0: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2 -C opt-level=0) diff --git a/0E_cache_performance/src/delays.rs b/0E_cache_performance/src/delays.rs index 63414e4f..b1c1fa0f 100644 --- a/0E_cache_performance/src/delays.rs +++ b/0E_cache_performance/src/delays.rs @@ -1,7 +1,7 @@ /* * MIT License * - * Copyright (c) 2018 Andre Richter + * Copyright (c) 2018-2019 Andre Richter * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/0F_global_println/Makefile b/0F_global_println/Makefile index 750ad650..f6d95a8f 100644 --- a/0F_global_println/Makefile +++ b/0F_global_println/Makefile @@ -26,31 +26,44 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils +CONTAINER_OPENOCD = andrerichter/raspi3-openocd +CONTAINER_GDB = andrerichter/raspi3-gdb + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev +DOCKER_ARG_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/jtag +DOCKER_ARG_NET = --network host -.PHONY: all qemu raspboot clippy clean objdump nm +DOCKER_EXEC_QEMU = qemu-system-aarch64 -M raspi3 -kernel kernel8.img +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 + +.PHONY: all qemu raspboot clippy clean objdump nm jtagboot openocd gdb gdb-opt0 all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_QEMU) -serial stdio raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) @@ -63,3 +76,23 @@ objdump: nm: cargo nm --target $(TARGET) -- kernel8 | sort + +jtagboot: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_JTAG) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_RASPBOOT) /jtag/jtag_boot.img + +openocd: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_NET) $(CONTAINER_OPENOCD) + +define gen_gdb + $(XRUSTC_CMD) -- $1 + cp $(CARGO_OUTPUT) kernel8_for_jtag + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_NET) $(CONTAINER_GDB) \ + gdb-multiarch -q kernel8_for_jtag +endef + +gdb: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2) + +gdb-opt0: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2 -C opt-level=0) diff --git a/10_DMA_memory/Makefile b/10_DMA_memory/Makefile index be8d37ef..a5266116 100644 --- a/10_DMA_memory/Makefile +++ b/10_DMA_memory/Makefile @@ -26,32 +26,45 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_MISC = -v $(shell pwd)/../emulation:/emulation -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = bash /emulation/qemu_multi_uart.sh -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils +CONTAINER_OPENOCD = andrerichter/raspi3-openocd +CONTAINER_GDB = andrerichter/raspi3-gdb + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev +DOCKER_ARG_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/jtag +DOCKER_ARG_NET = --network host +DOCKER_ARG_EMU = -v $(shell pwd)/../emulation:/emulation -.PHONY: all qemu raspboot clippy clean objdump nm +DOCKER_EXEC_QEMU = bash /emulation/qemu_multi_uart.sh +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 + +.PHONY: all qemu raspboot clippy clean objdump nm jtagboot openocd gdb gdb-opt0 all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(DOCKER_MISC) $(UTILS_CONTAINER) $(QEMU_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_EMU) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_QEMU) raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) @@ -64,3 +77,23 @@ objdump: nm: cargo nm --target $(TARGET) -- kernel8 | sort + +jtagboot: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_JTAG) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_RASPBOOT) /jtag/jtag_boot.img + +openocd: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_NET) $(CONTAINER_OPENOCD) + +define gen_gdb + $(XRUSTC_CMD) -- $1 + cp $(CARGO_OUTPUT) kernel8_for_jtag + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_NET) $(CONTAINER_GDB) \ + gdb-multiarch -q kernel8_for_jtag +endef + +gdb: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2) + +gdb-opt0: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2 -C opt-level=0) diff --git a/11_exceptions_groundwork/Makefile b/11_exceptions_groundwork/Makefile index be8d37ef..a5266116 100644 --- a/11_exceptions_groundwork/Makefile +++ b/11_exceptions_groundwork/Makefile @@ -26,32 +26,45 @@ TARGET = aarch64-unknown-none SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld -OBJCOPY = cargo objcopy -- + +XRUSTC_CMD = cargo xrustc --target=$(TARGET) --release +CARGO_OUTPUT = target/$(TARGET)/release/kernel8 + +OBJCOPY = cargo objcopy -- OBJCOPY_PARAMS = --strip-all -O binary -UTILS_CONTAINER = andrerichter/raspi3-utils -DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work -w /work -DOCKER_MISC = -v $(shell pwd)/../emulation:/emulation -DOCKER_TTY = --privileged -v /dev:/dev -QEMU_CMD = bash /emulation/qemu_multi_uart.sh -RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img +CONTAINER_UTILS = andrerichter/raspi3-utils +CONTAINER_OPENOCD = andrerichter/raspi3-openocd +CONTAINER_GDB = andrerichter/raspi3-gdb + +DOCKER_CMD = docker run -it --rm +DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work +DOCKER_ARG_TTY = --privileged -v /dev:/dev +DOCKER_ARG_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/jtag +DOCKER_ARG_NET = --network host +DOCKER_ARG_EMU = -v $(shell pwd)/../emulation:/emulation -.PHONY: all qemu raspboot clippy clean objdump nm +DOCKER_EXEC_QEMU = bash /emulation/qemu_multi_uart.sh +DOCKER_EXEC_RASPBOOT = raspbootcom /dev/ttyUSB0 + +.PHONY: all qemu raspboot clippy clean objdump nm jtagboot openocd gdb gdb-opt0 all: clean kernel8.img -target/$(TARGET)/release/kernel8: $(SOURCES) - cargo xbuild --target=$(TARGET) --release +$(CARGO_OUTPUT): $(SOURCES) + $(XRUSTC_CMD) -kernel8.img: target/$(TARGET)/release/kernel8 +kernel8.img: $(CARGO_OUTPUT) cp $< . $(OBJCOPY) $(OBJCOPY_PARAMS) $< kernel8.img qemu: all - $(DOCKER_CMD) $(DOCKER_MISC) $(UTILS_CONTAINER) $(QEMU_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_EMU) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_QEMU) raspboot: all - $(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD) + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_TTY) \ + $(CONTAINER_UTILS) $(DOCKER_EXEC_RASPBOOT) kernel8.img clippy: cargo xclippy --target=$(TARGET) @@ -64,3 +77,23 @@ objdump: nm: cargo nm --target $(TARGET) -- kernel8 | sort + +jtagboot: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_JTAG) $(CONTAINER_UTILS) \ + $(DOCKER_EXEC_RASPBOOT) /jtag/jtag_boot.img + +openocd: + $(DOCKER_CMD) $(DOCKER_ARG_TTY) $(DOCKER_ARG_NET) $(CONTAINER_OPENOCD) + +define gen_gdb + $(XRUSTC_CMD) -- $1 + cp $(CARGO_OUTPUT) kernel8_for_jtag + $(DOCKER_CMD) $(DOCKER_ARG_CURDIR) $(DOCKER_ARG_NET) $(CONTAINER_GDB) \ + gdb-multiarch -q kernel8_for_jtag +endef + +gdb: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2) + +gdb-opt0: clean $(SOURCES) + $(call gen_gdb,-C debuginfo=2 -C opt-level=0)