Closed keigo1216 closed 11 months ago
基本的には参考にしているサイトと同じ 開発していて, 異なっていたところだけを示す.
risc-vアーキテクチャでは, デフォルトではOpenSBIのブートローダが起動する armではそのようなデフォルト実装のブートローダは存在しない qemuを起動する際には, 使用するラズパイにあったデバイスツリーを指定する.(githubからダウンロード可能). それぞれのラズパイにあったデバイスツリーファイルはhttps://forums.raspberrypi.com/viewtopic.php?t=238262
risc-v
OpenSBI
arm
qemu
0x80000アドレスにカーネルの先頭アドレスを配置する https://github.com/qemu/qemu/blob/4705fc0c8511d073bee4751c3c974aab2b10a970/hw/arm/raspi.c#L32C25-L32C32
0x80000
LDR命令でspへ直値を入れることはできないようなので, 一旦汎用レジスタにおいてからロードする. 汎用レジスタはX0からX7までは関数の引数などに使われるらしいので, X8を使用した
LDR
sp
X0
X7
X8
https://operating-system-in-1000-lines.vercel.app/ja/boot
ブート処理を作成する
基本的には参考にしているサイトと同じ 開発していて, 異なっていたところだけを示す.
ブートローダの選択
risc-v
アーキテクチャでは, デフォルトではOpenSBI
のブートローダが起動するarm
ではそのようなデフォルト実装のブートローダは存在しないqemu
を起動する際には, 使用するラズパイにあったデバイスツリーを指定する.(githubからダウンロード可能). それぞれのラズパイにあったデバイスツリーファイルはhttps://forums.raspberrypi.com/viewtopic.php?t=238262ブートプログラムの配置
0x80000
アドレスにカーネルの先頭アドレスを配置する https://github.com/qemu/qemu/blob/4705fc0c8511d073bee4751c3c974aab2b10a970/hw/arm/raspi.c#L32C25-L32C32スタックポインタのストア
LDR
命令でsp
へ直値を入れることはできないようなので, 一旦汎用レジスタにおいてからロードする. 汎用レジスタはX0
からX7
までは関数の引数などに使われるらしいので,X8
を使用した参考
https://operating-system-in-1000-lines.vercel.app/ja/boot