keigo1216 / ketchup

raspberrypi 3A+用のOS
1 stars 0 forks source link

implement user mode #32

Closed keigo1216 closed 9 months ago

keigo1216 commented 9 months ago

カーネルから, shell.cを非特権モードで実行するためのプログラムをかく

keigo1216 commented 9 months ago

qemu上でxp /x 0x1000000を実行したら0だったので, メモリマップがうまくできてなさそう

keigo1216 commented 9 months ago

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もうまく動く(なんで?)

keigo1216 commented 9 months ago

ページテーブルのベースアドレスは、物理アドレス指定なので、KERNEL_BASE_ADDRESS分を引いてあげる(まだバグは残ってそう)

keigo1216 commented 9 months ago

ttbr0_el1に新しいページテーブルをセットしたら動かなくなるから、ページテーブルの問題説