From 6870d22e7084aa46cf262f6a86de294c67fe6e60 Mon Sep 17 00:00:00 2001 From: Ray-1026 <0410330@gmail.com> Date: Sat, 22 Jun 2024 04:11:33 +0800 Subject: [PATCH 1/4] lab6 --- lab5/src/lib/kernel/exception.c | 5 +- lab5/src/lib/kernel/sched.c | 12 +- lab5/src/lib/kernel/syscall.c | 1 + lab6/.gitignore | 3 + lab6/Makefile | 57 +++ lab6/bcm2710-rpi-3-b-plus.dtb | Bin 0 -> 32761 bytes lab6/bootloader/bcm2710-rpi-3-b-plus.dtb | Bin 0 -> 32761 bytes lab6/bootloader/bootloader.img | Bin 0 -> 5128 bytes lab6/bootloader/config.txt | 3 + lab6/bootloader/include/bcm2837/rpi_base.h | 6 + lab6/bootloader/include/bcm2837/rpi_gpio.h | 25 ++ lab6/bootloader/include/bcm2837/rpi_uart1.h | 19 + lab6/bootloader/include/power.h | 8 + lab6/bootloader/include/shell.h | 23 ++ lab6/bootloader/include/uart1.h | 11 + lab6/bootloader/include/utils.h | 11 + lab6/bootloader/makefile | 42 +++ lab6/bootloader/src/boot.S | 52 +++ lab6/bootloader/src/link.ld | 30 ++ lab6/bootloader/src/main.c | 46 +++ lab6/bootloader/src/shell.c | 101 ++++++ lab6/bootloader/src/uart1.c | 83 +++++ lab6/bootloader/src/utils.c | 133 +++++++ lab6/config.txt | 3 + lab6/include/bcm2837/rpi_base.h | 7 + lab6/include/bcm2837/rpi_gpio.h | 25 ++ lab6/include/bcm2837/rpi_irq.h | 24 ++ lab6/include/bcm2837/rpi_mbox.h | 17 + lab6/include/bcm2837/rpi_mmu.h | 8 + lab6/include/bcm2837/rpi_uart1.h | 19 + lab6/include/cpio.h | 41 +++ lab6/include/dtb.h | 28 ++ lab6/include/exception.h | 59 ++++ lab6/include/irqtask.h | 22 ++ lab6/include/list.h | 137 ++++++++ lab6/include/mbox.h | 63 ++++ lab6/include/memory.h | 70 ++++ lab6/include/mmu.h | 45 +++ lab6/include/power.h | 9 + lab6/include/sched.h | 64 ++++ lab6/include/shell.h | 28 ++ lab6/include/signal.h | 11 + lab6/include/stddef.h | 6 + lab6/include/string.h | 21 ++ lab6/include/syscall.h | 23 ++ lab6/include/timer.h | 28 ++ lab6/include/uart1.h | 18 + lab6/initramfs.cpio | Bin 0 -> 251392 bytes lab6/rootfs/file1.txt | 38 ++ lab6/rootfs/file2.txt | 1 + lab6/rootfs/file3 | 1 + lab6/rootfs/userprog | Bin 0 -> 24 bytes lab6/rootfs/vm.img | Bin 0 -> 247488 bytes lab6/src/boot.S | 83 +++++ lab6/src/cpio.c | 50 +++ lab6/src/dtb.c | 150 ++++++++ lab6/src/entry.S | 144 ++++++++ lab6/src/exception.c | 95 +++++ lab6/src/irqtask.c | 65 ++++ lab6/src/linker.ld | 27 ++ lab6/src/main.c | 41 +++ lab6/src/mbox.c | 23 ++ lab6/src/memory.c | 369 ++++++++++++++++++++ lab6/src/mmu.c | 77 ++++ lab6/src/sched.S | 59 ++++ lab6/src/sched.c | 153 ++++++++ lab6/src/shell.c | 219 ++++++++++++ lab6/src/signal.c | 65 ++++ lab6/src/string.c | 252 +++++++++++++ lab6/src/syscall.c | 206 +++++++++++ lab6/src/timer.c | 163 +++++++++ lab6/src/uart1.c | 194 ++++++++++ lab6/upload.py | 86 +++++ lab6/user_program/Makefile | 24 ++ lab6/user_program/linker.ld | 5 + lab6/user_program/userprog.S | 11 + 76 files changed, 4040 insertions(+), 8 deletions(-) create mode 100644 lab6/.gitignore create mode 100644 lab6/Makefile create mode 100644 lab6/bcm2710-rpi-3-b-plus.dtb create mode 100644 lab6/bootloader/bcm2710-rpi-3-b-plus.dtb create mode 100755 lab6/bootloader/bootloader.img create mode 100644 lab6/bootloader/config.txt create mode 100644 lab6/bootloader/include/bcm2837/rpi_base.h create mode 100644 lab6/bootloader/include/bcm2837/rpi_gpio.h create mode 100644 lab6/bootloader/include/bcm2837/rpi_uart1.h create mode 100644 lab6/bootloader/include/power.h create mode 100644 lab6/bootloader/include/shell.h create mode 100644 lab6/bootloader/include/uart1.h create mode 100644 lab6/bootloader/include/utils.h create mode 100644 lab6/bootloader/makefile create mode 100644 lab6/bootloader/src/boot.S create mode 100644 lab6/bootloader/src/link.ld create mode 100644 lab6/bootloader/src/main.c create mode 100644 lab6/bootloader/src/shell.c create mode 100644 lab6/bootloader/src/uart1.c create mode 100644 lab6/bootloader/src/utils.c create mode 100644 lab6/config.txt create mode 100644 lab6/include/bcm2837/rpi_base.h create mode 100644 lab6/include/bcm2837/rpi_gpio.h create mode 100644 lab6/include/bcm2837/rpi_irq.h create mode 100644 lab6/include/bcm2837/rpi_mbox.h create mode 100644 lab6/include/bcm2837/rpi_mmu.h create mode 100644 lab6/include/bcm2837/rpi_uart1.h create mode 100644 lab6/include/cpio.h create mode 100644 lab6/include/dtb.h create mode 100644 lab6/include/exception.h create mode 100644 lab6/include/irqtask.h create mode 100644 lab6/include/list.h create mode 100644 lab6/include/mbox.h create mode 100644 lab6/include/memory.h create mode 100644 lab6/include/mmu.h create mode 100644 lab6/include/power.h create mode 100644 lab6/include/sched.h create mode 100644 lab6/include/shell.h create mode 100644 lab6/include/signal.h create mode 100644 lab6/include/stddef.h create mode 100644 lab6/include/string.h create mode 100644 lab6/include/syscall.h create mode 100644 lab6/include/timer.h create mode 100644 lab6/include/uart1.h create mode 100644 lab6/initramfs.cpio create mode 100644 lab6/rootfs/file1.txt create mode 100644 lab6/rootfs/file2.txt create mode 100644 lab6/rootfs/file3 create mode 100755 lab6/rootfs/userprog create mode 100644 lab6/rootfs/vm.img create mode 100644 lab6/src/boot.S create mode 100644 lab6/src/cpio.c create mode 100644 lab6/src/dtb.c create mode 100644 lab6/src/entry.S create mode 100644 lab6/src/exception.c create mode 100644 lab6/src/irqtask.c create mode 100644 lab6/src/linker.ld create mode 100644 lab6/src/main.c create mode 100644 lab6/src/mbox.c create mode 100644 lab6/src/memory.c create mode 100644 lab6/src/mmu.c create mode 100644 lab6/src/sched.S create mode 100644 lab6/src/sched.c create mode 100644 lab6/src/shell.c create mode 100644 lab6/src/signal.c create mode 100644 lab6/src/string.c create mode 100644 lab6/src/syscall.c create mode 100644 lab6/src/timer.c create mode 100644 lab6/src/uart1.c create mode 100644 lab6/upload.py create mode 100644 lab6/user_program/Makefile create mode 100644 lab6/user_program/linker.ld create mode 100644 lab6/user_program/userprog.S diff --git a/lab5/src/lib/kernel/exception.c b/lab5/src/lib/kernel/exception.c index 928ba84b9..3e5e6ad90 100644 --- a/lab5/src/lib/kernel/exception.c +++ b/lab5/src/lib/kernel/exception.c @@ -82,6 +82,7 @@ void irq_handler_c(trapframe_t *tf) schedule(); } + // only do signal handler when return to user mode (0b0000) if ((tf->spsr_el1 & 0b1100) == 0) { check_signal(tf); } @@ -147,15 +148,12 @@ void el0_sync_router(trapframe_t *tf) kill(tf, (int)tf->regs[0]); break; case 8: - // uart_printf("syscall_no: %d\n", syscall_no); signal_register(tf->regs[0], (void (*)())tf->regs[1]); break; case 9: - // uart_printf("syscall_no: %d\n", syscall_no); signal_kill(tf->regs[0], tf->regs[1]); break; case 50: - // uart_printf("syscall_no: %d\n", syscall_no); signal_return(tf); break; default: @@ -188,6 +186,7 @@ void el0_irq_router(trapframe_t *tf) schedule(); } + // only do signal handler when return to user mode (0b0000) if ((tf->spsr_el1 & 0b1100) == 0) { check_signal(tf); } diff --git a/lab5/src/lib/kernel/sched.c b/lab5/src/lib/kernel/sched.c index 68f8f4039..9c53b4f86 100644 --- a/lab5/src/lib/kernel/sched.c +++ b/lab5/src/lib/kernel/sched.c @@ -69,7 +69,7 @@ thread_t *thread_create(void *start, int priority) r->used = 1; r->ustack_ptr = (char *)kmalloc(USTACK_SIZE); r->kstack_ptr = (char *)kmalloc(KSTACK_SIZE); - r->cpu_context.lr = (unsigned long)start; + r->cpu_context.lr = (unsigned long)start; // current thread's return address r->cpu_context.sp = (unsigned long)(r->ustack_ptr + USTACK_SIZE); r->cpu_context.fp = (unsigned long)(r->ustack_ptr + USTACK_SIZE); @@ -190,11 +190,13 @@ int exec_thread(char *data, unsigned int datasize) void run_user_process() { - asm("msr tpidr_el1, %0\n\t" - "msr elr_el1, %1\n\t" - "msr spsr_el1, xzr\n\t" + asm("msr tpidr_el1, %0\n\t" // Hold the "kernel(el1)" thread structure information + "msr elr_el1, %1\n\t" // When el0 -> el1, store return address for el1 -> el0 + "msr spsr_el1, xzr\n\t" // Enable interrupt in EL0 -> Used for thread scheduler "msr sp_el0, %2\n\t" "mov sp, %3\n\t" "eret\n\t" ::"r"(¤t->cpu_context), - "r"((unsigned long)current->data), "r"(current->cpu_context.sp), "r"(current->kstack_ptr + KSTACK_SIZE)); + "r"((unsigned long)current->data), "r"(current->cpu_context.sp), + "r"(current->kstack_ptr + KSTACK_SIZE)); // sp is reference for the same el process. For example, el2 cannot use + // sp_el2, it has to use sp to find its own stack. } \ No newline at end of file diff --git a/lab5/src/lib/kernel/syscall.c b/lab5/src/lib/kernel/syscall.c index a67580dc4..2f1a2527f 100644 --- a/lab5/src/lib/kernel/syscall.c +++ b/lab5/src/lib/kernel/syscall.c @@ -161,6 +161,7 @@ void signal_return(trapframe_t *tf) { unsigned long signal_ustack; // to get the start address of the user stack if (tf->sp_el0 % USTACK_SIZE != 0) { + // if the stack uses stack, return to the start of the stack signal_ustack = tf->sp_el0 - (tf->sp_el0 % USTACK_SIZE); } else { diff --git a/lab6/.gitignore b/lab6/.gitignore new file mode 100644 index 000000000..d558147b0 --- /dev/null +++ b/lab6/.gitignore @@ -0,0 +1,3 @@ +.vscode +build/ +img/ \ No newline at end of file diff --git a/lab6/Makefile b/lab6/Makefile new file mode 100644 index 000000000..b64a14140 --- /dev/null +++ b/lab6/Makefile @@ -0,0 +1,57 @@ +CC = aarch64-linux-gnu +CFLAGS = -Wall -nostdlib -nostartfiles -ffreestanding -Iinclude -mgeneral-regs-only + +SRC_DIR = src +INCLUDE_DIR = include +KERNEL_DIR = kernel +LIB_DIR = lib +BOOT_DIR = bootloader +BUILD_DIR = build +IMG_DIR = img + +OBJECTS = $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(wildcard $(SRC_DIR)/*.c)) +OBJECTS += $(patsubst $(SRC_DIR)/%.S, $(BUILD_DIR)/%_s.o, $(wildcard $(SRC_DIR)/*.S)) + +HEADERS = $(wildcard $(INCLUDE_DIR)/*.h) + +ELF_NAME = kernel8.elf +IMG_NAME = kernel8.img +BOOT_ELF_NAME = bootloader.elf +BOOT_IMG_NAME = bootloader.img +CPIO_FILE = initramfs.cpio + +all: clean $(OBJECTS) $(HEADERS) + $(CC)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/$(ELF_NAME) $(OBJECTS) + $(CC)-objcopy -O binary $(BUILD_DIR)/$(ELF_NAME) $(IMG_DIR)/$(IMG_NAME) + +$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c + @mkdir -p $(BUILD_DIR) + @mkdir -p $(IMG_DIR) + $(CC)-gcc $(CFLAGS) -c $< -o $@ + +$(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S + $(CC)-gcc $(CFLAGS) -c $< -o $@ + +clean: + rm -rf $(BUILD_DIR) $(IMG_DIR) + +dump: + qemu-system-aarch64 -M raspi3b -kernel $(IMG_DIR)/$(IMG_NAME) -initrd $(CPIO_FILE) -display none -d in_asm -dtb bcm2710-rpi-3-b-plus.dtb + +run: all + qemu-system-aarch64 -M raspi3b -kernel $(IMG_DIR)/$(IMG_NAME) -initrd $(CPIO_FILE) -display none -serial null -serial stdio -s -dtb bcm2710-rpi-3-b-plus.dtb + +tty: + qemu-system-aarch64 -M raspi3b -kernel $(IMG_DIR)/$(BOOT_IMG_NAME) -initrd $(CPIO_FILE) -display none -serial null -serial pty + +upload: + sudo python3 upload.py + +cpio: + cd rootfs && find . | cpio -o -H newc > ../$(CPIO_FILE) + +screen: + sudo screen /dev/ttyUSB0 115200 + +userprog: + cd user_program && make clean && make diff --git a/lab6/bcm2710-rpi-3-b-plus.dtb b/lab6/bcm2710-rpi-3-b-plus.dtb new file mode 100644 index 0000000000000000000000000000000000000000..38395a23fc90767680815c7f43bbfb3a290c2af0 GIT binary patch literal 32761 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�D&OoC_~4g9tivONVZxf$G+%wkS(-3$L@6`g_7TDCjX zZ0wGe1kn#$y$N03GHt`At5nL~a;sv6?tVfLDtBzZfvLbSPPlEX)KP=ol3y$FuZ?K# zXq{r6RCi!U&_G1m5U=65R9h>Z>G;rAvqX;HRd$z~6%TKR)pAgjR>?KEc2EoOFI}HT z(Zk+nZg2C&R%k#PL<|DCfDac}0}-x51h)~K?qcnF74kM)Fxcu&T_b z;N~L)VOxvMMmg|KwHr9ZRqhdz%wl+uLlI??rK2!lgi~v-g%I6`f&Mc>*Fc1>5Jg9` z^17#s*d9?dyRD%lOrK+iLQh^iVS_5lE(U?YdK6{9i&rZx;GjZX*QY@bZ2zJ#%`RG- zkJK}Q(H=>QUv1*wgAN>)c8|B*&27)R8E*hT~6VH+RLhvRq~;)h{3J~sayp*djcq?x^z z*=bP$8ODfDCznO<1T0!-efE&~Xu4M?b4?Ws7QJ>Z)|qMrada*+YQ<9qvbpLa3nJ%q zqJM5wVdWq~YHPXb@qjovoJ|L>VpsV3h4W*g84}b?cxp=Ca`=_C$B&co(w^hZu*X+ysto}0S)*bX?FdxfaP>9TytA4wwD77_a_A9Hp#OVEWA!Fl_#JplwLCf-}ERJi*| MwhYsc7a#HeA5G>kdjJ3c literal 0 HcmV?d00001 diff --git a/lab6/bootloader/bcm2710-rpi-3-b-plus.dtb b/lab6/bootloader/bcm2710-rpi-3-b-plus.dtb new file mode 100644 index 0000000000000000000000000000000000000000..38395a23fc90767680815c7f43bbfb3a290c2af0 GIT binary patch literal 32761 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�D&OoC_~4g9tivONVZxf$G+%wkS(-3$L@6`g_7TDCjX zZ0wGe1kn#$y$N03GHt`At5nL~a;sv6?tVfLDtBzZfvLbSPPlEX)KP=ol3y$FuZ?K# zXq{r6RCi!U&_G1m5U=65R9h>Z>G;rAvqX;HRd$z~6%TKR)pAgjR>?KEc2EoOFI}HT z(Zk+nZg2C&R%k#PL<|DCfDac}0}-x51h)~K?qcnF74kM)Fxcu&T_b z;N~L)VOxvMMmg|KwHr9ZRqhdz%wl+uLlI??rK2!lgi~v-g%I6`f&Mc>*Fc1>5Jg9` z^17#s*d9?dyRD%lOrK+iLQh^iVS_5lE(U?YdK6{9i&rZx;GjZX*QY@bZ2zJ#%`RG- zkJK}Q(H=>QUv1*wgAN>)c8|B*&27)R8E*hT~6VH+RLhvRq~;)h{3J~sayp*djcq?x^z z*=bP$8ODfDCznO<1T0!-efE&~Xu4M?b4?Ws7QJ>Z)|qMrada*+YQ<9qvbpLa3nJ%q zqJM5wVdWq~YHPXb@qjovoJ|L>VpsV3h4W*g84}b?cxp=Ca`=_C$B&co(w^hZu*X+ysto}0S)*bX?FdxfaP>9TytA4wwD77_a_A9Hp#OVEWA!Fl_#JplwLCf-}ERJi*| MwhYsc7a#HeA5G>kdjJ3c literal 0 HcmV?d00001 diff --git a/lab6/bootloader/bootloader.img b/lab6/bootloader/bootloader.img new file mode 100755 index 0000000000000000000000000000000000000000..714047f833bf9dff1f1a974874cd4fe69c66673e GIT binary patch literal 5128 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 W{XY)>ne%p%87L|9I)aD3ef + load 32bits from to x0 +ldr w0, + load 64bits from to w0 +cbz x0,