bucchiさんが改造されたZaurus3桁機用SDHC対応のドライバーをテストしてみました - その1

 う〜ん、bucchi さん、すごいです。SL-Zaurus 4桁機に続いて、3桁機用(SL-C750、SL-C760、SL-C860)の SDHC 対応(4GB 限定)ドライバーも作ってくれました。
 bucchi さんも言っていますが、今回のドライバーは SHARP のオリジナルドライバーを改造(2GB超SD、SDHC 対応)したものなので、安定性についてはまったく心配がなく、本命ドライバーの登場です
 私的には、SL-C860 をメインで使っているので、たいへんうれしく、これでまたしばらく戦えます。

今後のご報告予定

 書き始めたら一回でご報告するには、長くなりすぎると判断したので、以下の3つの記事に分けてご報告する予定です。

  • (1) これは、今回の報告内容ですが、ドライバーのインストール、アンイストール、そして、インストールパッケージに関する詳細について絞ってご報告します。
  • (2) 手元の12種類の SD/SDHC メモリーカードについて、認識状況と容量表示に絞ってテストしてみた結果について報告します。
  • (3) 今回のドライバーを生かすという意味で、4GB SDHC メモリーカードに絞って、SDHC メモリーカードへのアプリケーションのインストール、ベンチマークテスト結果について報告します。

SL-Zaurus 3桁機用 SD ドライバーについて

 まず、これまでに公開された SL-Zaurus 3桁機用 SD ドライバーについて、概観したいと思います。
 これまでも、SL-Zaurus 3桁機用 SD ドライバーについては、2GB超対応のものを Cake さんがスクラッチで開発(リンク先は InternetArchive です)されたり、SDIO の無線 LAN カード「Zentek(旧 C-guys)SD-Link11b」のドライバーが、2GB超の SD メモリーカードに対応していることが判明し、利用されてきましたが、下表のような利用上の制限事項が有り、これらの制限が日常の利用では結構、致命的で本格的には使われてこなかったようです。私も、「SD-Link11b 用ドライバー」はテストしたことがありますが、やはりサスペント/レジュームへの未対応の問題(ドライバーの動作を解析し、/etc/rc.d/init.d/sdio および /usr/sbin/sdiomgr を書き換えて対応したが、抜本的な対策にはならなかった)で本格的な利用には至りませんでした。

SD ドライバー名 説明 利用上の制限
Cake さん開発ドライバー(InternetArchive) Cake さんがスクラッチで開発された 2GB超 SD メモリーカードドライバー レジューム後の SD メモリーカードの認識に時間がかる(数秒〜10秒)、また、開発が途中でストップし、現在配布サイトも閉鎖されています。
SD-Link11b 用ドライバー SDIO の無線 LAN カード「Zentek(旧 C-guys)SD-Link11b」のドライバー。2GB超の SD メモリーカードに対応していることが判明し、利用されてきた。 公式な対象機種は、SL-C860SL-C760 のみ。サスペント/レジュームに未対応。
bucchi さん改造版 3桁機用 SDHC 対応ドライバー SHARP のオリジナルドライバーを改造(2GB超SD、SDHC対応)したものなので、安定性についてはまったく心配がなく、本命ドライバーの登場です。 対象機種は SL-Zaurus の3桁機の内 SL-C750SL-C760SL-C860 の3機種です。また、対応するメモリーカードは、SD メモリーカードは、4GB(非SDHC)まて、SDHC メモリーカードは 4GB 限定です。

テスト環境について

 今回のテストに使用した環境は以下の通りです。普段、RubyRuby/Qte のプログラミングに使用している専用端末を使用しました。

機種名 SL-C860
ROM Version 1.40 JP
Kernel Version Normal Kernel 2.4.18-rmk7-pxa3-embedix-021129
bash-2.05$ cat /proc/deviceinfo/product
SL-C860
bash-2.05$ cat /proc/deviceinfo/revision
1.40
bash-2.05$ cat /proc/version
Linux version 2.4.18-rmk7-pxa3-embedix-021129 (zaurus@sharplinux) (gcc version 2.95.2 19991024 (release)) #1 Thu, 6 Nov 2003 09:29:23 +0900
bash-2.05$ uname -a
Linux zaurus 2.4.18-rmk7-pxa3-embedix #1 Thu, 6 Nov 2003 09:29:23 +0900 armv5tel unknown
スクリーンショット [設定] - [システム情報]
スクリーンショット コマンドラインによる情報

