Rustでベアメタルプログラミングをやってみた(その2)

ytakano.hatenablog.com↑前回

前回はQEMUでビデオメモリへの描画まではできたが、実機で描画はできていなかった。その後色々と試行錯誤した結果、実機でもマンデルブロ集合を描画することに成功した。現状、Raspberry Pi 4でのベアメタルプログラミングの記事が多くないため、思い返すと大変つまらないことで難儀していた(というか、そもそもベアメタルプログラミングの記事が少ない)。

f:id:ytakano:20200229224214j:plain

ベアメタルプログラミング on 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で動かないために焦ったが、無事に動いてなによりである。それでは皆さん、良いハッキングライフを。ソワカ