Linux zaurusエレコムのUC-SGTが動くようにしてみるテストその2。


 色々資料を調べると、PL-2303XはPL-2303と初期化パラメータが違うらしい。
力技でpl2303.cを無理やりPL-2303Xの初期化パラメータを流し込むように
書き換えて、PL-2303X専用モジュールにしようかと思ったけれど、
更にググっているうちに、pl2303.cに対するパッチがいくつかあるのに気づいた。
 この中で、バッファローのLinkstation(というか玄箱)用Linuxに対応する
IOデータのUSB-RSAQ用パッチが、SL-C3000カーネルソースにあるpl2303.cに
ぴったりはまることが判明。早速パッチを当ててから、make dep && make moduleすると
RSAQ3に関係するところでエラーが出たのでこれを削って再びmake module。
出来上がったものをリナザウにコピーして念のためリブート。UC-SGTを挿してから
cuを立ち上げると、見事入力した文字がPC側のハイパーターミナルに表示された。


 ここまでの手順を忘れないようにメモ。


 VMWAREを使ってクリーンなVine Linuxの環境を構築。

#apt-get install ncurses

も忘れずに。


 ここからコンパイラ、ライブラリ、ヘッダファイル、ユーティリティーをダウンロードして、

#rpm -Uvh gcc-cross-sa1100-2.95.2-0.i386.rpm
#rpm -Uvh glibc-arm-2.2.2-0.i386.rpm
#rpm -Uvh linux-headers-arm-sa1100-2.4.6-3.i386.rpm
#rpm -Uvh binutils-cross-arm-2.11.2-0.i386.rpm

などとしてインストールする。



 次にここからカーネルソースをダウンロードして解凍、展開する。
 カーネルソースはbzip2で圧縮されているので展開にはbzip2が必要。
 例えばSL-C3000の場合、ホームディレクトリから

$bzip2 -d linux-c3000-20041116-rom1_01.tar.bz2
$tar xvf linux-c3000-20041116-rom1_01.tar

などとすると、~/linux/以下にソースが展開される。
※C1000の場合、~/linux_n1というディレクトリに展開されるので、以下「~/linux→~/linux_n1」と読み替えるか、

mv linux_n1 linux

などとする。


ここで、先ほどインストールしたクロスコンパイラにパスを通しておく。

$export PATH=$PATH:/opt/Embedix/tools/bin/

 この作業は毎回起動時に必要。面倒なら.cshrcなどに記述しておく。


 ~/linux/arch/arm/def-configs/にあるコンフィグファイルから、機種にあわせて
対応するものを~/linux/.configにコピーしてmake menuconfigを実行。

A300 --- discovery
B500 --- poodle-j
C700 --- corgi
C750 --- shepherd-j
C760 --- husky-j
C860 --- boxer-j
6000 --- tosa-j
C3000 --- spitz-j
C1000 --- akita-j
※C3100,C3200はわからなかった
C3100 --- borzoi-j
C3200 --- terrier-j
※nyanonon様から情報提供

 
C3000の場合、

$cp ~/linux/arch/arm/def-configs/spitz-j ~/linux/.config
$cd ~/linux
$make menuconfig


 うまくいけばしらばくするとCUIでconfigを設定する画面になるので、カーソルキーで
「USB support」を選択してEnterを押し、次のメニューで下のほうにある「USB Serial Converter support」を選ぶと
usbserialモジュールを作るか聞いてくるのでmを押して選択、すると更に選択肢が出てくるので
「USB Prolific 2303〜」のところでMを押してモジュールを選択。カーソルキーの右を
押してExitを選んでEnterを押すと上のメニューに戻るので数回繰り返して、カーネルコンフィグを
セーブして終了。


 ここで「make dep && make module」すると、PL-2303Xに非対応のモジュールが作られる。
 2303Xに対応させるパッチはここにあるpl2303x.patch.gzを拾ってきて
~/linux/上で

$gunzip pl2303x.patch.gz

として解凍し、

$patch -p0 -b < pl2303x.patch

でパッチを当てる。
 ここで、パッチの当たった~/linux/drivers/usb/serial/pl2303.cから、
67行目付近のUSB-RSAQ3に対応した部分、

{ USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },

をviなどで削除する。
 また、~/linux/drivers/usb/serial/pl2303.hの21行目付近、ELECOMの行で、
プロダクトIDを0x5003から0x5004に変更する。

#define ELECOM_PRODUCT_ID 0x5003
   ↓
#define ELECOM_PRODUCT_ID 0x5004


 これら一連のパッチ当てと変更が終わったら、~/linuxから

$make dep && make modules

でモジュールを作成する。


 無事エラーが出ないで終わったら、~/linux/drivers/usb/serial/に作られた
usbserial.oとpl2303.oをリナザウの/lib/modules/2.4.20/kernel/drivers/usb/に
コピーする。
(C3000未満は/lib/modules/2.4.18/kernel/drivers/usb)


 最後に

#/sbin/depmod -a

を実行して、モジュールの依存関係を再構築する。


 あとはUSBホストケーブル(もしくはCF-USBカード)を使ってUC-SGTを接続すると
dmesgで認識したのが確認できるはずである。lsmodでもpl2303.oがロードされたのが確認できる。
 しばらく待っていればdmesgの最後の行に(PL-2303X)と書かれ、/dev/ttyUSB0が
使えるようになっているはずである。
 もしデバイスが作られない場合は、

#mknod /dev/ttyUSB0 188 0

でデバイスノードを作成する。
 また、root以外でも読み書きできるように、

#chmod 666 /dev/ttyUSB0

を実行する。


 ここまで出来たので、bochsのシリアル設定に/dev/ttyUSB0を追加したところ、
DOS上でもUSBシリアルを使えるようになった。