QEMUとかコンパイラとか

RaspberryPi上でMinixを動かす事を目標として…ただRaspberryPiは課題が多いので、

まずはQemu上の他のマシン上を目指してみる。

 

いろいろ試してみて分かった事をメモっておく。

Qemu

-kernel引数

-kernelに渡すElfバイナリのデータは、Elfバイナリに従ってメモリに展開される。

これはエントリポイントを含む。だからエントリポイントはElfにちゃんと書いていればどこでも良い。…ただ対象のボードのSDRAM上な。何もないとこに展開させたらその瞬間にクラッシュするので。

 

-M <machine>

qemuも全部のボードを網羅してない(できるわけがない)

代表的なボードとしてvexpressボードやversatilepbボードが割と有名なのでそれが使われがちだが

いや良いんだけど、、versatileボードってやっぱメモリマップとか古いので、、最大256MBしかないし…

Documentation – Arm Developer

 

qemuを見るとvirtボード使ってくれ!!って書かれてたので、ラズパイ4みたいな最近のリッチなボードをエミュレーションするならそれが良さそう

詳細はぐぐれ。

移植先もversatilepbよりvirtボードの方がいいかなあ。。

 

-initrd

これに指定したデータはメモリ256MB以上のメモリの先頭から128MBのとこ

…つまりbase + 0x08000000に展開される。

qemu/hw/boot.c参照

    info->initrd_start = info->loader_start +

        MIN(info->ram_size / 2, 128 * MiB);

Minixの場合各種サーバーはinitrdの方が美しい気がする

 

コンパイラ

脱線なんだけど

arm-none-eabi と arm-none-eabihf って何が違うんだろうって思ってたら

-mfloat-abiのデフォルト設定値の違いだけなんですね。

浮動小数点数の演算方法の違いだけどこれも詳細はググった方がいいかな。