Jan RinzeのTrendtacなページ
21/07/08 更新:
400 Mhzのラップトップを買ったら...私が手にしたのは335 MHz MIPSのLinuxおもちゃ機だったのです。
"学ぶこと、遊ぶこと、創造すること、そして働くことは全て同じ:
つまりは脳を楽しませるということだ :-)"
03/08/08
更新:
Trendtacを壊してしまいましたが何とか復旧しました。そしてその過程でuBootについてとFlashイメージの復旧について分かりました。
"壊れていないなら弄らない方がいい。だがどうしても弄りたいのなら、まずは壊すことだ
;-)"
イントロダクション
クロスコンパイリング
ネイティブコンパイラ
JFFS2イメージのマウント
Flash内のカーネルを復旧
イントロダクション:
私は最近IntertoysでTrendtac EPC 700 (MIPS linux UMPC)を229ユーロで入手しました。購入時はこれが何なのか知らなかったので驚きました。これは決して本当のラップトップではないし、馬力は控えめに言っても弱いです。
しかし、だからといってこのラップトップがつまらないということではありません。それどころかこれはれっきとしたLinuxが動くエレクトロニクス機なのです。そして少なくとも私に楽しいハッキングの時間を与えてくれるはずです。
www.trendtac.nlにて小技やリカバリ(壊れたとき用)の手順などの有用な情報が見つかります。また、このサイトではコンソールアクセスの方法についても記載されています。このプラットフォーム向けのLinuxに関する更なる情報はIngenic
Semiconductor Co, Ltd Webページやlinux-mipsWebサイトを参照してください。
以下はコンソールの写真です。
次のステップ...適切なクロスコンパイラ環境:
このラップトップはJZ4730 SOC MIPS プロセッサを使用します。このプロセッサは現在デスクトップPCなどで使用されているx86シリーズのプロセッサとは違います。ソフトウェアをコンパイルしたり新しいカーネルをビルドするには、クロスコンパイラと呼ばれるものが必要です。このプロセッサに対応したクロスコンパイラを探しているならこのリンクを参照してください。ftp://ftp.ingenic.cn/3sw/01linux/00toolchain/
適切なtoolchainを入れることで2.4.20カーネルと2.6.24カーネルの両方をビルドすることができるようになります。カーネル用のソースや他のものも同じFTPサイトに置いてあります。
クロスコンパイラを解凍したら有名な'Hello
World'のテストを始めてみます。
/*
Hello World application */
#include
<stdlib.h>
int
main( int argc , char ** argv)
{
printf("Hello World\n");
return 0;
}
これをデスクトップPCのクロスコンパイラでコンパイルするには:
$
mipsel-linux-gcc -o hello ./hello.c
これでMIPS上で動くHelloという実行可能ファイルが完成しました。SDカード経由でラップトップに転送してテストしてみてください。
~ $ cd
/SD/SD_1/
/SD/SD_1
$ ./hello
Hello
World
/SD/SD_1
$
これで今コンパイルしたプログラムがMIPSラップトップで動作することが分かります。
ネイティブコンパイリング:
'Etch'ディストリビューション用のDebianレポジトリ内にはmipselプラットフォーム用のバイナリがたくさんあります。このリポジトリはパッケージを探すことができるので、gccと関連したソフトウェアを検索しました。その結果以下のファイルが見つかりました:
Debianパッケージは中にcontrol.tar.gz
と data.tar.gz を含むアーカイブです。control.tar.gz
は通常インストール後の動作やアンインストール用で、 data.tar.gz
にはインストール時にルートディレクトリにコピーされるファイルが格納されています。なので、これらをEPC 700にインストールしたいなら各.debファイルから
data.tar.gz を探し出してEPC 700上に展開します。
これを簡単に行うためのシンプルスクリプトは:
(注意:これは EPC 700
上でのみ利用可能です。また、上に挙げた.debファイルのみテスト済みですが、他の.debファイルは問題があるかもしれません。)
全ての.debファイルをSDカードへコピーし、以下のコマンドを入力します:
cd /SD/SD_1/
for
package in $( ls *.deb ); do ar -x $package data.tar.gz ; tar xzf ./data.tar.gz -C / ; done
rm
./data.tar.gz
ln
-s /usr/bin/gcc-4.1 /usr/bin/gcc
これで必要なファイルがEPC
700の適切な場所にコピーされます。ln
宣言で新しいgcc-4.1へのソフトリンクが作成され、gccと入力されるだけで gcc-4.1を呼び出すことができるようになります。
しかし残念ながらこれだけではまだ足りません。コンパイラを使用しようとしても新しくインストールされたライブラリが見つかりません。EPC 700のディストリビューションには適切なld.so.confがないので作成する必要があるのです。(この例は上手く行きますが、これは適切な方法ではないと考える人もいるでしょう)
echo
"# default libc configuration" >> /etc/ld.so.conf
echo
"/lib" >> /etc/ld.so.conf
echo
"/usr/lib" >> /etc/ld.so.conf
echo
"/usr/local/lib" >> /etc/ld.so.conf
ldconfig
これでライブラリが検出され、コンパイラのテストを続行することができます。
ここで先ほどのhello.cというファイルを使用し、SDカードへコピーしました。
/SD/SD_1
$ cat ./hello.c
/* Hello
World application */
#include <stdio.h>
#include <stdlib.h>
int main( int argc , char ** argv)
{
printf("Hello World\n");
return 0;
}
/SD/SD_1
$ gcc -o test ./hello.c
/SD/SD_1
$ ./test
Hello
World
/SD/SD_1
$
結果は良好です。これでEPC
700用のネイティブコンパイラが用意できました。しかしまだカーネルヘッダファイルがありませんし、インストールしたlibc以外の開発ライブラリもありません。また、浮動小数点や最適化の問題もあります。FPを使う場合、-O2
と -O3は使ってはいけません。
どうやら現在Debian Sidレポジトリ内でgcc
4.3用のmultilibに対応しているようですが、gcc 4.3がEPC
700で動くかどうかは分かりません。
ルートファイルシステムのハッキング:
www.trendtac.nl
で リカバリーイメージを入手することもできます。解凍するとminifs.img
と Recovery_EPC700.img
の2つのファイルが出力されます。minifs.img
はリカバリ処理で内蔵Flashパーティションに直接コピーされるJFFS2イメージです。Recovery_EPC700.img
はtar bzipで圧縮されたファイルでルートファイルシステムを含んでいます。
この操作をする前に、必ず/dev/mtd0が存在しないことを確認してください!存在した場合、システムファームウェアを上書きしてしまう可能性があります!
デスクトップにJFFS2イメージをマウントすることで以下のメソッドを完了することができます。
modprobe
mtdcore
modprobe jffs2
modprobe mtdram
modprobe mtdchar
modprobe mtdblock
mkdir
/mnt/mips_image
dd if=minifs.img
of=/dev/mtd0
mount
/dev/mtdblock0 /mnt/mips_image
これでJFFS2復旧ファイルシステムイメージの検査や変更が可能になります。
#
ls /mnt/mips_image
bin
dir_1 etc
lib lost+found man opt
root share tmp var
dev
dir_2 info linuxrc make_sys mnt proc
sbin sys usr wkw_sh
#
次に何をするかは決まっていませんが、どう進めていくかは分かるでしょう。カーネルのアップデートについては、現時点ではショートカットはありません。また、現在SDカードからブートする'簡単な'方法を模索中です。
Flash内のカーネルを復旧:
Flashイメージを弄った結果、動かなくなったラップトップが手元に残りました。どうやらmtdblock1をマウントしようとするのはいい考えではないようです。JFFS2は即座にパーティションをフォーマットしなおし、結果としてFlashイメージには'lost+found'フォルダのみでした。幸運なことに mtdblock1のコピーが残っていて、また大量の半田付け(RS232コンバーター)の結果シリアル接続でPC上からuBootプロンプトが可能でした。
また、uBootブートローダーを含むmtdblock0のコピーも取っていたので、バイナリを覗くことでuimageへのおもしろい参照を見つけることができました。uimageの読み込みの説明は新設にもプレーンテキストです。
なので、SDカードからuBootでフラッシュするためにカーネルを再読み込みするには:
> mmcinit
> fatload mmc 0 0x80600000 uimage
> nand erase 0x100000 0x180000
> nand write 0x80600000 0x100000 0x180000
> reset
これでカーネルはmtdblock0に復旧され、ラップトップは再び正常にブートするようになりました。
Original
page: playing with the
EPC 700
最近のコメント