diff --git "a/10225101447 \345\224\220\347\241\225 \345\256\236\351\252\214\344\270\200\345\256\236\351\252\214\346\212\245\345\221\212.docx" "b/10225101447 \345\224\220\347\241\225 \345\256\236\351\252\214\344\270\200\345\256\236\351\252\214\346\212\245\345\221\212.docx" new file mode 100755 index 0000000000000000000000000000000000000000..c0657c76f6d3974bca4a6e956389e62edb43a29e Binary files /dev/null and "b/10225101447 \345\224\220\347\241\225 \345\256\236\351\252\214\344\270\200\345\256\236\351\252\214\346\212\245\345\221\212.docx" differ diff --git a/kernel/arch/aarch64/boot/raspi3/init/tools.S b/kernel/arch/aarch64/boot/raspi3/init/tools.S index 805e03e8ae20ee17833cd42ce418ed352efb3176..7aa97208d05e8674eb5cd59c0cb872b5661d9ead 100644 --- a/kernel/arch/aarch64/boot/raspi3/init/tools.S +++ b/kernel/arch/aarch64/boot/raspi3/init/tools.S @@ -57,7 +57,7 @@ BEGIN_FUNC(arm64_elX_to_el1) /* LAB 1 TODO 1 BEGIN */ - + mrs x9, CurrentEL /* LAB 1 TODO 1 END */ // Check the current exception level. @@ -75,7 +75,12 @@ BEGIN_FUNC(arm64_elX_to_el1) // Set the return address and exception level. /* LAB 1 TODO 2 BEGIN */ - + + //msr sp_el1, + adr x9, .Ltarget + msr elr_el3,x9 + mov x9,#(0b1111<<6|0b0101) + msr spsr_el3,x9 /* LAB 1 TODO 2 END */ .Lin_el2: @@ -249,7 +254,10 @@ BEGIN_FUNC(el1_mmu_activate) mrs x8, sctlr_el1 /* Enable MMU */ /* LAB 1 TODO 4 BEGIN */ - + ORR X8, X8, #(0b11111)//MMU enable + ORR X8, X8, #(0b1<<12)//cache + //ORR X8, X8, #1 + MSR SCTLR_EL1, X8 /* LAB 1 TODO 4 END */ /* Disable alignment checking */ bic x8, x8, #SCTLR_EL1_A diff --git a/kernel/arch/aarch64/boot/raspi3/peripherals/uart.c b/kernel/arch/aarch64/boot/raspi3/peripherals/uart.c index 3a9ec299f2f801cfa382c3540b3090ba4c1b3512..fab999e751ea048cfe0fa53ae21f297c17c539d6 100644 --- a/kernel/arch/aarch64/boot/raspi3/peripherals/uart.c +++ b/kernel/arch/aarch64/boot/raspi3/peripherals/uart.c @@ -77,6 +77,10 @@ static void early_uart_send(unsigned int c) void uart_send_string(char *str) { /* LAB 1 TODO 3 BEGIN */ - + int i=0; + while(str[i]!='\0'){ + early_uart_send(str[i]); + i++; + } /* LAB 1 TODO 3 END */ }