ジャンル不定の日記です。

ONDA v719 3G 四核 届いた!

ヤフオクで買ったONDA v719 3G 四核、やっと届いた。


で、
元々届いたら公式ファーム入れなおして使うつもりだったが、
入ってるファームがv1.0.1ぽくて、公式にはv1.0.4が存在する。v1.0.4は安定性が向上しているらしいのと、
ショップが日本語化してるぽいくて嫌だから公式ファームダウンロード中。
激遅い・・・
端末のリビジョンは少なくともv1とv3が存在するようで公式ファームは2種類配信されているが、シリアルみるとv3らしい。


メモリが1GBとストレージが8GBなのが少ないと思ってるんで、今回は、
  • SDカードの起動時自動マウント。
  • swapファイルを作成してswapを有効にする。
のカスタマイズをしてから使おうと思ってたんで、公式ファームをダウンロードしながら、届いた時のファームで中身確認とテストした。

SDカードをアプリとデータの領域にして、swapファイルは端末のnandに作るつもりだったが、
nandを頻繁に書き換えるのは良くないと思うし、swapもSDカード上にすべきと思った。

探しちゃったが、v719 3G 四核のSDカードスロットはSIMと一緒でカバーで隠れてる。
カバーを外さないと出し入れできないが、カバーが外しにくい。
ググったら、カバー外す際に爪折った人もいるみたいなんで気をつけないと・・・

FATでフォーマットされたSDは自動マウントされるが、ext3でフォーマットしたSDは自動マウントされなかった。
装着時ではなく、システム起動時にマウントされる必要があるから、どっちにしろカスタマイズする必要があると思うが。
あと、途中で気づいたが、端末のnandはext4になってるぽい。
一度ext3でSD用意したが、ext4で作りなおした。


SDカードを抜き差して、
/dev/block/mmcblk1p1
がSDカードデバイスなことがわかった。

FATのSDを装着すると、
/storage/sdcard1
にマウントされることがわかる。
この場所は自動でのマウントの場所だが、SDスロットは一つでかぶることはないから、ここにマウントしちゃえば良いね。

端末のUSBデバッグを有効にして、
adb shell mount -t ext4 -o noauto_da_alloc /dev/block/mmcblk1p1 /storage/sdcard1
問題なくマウントできた。
ONDAの端末以外は知らないが、前のvi10もそうだが、adb shellで普通にroot権限使える。
端末アプリのroot化とか余計なことしないで、root権限必要な作業はadbでやったほうが良い。
最初はextでSD作っちゃったからext3でマウントしたが、ext4に変更してデータ破損防止のためnoauto_da_allocオプションをつけた。
ext4には遅延書き込み機能があるらしいんだが、このオプションで無効になるらしい。

その後、端末のディレクトリ構造見て、
/fstab
/system/etc/vold.fstab
/system/etc/vold.fstab.nand
辺りの、ストレージの自動マウント関連ぽい設定ファイルを確認していじってみたが、ダメだった。
Linuxの /etc/fstab とは書式が違う。

他に端末の起動時処理をしていると思われる、
/init.rc
を見つけてコマンド書いてみたが、ダメ。シェルスクリプトとは書式が違うらしい。
マウント処理っぽいのを真似て書いてみてもダメだった。

だが、 /init.rc の最後の方に、
service  preinstall  /system/bin/busybox sh /system/bin/preinstall.sh
という、プリインストールのソフトをシェルスクリプトで自動起動してるぽい感じの記述を見つけて、
preinstall.sh にコマンドを書いたら、電源ONした際に実行された!
このスクリプトファイルに起動時に実行させたいコマンドを書いていけば良いね。

スワップファイルは、
adb shell dd if=/dev/zero of=/storage/sdcard1/swap bs=1048576 count=1024
adb shell busybox mkswap /storage/sdcard1/swap
って感じで作成した。
mkswapコマンドはbusybox経由でないと実行できなかった。

adb shell busybox swapon /storage/sdcard1/swap
adb shell busybox free -m
でスワップを有効にしてメモリの確認。
この2コマンドも要busyboxだった。

adb pull /system/bin/preinstall.sh
で preinstall.sh を母艦にコピーして、
mount -t ext4 -o noauto_da_alloc /dev/block/mmcblk1p1 /storage/sdcard1
$BUSYBOX swapon /storage/sdcard1/swap
と末尾に追加した。

adb shell mount -o remount,rw -t ext4 /system
adb push preinstall.sh /system/bin/preinstall.sh
adb shell chmod 0755 /system/bin/preinstall.sh
編集して再度端末にコピー、
adbだとパーミッションが変わっちゃうからchmodで元に戻す。
だが、
「failed to copy 'fstab' to '/fstab': Read-only file system」
/system が読み込み専用で怒られる。
adb shell mount -o remount,rw -t ext4 /system
と、rwでリマウントすれば変更できるようになる。

rebootしたら、目的通り起動時に自動的にマウント、SDにスワップができた!


公式ファームのダウンロードに時間がかかっててまだファームの更新ができないのだが、ファームの更新したら、上記の作業と、
  • 中華アプリの削除。
  • 自動マウントのSDにアプリとデータの領域をSDに移す。
だな。
たぶんシンボリックリンク張るだけで行けると思うんで、
新ファームの構造が大きく違わない限りは今回の手順でSDの自動マウントができるから、移すのは楽だな。
中華アプリの削除は見てみないとわからん。