2008年01月21日

D01NXをザウルスで動かす(usbserial+optionの組み合わせに挑戦)

前回挫折したクロスコンパイル。
何とかいい方法はないものか…と思っていたら、すばらしい記事に出会いました。

Android Zaurus: Building device driver for Angstrom
http://androidzaurus.seesaa.net/article/79091419.html

そのものずばり『Angstromでドライバをビルドする方法』です。
もう今の私のために書かれたとしか思えません。(笑)

で、早速試してみます。
手順は上記のサイトで完璧なのですが、覚え書きとしてここにも書いておきます。

まず、CodeSourceryのツールチェーンをダウンロードします。

Download GNU Toolchain
http://www.codesourcery.com/gnu_toolchains/arm/download.html

Target Platform:ARM GNU/Linux
Host Platform:IA32 GNU/Linux


を選択してください。Sourceは選択不要です。
ダウンロードが完了したら適当な場所に展開します。
上記のサイトの例に倣って /opt の配下にしましょう。
ついでに分かりやすいシンボリックリンクも張っておきます。
cd /opt
tar jxvf /tmp/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
ln -s arm-2007q3 arm-cc

これでコンパイラの準備は完了です。
続いてカーネルソースの準備をします。
使用するのは、何とAndroid用のカーネルソースです。

Zaurusに、Angstromに、Android…。

何だかすごい世界になってきてしまいました。
とうに理解の限界は超えていますが、とりあえず手順に従ってダウンロードします。
cd /tmp
wget http://android.googlecode.com/files/linux-2.6.23-android-m3-rc20.tar.gz
tar zxvf linux-2.6.23-android-m3-rc20.tar.gz
mv kernel linux-2.6.23-android-m3-rc20

これでソースの準備も出来ました。
コンパイルする前に、環境変数の設定をします。
export PATH=/opt/arm-cc/bin:$PATH
export CC=arm-none-linux-gnueabi-gcc

あとはいつものようにmake menuconfigです。
クロスコンパイル用のオプションが付くのでお気をつけを。
CROSS_COMPILE=arm-none-linux-gnueabi- make menuconfig

今回作りたいのは、usbserialoptionのモジュールだけです。余計なコンパイルをしないで済むように、良きに計らってください。あ、くれぐれも"Enable loadable module support"をONにするのをお忘れなく。(笑)
良きに計らえたら、モジュールを作成します。
CROSS_COMPILE=arm-none-linux-gnueabi- make modules

うまくいけばusbserial.kooption.koが作成されるはずです。
ちゃんとARM用のバイナリになっているか確認してみましょう。
$ file usbserial.ko
usbserial.ko: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped

どうやら大丈夫のようです。
あとはこの2つのファイルをザウルスにコピーし、cdc-acmを削除したらdepmodします。
ipkg remove kernel-module-cdc-acm
depmod -a

で、いよいよD01NXを刺します。
dmesgを見ると無事認識。モジュールとしてusbserialoptionがロードされ、/dev/ttyUSB0〜2が作成されました。モデムとして使うのはttyUSB1なので、パーミッションを変更します。
chmod 666 /dev/ttyUSB1

あとは /etc/ppp/peers/emobile のデバイス名を書き換えたら、ダイアルアップします。
pon emobile

無事ダイアルアップ成功!
早速wgetでダウンロード試験をしてみると…。

ダウンロードが途中で止まってしまいました。(涙)

URBBUFLENもいろいろ調整してみましたが、約5MBのファイルをダウンロードしきることは出来ませんでした。試したのは以下の4ケースです。

<デフォルト>
#define N_IN_URB 4
#define IN_BUFLEN 4096

<URBを減らす>
#define N_IN_URB 2
#define IN_BUFLEN 4096

<バッファを減らす>
#define N_IN_URB 4
#define IN_BUFLEN 1024

<URBもバッファも減らす>
#define N_IN_URB 2
#define IN_BUFLEN 1024