今回のドライバーの仕様について

 今回の3桁機用(SL-C750、SL-C760、SL-C860)の SDHC 対応(4GB 限定)ドライバーの仕様はつぎのようです。

対象機種

 対象機種は SL-Zaurus の3桁機の内つぎの3機種です。SL-A300SL-B500SL-C700 には対応していませんのご注意ください。

No. 対応状況 機種名
1 × SL-A300
2 × SL-B500
3 × SL-C700
4 SL-C750
5 SL-C760
6 SL-C860
対応する SD/SDHC メモリーカード

 今回のドライバー(Ver1.0 zaurus-sd-driver-update_1.0-for-Cxx0_arm.ipk)が対応する SD/SDHC メモリーカードは、つぎの通りです。SD メモリーカードは、4GB(非SDHC)まて、SDHC メモリーカードは 4GB 限定です。
SD メモリーカード

容量 128MB以下 128MB 256MB 512MB 1GB 2GB 4GB(非SDHC)
対応状況

SDHC メモリーカード

容量 4GB 8GB 16GB 32GB
対応状況 × × ×
ドライバーインストール上の注意

 今回のドライバーのインストールにあたっては、つぎの条件を守ることが必要とのことです。(『3桁機用 SDHC ドライバ! - ぷちのいず』から引用しました)

  • SHARP オリジナルの SD メモリーカードドライバに対してバイナリパッチを当てる形でインストールしますので、他のSDドライバに置き換えられているとインストールに失敗します。
  • SD-Link11b や、2GB 以上を認識させる SD ドライバ(現在はサイトが閉鎖されているようです)などの SD メモリーカードドライバは、必ずアンインストールして、SHARP オリジナルのドライバーに戻した状態にしておく必要があります。
ドライバー利用上の注意
  • SD-Link11b のドライバーとの併用はできません。

ドライバーのインストール/アンインストールとテスト結果について

 ドライバーのインストール/アンインストールのテスト結果について、実際のインストール/アンインストール作業を元に報告します。

ドライバーのインストール/アンインストールのテスト結果

 ドライバーのインストール/アンインストールのテスト結果は下表の通りです。いずれのテストも問題ありませんでした。

テスト結果 テスト項目
インストール作業の最後でシステムの「再起動」が実行されるか?
正常にイントールされるか?(SHARP オリジナルのドライバーにバイナリーパッチが適用され SDHC 対応のドライバーが生成されるか)
正常にアンイントールされるか?(インストールしたファイルが削除されるか)
アンイントール後にSHARP オリジナルの SD メモリーカードドライバに戻るか?
ドライバーのインストール手順

 ここでは、つぎのような条件でインストールするとして説明します。

インストールパッケージが置いてあるディレクト 本体メモリー /home/zaurus/Documents/Install_Files
インストーラーの起動 ホーム画面のファイルタブ(ファイラー)からインストールパッケージを選択し、標準のインストーラーを起動する

ドライバーのインストール手順

スクリーンショット 操作説明
ホーム画面のファイルタブ(ファイラー)でインストールパッケージが置いてあるディレクトリ 本体メモリー /home/zaurus/Documents/Install_Files を表示し、[OK] または [Enter] キーで選択する
インストールパッケージ(zaurus-sd-driver-update_1.0-for-Cxx0_arm.ipk)が選択された形で標準のインストーラーが起動するので、[OK] または [Enter] キーで選択する
インストール先の選択ダイアログボックスが表示されるので、[本体メモリー] を選択して、[OK] キーを押す
ドライバーのインストールが開始される、インストールに必要な時間は20秒前後
インストール後にシステムが「再起動」される旨のダイアログボックスが表示されるので、確認後に [OK] キーを押す
「今から再起動します」のダイアログボックスが表示されるので、確認後に [OK] キーを押す
ドライバーのアンインストール手順
スクリーンショット 操作説明
[設定] - [ソフトウェアの追加/削除] メニューから、標準のインストーラーを起動し、[ソフトウェアをアンインストール] のボタンを押す
アンインストールするソフトウェアの選択画面が表示されるので、今回のドライバー「zaurus-sd-driver-update 1.0-for-Cxx0」を選択する
「アンインストールして良いか」の確認ダイアログボックスが表示されるので、内容を確認して [はい] のボタンを押す
アンインストールが実行される
「アンインストール完了」のダイアログボックスが表示されるので、指示に従って、[OK] キー、[Cancel]キー、[Cancel]キー の順に押し、標準のインストーラーを終了する
Qt メニューの「再起動」を選択し、システムの再起動を実行する
「再起動」の実行確認ダイアログボックスが表示されるので、 [はい] のボタンを押す

