もう1つの冴えたやり方
これまで検討してきたのは以下の3つの方法だった。
- redbootをel版にさしかえ(普通この方法だがJTAGがないのでリスキー)
- kernel loader ルーチンでARMのレジスタさわってエンディアン切り替え
- redbootからAPEXを起動して、APEXでエンディアン切り替え後にkernelロード
しかし、新手を試みている人を発見した。
ようするに、リトルエンディアンで作ったkernelをbyteswapして、それをredbootでロードすればいいということだ。
それは思いつかなかったけど、案外簡単な方法だよ。
んで、それを試している人。
http://peter.korsgaard.com/articles/debian-nslu2.php
そのためのPythonスクリプトも用意されている。
APEXの中身は、レジスタかbyteswapかどちらなんだろう...
まぁ、しかし、これは難しいという環境でも、いろんな手段があるもんだねぇ。だいぶ勉強になりました。
んで、試す。
# ./byteswap.py zImage.el zImage.elswap # LANG=C ls -al zImage.el* -rwxr-xr-x 1 root root 744260 Aug 30 21:14 zImage.el -rw-r--r-- 1 root root 744260 Sep 6 20:52 zImage.elswap RedBoot> load -r -v -b 0x01600000 zImage.elswap Using default protocol (TFTP) / Raw file loaded 0x01600000-0x016b5b43, assumed entry at 0x01600000 RedBoot> exec 0x01600000 Using base address 0x01600000 and length 0x000b5b44 ocnUerpmnissiL g.xun dabpizggam n ciebmu- yS -metslah
うはは、メッセージもひっくりかえってら(^^;。
たぶん、もとに戻すと、こんなんかな。
Uncompressing Linux. bad gzip magic number System halt
gzipアーカイブ部のmagic numberがgzipのじゃないといって展開ルーチンが途中で止まってしまったか。swapしたので位置がずれたかな。
わずかしか前進しなかったよ...