SuperD-1.6.6(BETA/FastTest)のcompcacheモジュールを書き換えてみる

最近、HT-03AにSuperDを入れて使っている。もちろん夢の中での出来事だ。

SuperDのベータ版であるSuperD-1.6.6BETAではcompcacheが無効になっていたので有効になるようにしてみた。
追記: SuperD FastTest1.6.6でも同様でした。同じモジュールを入れれば有効になります。

修正compcacheモジュール

ここに置いた。http://tetsu.homelinux.org/android/superd/ramzswap.ko

使い方

  • adb remount
  • adb push ramzswap.ko /lib/compcache/
  • adb shell chmod 644 /lib/compcache/ramzswap.ko
  • adb reboot

参考

Linuxカーネルはドライバモジュールをロードする際、バージョン違いのものを組み込んで暴走しないようにバージョンチェックを行う(ようにできる)。

カーネル側のバージョンは以下のように調べられる。この例では"2.6.29.6-g6585a85-dirty"がバージョン。
# uname -a
Linux localhost 2.6.29.6-g6585a85-dirty #1 PREEMPT Wed Jan 20 03:02:30 PST 2010 armv6l GNU/Linux

モジュール側のバージョンはこんな感じで調べる。
# strings /lib/compcache/ramzswap.ko | grep "2.6.29"
vermagic=2.6.29.6-g3918fc7-dirty preempt mod_unload ARMv6

微妙にバージョンが違っている。

モジュール側のバージョンを無理やりカーネル側のバージョンに合わせててやればロードできるようになる。
モジュール側のバージョンを変えるには、この文字列を書き換えれば良い。
今回は文字列が同じ長さなので上書きして書き換える。短くなる場合は後ろを00で埋める。長くなる場合は諦める。

バイナリ中の文字列の書き換えはバイナリエディタとかsedとかでできる。今回はemacsで開いて修正した。

感想

まあ、次バージョンが出る(もう出てる?)までのつなぎということで。