【技術的な解説】インストールパッケージの動作に関する情報

 以下のログは、今回、配布されているインストールパッケージ(zaurus-sd-driver-update_1.0-for-Cxx0_arm.ipk)について、自作のシェルスクリプト(ipk_info)で出力した情報です。この情報を元に、インストールパッケージの動作について解析してみたので解説します。

  • (1) 『3桁機用 SDHC ドライバ! - ぷちのいず』のページでも、説明されていますが、今回のインストールパッケージは改造済みのドライバーが同梱されている訳ではなく、SHARP オリジナルの SD メモリーカードドライバに対してバイナリパッチを当てて、2GB超SD、SDHC 対応のドライバーを生成するものです。
  • (2) SHARP オリジナルの SD メモリーカードドライバに対してバイナリパッチを当てるためのコマンドおよびパッチ用のデータは、/opt/QtPalmtop/share/sdhc-driver/ 以下にインストールされ、ドライバーをアンインストールするまで存在します。なお、「説明」の部分は私の解釈なので間違っている可能性もあります。あしからず。
ファイル名 説明
ld-tmp Linux の ld リンカーコマンドのようです、最終的にバイナリーパッチを当てた SD メモリーカードドライバーを生成する際に利用されているものと思われます
bpatch SHARP オリジナルのドライバーへフックを追加(sd.bpatch のパッチデータによる)するためのバイナリーパッチを当てるコマンドのようです
hook.o これが今回のドライバー改造の肝ですね、2GB超SD、SDHC対応に必要なルーチン(プログラム)が SHARP オリジナルのドライバーへのフックという形で実装されているようです
sd.bpatch SHARP オリジナルのドライバーへフックを追加するためのパッチデータのようです
  • (3) control ファイルには、「NeedRestart:linux」の記述があり、これによりインストール後に『再起動』のダイアログが表示され、自動的にシステムが再起動されます。
  • (4) preinst スクリプトによって、SHSRP オリジナルの SD メモリーカードドライバーの存在をチェック(ドライバーファイルの md5sum 値を比較)し、対象機種以外あるいは SHSRP オリジナルの SD メモリーカードドライバーが存在しない場合は、インストール作業が中止されます。
  • (5) postinst スクリプトは、今回のインストールパッケージの動作の肝です。上記で説明した /opt/QtPalmtop/share/sdhc-driver/ 以下にインストールされるバイナリパッチを当てるためのコマンドとパッチ用のデータにより、SHARP オリジナルの SD メモリーカードドライバに対してバイナリパッチを当て、2GB超SD、SDHC対応のドライバーを生成します。
  • (6) prerm スクリプトは、ドライバーのアンインストール時に SHARP オリジナルの SD メモリーカードドライバーに復旧します。
zaurus-sd-driver-update_1.0-for-Cxx0_arm.ipk
=====================================================================================

ipk root
-------------------------------------------------------------------------------------
0rw-r--r-- root/root         4 2010-02-05 07:43:05 ./debian-binary
0rw-r--r-- root/root    196130 2010-02-05 07:43:05 ./data.tar.gz
0rw-r--r-- root/root       960 2010-02-05 07:43:05 ./control.tar.gz

