Rustでベアメタルプログラミングをやってみた(その2)
前回はQEMUでビデオメモリへの描画まではできたが、実機で描画はできていなかった。その後色々と試行錯誤した結果、実機でもマンデルブロ集合を描画することに成功した。現状、Raspberry Pi 4でのベアメタルプログラミングの記事が多くないため、思い返すと大変つまらないことで難儀していた(というか、そもそもベアメタルプログラミングの記事が少ない)。
実機での描画からEL3での起動までの道
7日目(2月24日)
実機で試してみたところ、どうにも動かないので、一旦ペリフェラルのコードをRustではなく、C言語に置き換えた。Rustの吐き出すアセンブリコードを眺めていたところ、アラインメントあたりが怪しい気がした。
8日目(2月25日)
いろいろ調べた結果、Rustでコンパイルする際に指定するターゲットアーキテクチャが間違っていたようなので、ターゲットを変えて試してみたところ無事に実機でも動いた。
9日目(2月26日)
シリアルコンソールにボードのバージョンなどいろいろな情報を出すようにしていた。
10日目(2月28日)
仮想メモリを実装しようとMMUに手を入れようとしたが、先に例外ハンドラを実装。その後、EL3で自作カーネルを動かそうとしたがうまく動かず、色々とドキュメントを見て調べていた。
11日目(2月29日)
EL3で動かすためにはファームウェアを書き換えないといけないっぽいので、ファームウェアのコードを自分のコードにポーティング。その結果EL3で起動させることに成功。
というわけで、色々と試行錯誤した結果、基本的なコードは実機でも動くようになった。一時はRustで動かないために焦ったが、無事に動いてなによりである。それでは皆さん、良いハッキングライフを。ソワカ。