どの場合もダウンロード開始直後に -stalled- と表示されてしまい、ダウンロードが停止してしまいました。(多分ほんのちょっとはダウンロードできているはず)

ついでに上りの改善もやってみました。これは実績のある、

<上り用のUSBを増やす>
#define N_OUT_URB 4

というパターン。この場合5MBの3割くらいまで順調にダウンロードが進みます。そしてコンソールにどばっとエラーが出て、やはり -stalled-

無改造or下りを改造すると、ダウンロードがほとんどされない代わりにコンソールにもエラーが出ない、上りを改造するとダウンロードはそこそこ進む代わりにあとでコンソールにエラーを吐いて撃沈します。いずれにせよcdc-acmと違ってまともに使える状態にはなりませんでした。

ちなみにコンパイラまたはソースの問題も疑ってみようとcdc-acmもクロスコンパイルしてみたのですが、こちらは何の問題もなく使えました。なのでドライバをビルドする環境としては問題ないようです。

さて、期待のusbserial+optionが駄目となると、次はどうしましょうかねぇ。
前にMLで話題に出てきたairprimeにでも挑戦してみますか…。

安藤恐竜さん、ありがとうございました。
ZaurusAndroid化も機会があったら挑戦してみます!
posted by 月水和尚 (とも) at 13:42 | Comment(6) | TrackBack(0) | りなざう
この記事へのコメント
あっ。役に立ってるwwwよかったwww

C1000でしたっけ?defconfig-akitaを.configにコピーしちゃえばCONFIG_MODULE=yになるんですけど。なのでdefconfig-angstrom.tar.gzをおいといたんですが。

Android楽しいですよ、うふっ。
Posted by 安藤恐竜 at 2008年01月21日 20:17
安藤恐竜さん

もうめちゃくちゃ役立ちましたよ〜!ありがとうございます。
調子に乗ってairprimeもビルドしちゃいました。
結果は今しばらくお待ちを。(まだ動かしてないんです)

CONFIG_MODULEの話は自虐ネタです。
詳しくは前記事参照って事で。
ちなみに使ってるのはC750です。
akitaだとAngstromうまく動かないので。

AndroidってHDD非搭載機でも簡単に動かせます?
Posted by tomo at 2008年01月21日 20:47
C1000はcortezさんがAltbootでイメージつくってくれてますから、簡単。
http://androidzaurus.seesaa.net/article/79674410.html

C7x0とC860もAltbootのバグ回避法がみつかったようなので、もうすぐ簡単にインストールできるようになるでしょう。cortezさんが、今週はアメリカに出張しているようなので、早くても来週だと思いますが。
Posted by 安藤恐竜 at 2008年01月21日 21:41
安藤恐竜さん

わざわざ翻訳までありがとうございます!ちょうど3つに切ったSD(256MB/FAT,64MB/swap,192MB/ext3)があるので早速試してみますね。

あ、でもC1000をAndroid環境にしてしまうと、

 C1000:Android
 C750:Angstrom(D01NX開発)
 C700:pdaXrom

普通に使えるザウルスが残らないではないですか。(笑)

安藤恐竜さんのインストールイメージも楽しみにしてます!
Posted by tomo at 2008年01月21日 22:18
optionはだめですか、なかなかうまくいきませんねぇ。
先週からなんですが、ちょいと忙しくてしばらく手伝えないのが残念です。
Posted by masamura at 2008年01月23日 21:51
masamuraさん

私もすごい期待していたんですが駄目でした…。
頼みのairprimeも駄目で今は打つ手がない状態です。
cdc-acmはバッファサイズいじれば下りは改善できるはずなんですよね…やってみようかなぁ。

とか言いつつ、私もちょっと手が回ってなかったりします。
お互い時間のあるときに、のんびりと頑張っていきましょう。
Posted by tomo at 2008年01月24日 16:58
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。