control.tar.gz
-------------------------------------------------------------------------------------
0rwxr-xr-x root/root         0 2010-02-05 07:43:04 ./
0rwxr-xr-x root/root       317 2010-02-04 08:27:00 ./preinst
0rw-r--r-- root/root       262 2010-02-04 12:38:44 ./control
0rwxr-xr-x root/root       279 2010-02-04 12:38:44 ./prerm
0rwxr-xr-x root/root       744 2010-02-05 07:43:04 ./postinst

data.tar.gz
-------------------------------------------------------------------------------------
0rwxr-xr-x root/root         0 2010-02-05 07:43:04 ./
0rwxr-xr-x root/root         0 2010-02-05 07:43:04 ./opt/
0rwxr-xr-x root/root         0 2010-02-05 07:43:04 ./opt/QtPalmtop/
0rwxr-xr-x root/root         0 2010-02-05 07:43:04 ./opt/QtPalmtop/share/
0rwxr-xr-x root/root         0 2010-02-05 07:43:04 ./opt/QtPalmtop/share/sdhc-driver/
0rwxr-xr-x root/root    441760 2010-02-05 07:43:04 ./opt/QtPalmtop/share/sdhc-driver/ld-tmp
0rwxr-xr-x root/root      4156 2010-02-05 07:43:04 ./opt/QtPalmtop/share/sdhc-driver/bpatch
0rw-r--r-- root/root      8636 2010-02-05 07:39:15 ./opt/QtPalmtop/share/sdhc-driver/hook.o
0rw-r--r-- root/root        92 2010-02-05 07:43:04 ./opt/QtPalmtop/share/sdhc-driver/sd.bpatch

control file
-------------------------------------------------------------------------------------
Package:	zaurus-sd-driver-update
Section:	Qtopia
Maintainer:	Tomohiro Masubuchi <bucchi@e-ml.jp>
Architecture:	arm
Version:	1.0-for-Cxx0
InternalOnly:	yes
NeedRestart:	linux
Description:	updates zaurus to use higher than 2GB SD and 4GB SDHC for SL-C750/760/860.

preinst file
-------------------------------------------------------------------------------------
#!/bin/sh
#
#  shdc-driver package  pre-install script
#

# version check
FILE="/lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/block/sharp_mmcsd_m.o"
MD5=`md5sum $FILE | cut -d ' ' -f 1`

ORGMD5='b6a026d0e0eaba101a3746bc0555cdf5'

if [ $MD5 != $ORGMD5 ]; then
    echo "MD5 check error."
    exit 1;
fi

exit 0

postinst file
-------------------------------------------------------------------------------------
#!/bin/sh
#
#  sdhc-driver package  post-install script
#

INSTALL_DIR="/opt/QtPalmtop/share/sdhc-driver/"
BPATCH="$INSTALL_DIR/bpatch"
TARGET="/lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/block/sharp_mmcsd_m.o"
BAKTARGET="$INSTALL_DIR/sharp_mmcsd_m.o"
SD_BPATCH="$INSTALL_DIR/sd.bpatch"
LD="$INSTALL_DIR/ld-tmp"

TMP_TARGET="/tmp/sharp_mmcsd_m.o"

# create new driver

$LD -r -o $TMP_TARGET $TARGET $INSTALL_DIR/hook.o
$BPATCH $TMP_TARGET < $SD_BPATCH

# check MD5 sum

FIXMD5='ddd28e819b9feb46eb35469de9382f4c'

MD5=`md5sum $TMP_TARGET | cut -d ' ' -f 1`
if [ $MD5 != $FIXMD5 ]; then
    echo "MD5 check error."
    rm -f $TMP_TARGET
    exit 1
fi

# save original file & replace

mv $TARGET $BAKTARGET
mv $TMP_TARGET $TARGET

exit 0

prerm file
-------------------------------------------------------------------------------------
#!/bin/sh
#
#  qinstall-fix package  pre-uninstall script
#

INSTALL_DIR="/opt/QtPalmtop/share/sdhc-driver/"
TARGET="/lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/block/sharp_mmcsd_m.o"
BAKTARGET="$INSTALL_DIR/sharp_mmcsd_m.o"

rm -f $TARGET
mv $BAKTARGET $TARGET

exit 0

postrm file
-------------------------------------------------------------------------------------