2016/05/18

[bb]BeagleBoard(無印)を久々に使う (1) - kernelまで進まん

部屋の掃除をしていたら、BeagleBoardが出てきた。
な、懐かしい・・・。
当時は画期的だったのだけど、今は似たようなボードがたくさん出てきて、年数も経って忘れ去れてしまったように思う。

でも、Cortex-A8ベースでけっこういいのだよ。
Linuxも動くし、Androidも当時は動くくらいだったのだ。

Raspberry Piが手元にあるけど、この人も久々に使ってみよう。


まずは、Linuxがほしい。
ほしいのだが、これがなかなか探し出せない。
古いというのもあるが、BeagleBoardはシリーズとして、無印、xM、BeagleBone、BeagleBone Blackなどいろいろあり、BeagleBoardで検索してもBeagleBoneの方が出てきやすいのだ。
新しいのはBeagleBone Blackで、略称はBBBらしい。漫画のタイトルかと思ったよ。

 

さて、そういうして見つけたのが、こちら。
BeagleBoard - Linux on ARM - eewiki

ちゃんと「BeagleBoard Cx」と書いてある。
うちにあるのは、C4版だ。

このサイトはかなり手順がきっちり書かれていて、コピペでほとんど実行できるレベルだ。
助かった。

助かったのだけど、kernelが起動しない。。。
たぶん、カーネルの解凍メッセージが表示されて起動していくのだろうが、u-bootの「Starting kernel ...」の後が続かないのだ。
うーむ。


解凍の「Uncompressing~」というメッセージを出すのは、arch/arm/boot/compressed/misc.c辺りのようだ。
だから、少なくともここまでは届いていない。。。か、コンソール出力先がu-bootから切り替わってしまったか。

u-bootではBeagleBoardのP9で出力していて、これはOMAPのUART3になっている。
UART3だから、ttyO2になるはずだし、u-bootもttyO2だから間違いは無いだろう。
記憶では、Uncompressingのメッセージまではu-bootで使っていた出力先だったような気がする。
自信は全くないのだが、Uncompressingのメッセージ以降が出力されない、という現象だった気がするのだ。
まあ、まだカーネルに出力が移っていないから、生きている出力先を使っているだけかもしれない。

生きている出力先?
どうやってzImageの自己解凍処理が生きているUARTを見つけ出すのだろうか。。
カーネルの方はbootargsからconsoleを参照するし、earlyprintkはたぶんCONFIG設定のDEBUG_OMAP3UART3を見てくれると思う。
今まで何気なく出力されていたものが、こんなに意味を持つとは。。。

 

えーっと、decompress_kernel()でputstr()を呼んでる。
putstr()はputc()を呼んでる。
putc()はマクロでicedcc_putc()を使っている。
icedcc_putc()は、中でアセンブラを呼んでいる。どこかのステータスをぐるぐる監視して、解放されたら

asm("mcr p14, 0, %0, c1, c0, 0" : : "r" (ch));

とするだけ。
たぶん、UARTの送信バッファが空いているかチェックしているのだろう。
MCRは、ARMレジスタからコプロセッサにデータを移す命令らしい。
コプロ??
あ、これはCONFIG_DEBUG_ICEDCCのときだけだった。

じゃあ、単に標準のputc()を呼ぶだけか。
OSが無いときに「標準」といわれてもねぇ。。。
まあ、それこそ、u-bootがUART3を使ったように、zImageもUART3を使ってくれると考えた方が楽だな。


今日は、このくらいで許してやろう。。。と強がりたいところだが、見当が付いていない。

このあたりはシングルプロセスだから、JTAGデバッガで追おうと思えば追えるはず。
けど、それをやる気力も無いし、それくらいだったら普通の手段で解決させたいのだ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。