passive log strage

バイク , モバイルガジェット , アウトドア用品 , 腕時計 ・・・等。

Lenovo IdeaPad A1 ファームウェアの書き換えとシェルコマンドの追加

お約束ではあるが、この記事の作業については自己責任で。

基本的な手順。


全面的にこちらのまとめサイトを参照した。

フォント - ideapad_a1 @ ウィキ - アットウィキ


ファームウェアのファイルはこちらから入手。

http://download.lenovo.com/slates/a1/


  1. ファームウェアのzipファイルを準備する。
  2. zipファイルのファイル名を「update.zip」にリネームする。
    • フォント追加等の場合は、必要に応じて、zipファイルの中身をいじる。
  3. microSDカードのルートディレクトリにコピーする。
  4. A1をシャットダウンする。
  5. microSDカードをA1にセットする。
  6. サービスメニューを起動する。
    1. 電源OFF状態で音量[-]ボタンを押しながら、電源ボタンを長押し。
    2. 一度バイブが鳴動しLenovoロゴが表示され、すぐに消えるので、音量[-]ボタンを押したまま、電源ボタンを離す。
    3. そのまま音量[-]ボタンを押し続けていると、サービスメニューに入る。
  7. microSDカードのルートディレクトリに「update.zip」が有る場合は、そのファイルでファームウェアの更新が行われる。このとき、『パッケージ箱からドロイド君を取り出すようなアイコン』と、プログレスバーが表示される。
    • 「update.zip」が無い場合はサービスメニューが起動する。
  8. アップデート後、電源OFF状態になるので、microSDカードを抜いて通常通り起動する。

※注意:電源につながなくても実行できるが、バッテリ残量には要注意の事。

1回目:日本語フォント投入


一発目は、ノーマルファームに日本語フォントを導入しただけの最低限のファームとした。

フォントについては手前味噌だがこちらを参照。

FlexiView FV-1 のフォントを変更する - passive log storage - 2nd

俺はAndroid式日本語フォントのモトヤマルベリ(MTLmr3m.ttf)、FV-1に投入したものをそのまま突っ込んだ。

ベースファームウェア:A107W0_A234_001_010_2375_ROW.zip (15-Nov-2011、146M)

  1. zipファイルを「7-zip」にて開く。
  2. system.zipを開き、fontsの中にDroidSansJapanese.ttfを放り込む。
  3. 7-zipを終了、保存する。

7-zipWindowsアーカイバだが、Macで同等のアプリが見つからない(というか探すのがめんどい)のでBootcamp上のWindows7で作業を行った。

このファームウェアは、A1購入時に入っているものとまったく同じものらしい。

挙動はまったくデフォルトと同じ。つまり、不具合もほぼ同じ。
純粋に日本語フォントが追加されただけの状態。

2回目:楽Pad最新(らしき)版に更新

最新版が上がっていたので、フォントを追加して導入してみた。

ベースファームウェア:A107W0_A234_001_012_2586_SC.zip (14-Dec-2011、156M)

この、末尾に「SC」がつくファイルは中国版の楽Pad向けのファームらしい。

起動時のロゴがオレンジ色の「楽」というロゴになるのが特徴的。そのほかにはアプリケーションドロワーの「IdeaStore」のアイコンが変わっており、起動すると中国語のアプリストアサイトにつながる事と、「LenovoUser」というアプリが追加されている点。これはユーザ登録アプリなんだろう。
そういや、Googleは中国から撤退したんだよな。中国でGoogle関連サービスが使えない、つまり公式のAndroidMarketが使えないから、中国人はこっちを使うためにあると思われる。
IdeaStoreは結局つながらないので、たぶん「LenovoUser」で登録しないと使えないんじゃないかと思うが、そこまでいちいち試す気にはならないので放置。

動作が安定するかをためしに入れてみたが、Googleアカウントが使えないので、いつもの自分の状態にできないから、なんともいえないな。

3回目:標準ファームにフォントとコマンドを追加

楽pad版は実用できないということで、再度標準ファームに戻すが、せっかくなのでフォントだけでなくコンソールコマンドも追加してみる。


