[OOPer's page TOP]
Powered by Google.

OOPer's BBS

[最新発言順リスト][トップレベル発言リスト] [投稿]
2363 OOPer: BeagleBoardソフト編準備中 遅過ぎ![2009/09/11(Fri) 05:18:14] (2315へのコメント:コメント数13) へのコメント

2375 OOPer: BeagleBoardソフト編U-boot起動プログラムまとめ[2009/09/16(Wed) 19:09:49]

Ubuntu(xfce)でのセルフ開発環境構築
・BeagleBoardUbuntuのページにあるやり方で、私と同じ環境(日本語設定のUbuntu9.04)からRootfsを作ると、日本語フォントが無いままでメニュー等が日本語化された状態になるので、まずは日本語フォントインストールする。
1)xfceを立ち上げた後、画面下部のパネルからターミナルを手探りでクリックして起動。
2)apt-getは入ってるので、sudo apt-get language-support-fonts-jaでフォントをインストール。
3)再起動すると、日本語でメニュー等が表示されるようになる。
・で、そのままだとgccさえ入っていない。最低限gcc、できればmakeもインストールする。apt-getでも、GUIのパッケージマネージャーでもお好きな方で。git(パッケージ名はgit-core)があれば、X-Loader, U-boot, Linuxなんかのソースも直接引っ張って来れるので便利。エディタもデフォルトではvi(Linuxなんで当然vim)しか入ってないので、お好きなものを。ドキュメントビューアとかブラウザとかも有った方が良い。
・後はHello, World!でも打ち込んでみて、上手くコンパイル・実行できるか確かめる。アセンブリソースを出力させるとGNU-as流の記述方法と、ARMのアセンブリプログラミングのコツが分かる。

U-boot起動プログラムの開発
※ここではU-bootからgoコマンドで起動することを想定。bootmで起動する場合は、細部がだいぶ変わって来る…と思って大変なんでまじめには調べてない。
・エントリーポイントとソースコード
 U-bootのgoコマンドからのエントリーポイントは、通常のmainと同じインターフェースになっているので、次のような感じでソースコードを記述する。
mypgm.c:
int main(int argc, char *argv[])
{

return 〜;
}

※何もincludeしていない。Linux環境化で走らせるためのlibとかヘッダはそのままでは使えない(注意深く選り分ければ使えるものも有るだろうが…)ので、どうしても必要な場合は、ソースコードごと
ぱくってくること。

・コンパイル
gcc -c mypgm.c
 gccコマンドでリンクまでやってしまうと、Linux環境用のcrt0.oやらlibcやらがくっついてしまうので、必ず-cを指定してコンパイルまでで止める。最適化オプションなどはお好きなように。ざっと見た感じでは-Oさえ指定すれば、-f〜系の細かい指示はしなくてもかなり最適化してくれる。
 処理結果がどこからも参照されないような空ループはループ自体が削られるので注意。私はgcc -S 〜.cで、必ずアセンブリソースも出力させて中身を確認している。特にmain以外の関数を定義している場合、コード生成の加減からアセンブリコードの出力順がcソースと変わって来る時があるので、そこら辺も注意。
 これで、mypgm.oが出来る。

・リンク
ld -Bstatic -e main -Ttext 0x80300000 -o mypgm mypgm.o
 -Bstaticは、ライブラリーをリンクしなけりゃ要らないように思うんだが念のため。-e mainは、実行ファイルに埋め込むエントリーポイントの指定。この後バイナリーイメージにしちゃうので、この情報は消えちゃうんだが、指定しないとリンカー(ld)に怒られた。-Ttextでロードアドレス=実行開始アドレスにするつもりの実アドレスを入れる。0x80300000は、SDRAMの先頭から3MB空けたところだが、小さいプログラムならこれで問題無く動く。
 これでmypgmが出来る。

・バイナリーイメージの取出し
objcopy -O binary mypgm mypgm.bin
 ELF形式のオブジェクトファイルになっているmypgmからバイナリーイメージだけを取り出す。

・FAT領域へのコピー
cp mypgm.bin /media/disk/
※FAT領域が/media/diskにマウントされているものとしている。FAT領域には他のファイルがうようよあってもあまり問題は無い。(時々原因不明にファイルが読めなくなる。)

ここまでできたら、シリアルポートにターミナルを接続して、リセットするなり「再起動」を選ぶなりして、U-bootがオートブートする前に止める。

U-bootでの操作
mmcinit
※U-bootのバージョンによっては、mmc init。
fatload mmc 0 80300000 mypgm.bin
※80300000は、リンク時に指定したアドレス。
go 80300000
※これで実行。終了するとリターンコードを表示してくれる。

U-boot起動時の状態
・Nonsecure priviledged(svc)
・命令キャッシュ・分岐予測ON
・L2キャッシュはON(どっかの書き込みでOFFみたいに書いたのは確認漏れ)
※但しL2キャッシュはデータキャッシュをONにしないと無効。
・データキャッシュ、MMUはOFF
[返信]

この発言へのコメント…
2381 OOPer: BeagleBoard USERスイッチによるU-bootスクリプトの制御[2009/09/19(Sat) 06:46:36]

[ この発言からのツリーを全て読む] [ この発言からのツリーリスト]
[ この発言より新しい発言を全て読む] [ この発言より新しい発言リスト]

[OOPer's page TOP]