OS が永遠の学習課題になりつつあるので、これはいかんといっぺん通して学習すべしと思い、蔵書の「はじめてのOSコードリーディング」とかUNIX v6関係の資料を見ていたものの、最近のリソースを使わない手は無いとMIT の xv6 (x86へ最近のCで再実装)を調べてたら、近年は RISC-V に移行していた ^^;
ならばということで、この RISC-V 版の xv6 で学習すべくリサーチ & 環境整備
VirtualBoxでDebian VM作ってというのが普通(?)っぽいが、Rasp4(8GB) で動くかなという単純な疑問から以下を実施、結論としてはあまりにすんなり動いて...問題なし。QEMUでkernelが起動してます。
(1) 機材、Raspi4(8GB) 暫く前に調達してた ^^、OSは直近のRaspiOS(Bullseyeでないといかんとのこと、kernel 5.15.61-v8+ #1579)
(2) sudo apt-get update/upgrade を済ませたらxv6のbuildに必要なものを入れる
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
(3) xv6のリポをgit clone
git clone https://github.com/mit-pdos/xv6-riscv.git
(4) 上記でcloneしたディレクトリに移動して、
$ make qemu
# kernelがbuildされる...
init: starting sh
$
"$"が表示されたらxv6-riscv kernelの下、shが起動してます
lsすると^^
次回以降もxv6-riscvのディレクトリから make qemu でさっくり起動します(buildしないのですぐ起動)
qemuの停止方法は Ctrl+a を押して一旦手を離した後 x で。
(5) MITのコースでは課題をスムーズにこなせるように上記のものから若干(?)改変したものをgithubに上げています
Assignmentsをやるのでこっちも別リポをcloneしてbuild
$ git clone https://github.com/mit-pdos/xv6-riscv-fall19.git
Cloning into 'xv6-riscv'...
...
$ cd xv6-riscv-fall19
$ git checkout util
utilの別ブランチでAssignment等の作業します。
kernelのbuild
$ make
$ make qemu
とすると、kernal起動時にqemuから rom: requested regiron overlap (rom phdr #0: kernel/kernel. free=0x0000000080012558, addr=0x0000000080000000) qemu-system-riscv64: rom check and register reset failed ... と怒られ kernel が起動しません ^^;
結論としてはバッティングしてる領域を解放するためにqemuのオプションに --bios none を指定します(Makefile中 196行目 QEMYOPTS の1行目の終わり辺りに追記しました)
初期状態でいくつかのプログラムが存在しており、大元のxv6-riscvのkernelをbuildしたてとは異なります。
Raspi4(8GB) のqemuでもRISC-V版のxv6がスムーズに遊べ..もとい学習出来るとは、
さぁ、学習 ^^
本家のテキスト 、RISC-V版の最新版はSep 2022のrev3
git clone git://github.com/mit-pdos/xv6-riscv-book.git
邦訳(July 2020 RISC-V版) https://www.sugawara-lab.jp/fig/xv6-riscv-jpn.pdf
OSTEP(OS: Three Easy Pieces 本)のページ https://pages.cs.wisc.edu/~remzi/OSTEP/