マイペースなプログラミング日記

x86エミュレータやFPGA、WebGLにお熱なd-kamiがマイペースに書くブログ

最初の一歩

BeagleBoard-xM用のOSを作ってみたいと思い現在頑張っているところだが、まずブートローダから作成することにした。以下の作業はgccを入れたFedora 14で行った。まずARMのクロス開発環境をhttp://www.codesourcery.com/sgpp/lite/arm/portal/release1803からダウンロードしてインストールした。またqemu-omap3をhttp://code.google.com/p/qemu-omap3/からダウンロードしてインストールした。qemu-system-armができるが、qemu-omap3に名前変更(もしかして、qemuインストール時に入ったqemu-system-armと一緒か?)。そしてhttp://beagleboard.googlecode.com/files/signGP.cを保存してコンパイルする。

gcc signGP.c -o signGP

これで準備は完了。これからARMのアセンブリを書く。とは言ってもレジスタに値を代入して無限ループするだけのもの。

    mov r0, #0xDD
    b.

これをtest.Sという名前で保存した。そしてアセンブラにかける

arm-none-linux-gnueabi-as test.S

これでELF形式のa.outが出力されるので、ヘッダなどを取り除くためにobjcopyを利用する

objcopy -I elf32-i386 -O binary a.out test

これでtestというファイルができる。そしてsignGPでtestに情報付加する

./signGP test

これでtest.iftが作られるのでこれをqemuに読み込ませる

qemu-omap3 -M beagle -mtdblock test.ift

これで実行できるが、何が起こってるのかわからないのでqemu-monitorを使う。そこでinfo registersとやると以下のようになった。R0がしっかり変わってる。これでスタートを切ることができた!