もう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したので位置がずれたかな。
わずかしか前進しなかったよ...