Closed keigo1216 closed 11 months ago
qemu
上でxp /x 0x1000000
を実行したら0
だったので, メモリマップがうまくできてなさそう
set_ttbr0_el1
を実行した後に, switch_contextを実行すると, ret(つまり, start_taskを実行するとこ)で止まる
set_ttrbr0_el1((uint64_t)next_proc->page_table);
switch_context(&prev_proc->sp, &next_proc->sp);
IN: switch_context
0xffff0000000818f4: a9bf4ff4 stp x20, x19, [sp, #-0x10]!
0xffff0000000818f8: a9bf57f6 stp x22, x21, [sp, #-0x10]!
0xffff0000000818fc: a9bf5ff8 stp x24, x23, [sp, #-0x10]!
0xffff000000081900: a9bf67fa stp x26, x25, [sp, #-0x10]!
0xffff000000081904: a9bf6ffc stp x28, x27, [sp, #-0x10]!
0xffff000000081908: a9bf77fe stp x30, x29, [sp, #-0x10]!
0xffff00000008190c: 910003e9 mov x9, sp
0xffff000000081910: f9000009 str x9, [x0]
0xffff000000081914: f9400029 ldr x9, [x1]
0xffff000000081918: 9100013f mov sp, x9
0xffff00000008191c: a8c177fe ldp x30, x29, [sp], #0x10
0xffff000000081920: a8c16ffc ldp x28, x27, [sp], #0x10
0xffff000000081924: a8c167fa ldp x26, x25, [sp], #0x10
0xffff000000081928: a8c15ff8 ldp x24, x23, [sp], #0x10
0xffff00000008192c: a8c157f6 ldp x22, x21, [sp], #0x10
0xffff000000081930: a8c14ff4 ldp x20, x19, [sp], #0x10
0xffff000000081934: d65f03c0 ret
set_ttrbr0_el1
をコメントアウトすると, retもうまく動く(なんで?)
ページテーブルのベースアドレスは、物理アドレス指定なので、KERNEL_BASE_ADDRESS分を引いてあげる(まだバグは残ってそう)
ttbr0_el1に新しいページテーブルをセットしたら動かなくなるから、ページテーブルの問題説
カーネルから, shell.cを非特権モードで実行するためのプログラムをかく