ベースファームウェア:A107W0_A234_001_010_2375_ROW.zip (15-Nov-2011、146M)

  1. 1回目と同じ手順で、フォントを追加。
  2. update.zipファイル内のdata.zipを開く。
  3. 内部にlocalフォルダ、さらにその中にsbinフォルダを追加する。
    • これがFV-1でも作った「/system/data/local/sbin」に該当するハズ。
  4. sbinフォルダ内にbashbash_profile、busyboxbusybox_alias.shを放り込む。
  5. 7-zipを終了。data.zipを保存する。

シンボリックリンクだけは実機で張るか、別なLinux上で張った上で固めるしかない。この状態で更新したとき、まだsbinディレクトリの属性がどうなるかわからないので、とりあえず放り込んでおく。

ちなみに、/system/xbin/ ディレクトリにsu または sudoコマンドが存在しないので、おそらくバイナリをあとから追加してやる必要があるが、今回は様子見だし、rootingが目的ではないのでこのままでいく。

ファームウェアアップデート後、起動時のアニメーションが止まったままになったが、一旦強制終了して再起動して復帰した。


で、実際にアップデート適用後にコマンドにアクセスできるか試したが、結局できなかった。

eclipseのDDMSのファイルエクスプローラでは/dataディレクトリ配下は見ることができない。具体的にはパーミッション不足でlsできない。

試しにディレクトリを追加しようとすると・・・

見えなくても、すでに存在してるのね。
そこで、adb接続のシェル実行で確認をすると

$ ls /data/local/
tmp

tmpディレクトリしか存在しない・・・。
どうやら、ファームウェアのdata.zipファイルにフォルダを追加しても、ファームウェアアップデート時には反映されないようだ。

寄り道:コマンドの追加

しかし、adb接続できるなら、他の端末と同じようにここからsbinディレクトリも追加できるはず。

adb shell
$ mkdir /data/local/sbin
$ ls /data/local/
tmp
sbin
$ exit

ここでコマンドをpushする。

adb push busybox
adb push busybox_alias.sh
adb push bash
adb push bash_profile

で、busybox_alias.shを実行

adb shell
$ cd /data/local/sbin
$ chmod 755 *
$ ./busybox_alias.sh

これで、コマンドが展開される。
あとは、FV-1の時と同じように、Android Terminal Emulatorの初期コマンドを追加してやればOK。

FlexiView FV-1 でrootになる - passive log storage - 2nd

といった感じで・・・

最終的に、1回目の状態に他の端末と同じような手順でコマンドを追加しただけの形になった。
もし、今後rootingするのであれば、下記の手順が考えられる。

  1. ファームウェアファイルのsystem.zip内に「/sbin」を作り、配下にsuやsudo等のバイナリを投入。
  2. どうにかして、システムレベルで「/system/sbin」へのパスを追加する。
  3. 同じくどうにかして、「/system/sbin」へのユーザレベルの実行権限を追加する。

こんな感じになるだろうか?

FV-1でのrootingの経験から、本来ならば「/system/xbin」への実行権限を与えて、xbin配下へsuやsudoコマンドを放り込むのが正道だろうって気がする。SuperUser等で「/system/xbin/su」への権限をフィルタしてやることでアクセス制御を行うと。

ただ、ここらへんの制御方法をはっきりと把握していないので、本当にここまで手を入れてしまっていいものかどうかが判断できない。また、アーカイブに入っているコマンド、ディレクトリの権限を直接いじるのか、あるいはアップデートスクリプトを修正する(つまり実際のファームウェア展開時に権限を付加して)やるのかもしれないので、もうちょっと調べてやる必要がある。

ファームウェアの更新を行ったmicroSDカードには「upgrade_log」というファイルが残っていて、これが更新時の実行ログらしい。実際、このファイルを読むと、/systemディレクトリ配下について「ディレクトリを生成した」「ファイルを展開した」という記述が読める。こいつを追ってみたらなにか解るかもしれない。

あるいは、誰かがここらへんをやってくれるのを待つか、だな。個人的には誰かがやってくれるのを待ちたいが・・・(めんどくさがり)