2012年4月11日水曜日

.de カーネル

えーっと。
fur Lenovo IdeaPad A1 - Kernel Versionen で、公開されているハックカーネルを動かしてみた。
A1に直接アップデートするのはアレだし、せっかくなのでSDブートを使って試した。
タッチボタンのバックライト点灯とオーバークロックカーネルなんだけど、SDブートしてもちゃんと動く。

写真では分かりにくいかもしれないけど、ビルド番号が変わってる。
タッチボタンのライトはディスプレイON時は点きっぱなし。
タッチボタンのバックライトは個人的にハックしたカーネルがあるんだけど、外部からデバイス制御ができるようになれば面白いな。

ハック環境が整ってきたので、色んなファームやカーネルが登場するのを期待。

kernelをSDカードからブートする

なんだか、更新が久しぶり。4月は忙しい。
が、何もしてなかったわけじゃなく、kernelハックをごそごそやってた。

kernel sourceがリリースされて、有志のハックが本格的に始まっている。
xdaのフォーラムとかで徐々に成果が報告されているので、個人的にも色々いじってみている最中だ。

で、少し前に、ハックkernelを簡単に動かす方法として、SDカードからブートする方法が公開されていた。[DEV] Lenovo Ideapad A1 Kernel Development/Testing

しかし、このフォーラムの記事通り作業をしても上手くいかない場合がある。
実は私がハマった一人だ(笑)

bootableなSDカードを作るのは結構シビアで、ディスク領域のファイル配置やパーティションの切り方にも気を使う必要がある。
上記フォーラムでは、bootableなSDカードの生成に omap3-mkcard.sh というスクリプトを使用しているが、これで上手くいかない場合、手動でSDカードを作る必要がある。
その方法をメモしておく。

使用した環境は、VMware 上の Ubuntu 10.04 LTS(64bit)
最初に、gconf-editor を使って、Ubuntuのドライブオートマウントを切っておく。
オートマウントされると、SD内のファイル配置が壊されたりするので、念のため切っておくほうが良い。
方法は、「gconf-editor media_automount」でググれば分かるはず。

次に、上記フォーラムより必要なファイルをダウンロードしておく。
MLO
u-boot.bin
omap3-mkcard.sh    (今回は使用しない)
ramdisk-cm7.ub    (CM7環境の人はこれを使用)
ramdisk-row-2643.ub  (2643環境の人はこれを使用)
それとは別に、ブートさせるカーネルイメージ uImage を準備する。
これは通常、kernelソースからビルドしたものを用意すればいい。
今回はテスト用に2375_ROWのカーネルを使用してみる。
ファームのアーカイブから uImage を取り出しておく。

以下、面倒なのでrootにて作業している。

まず、bootableなSDカードを作る。

Ubuntu環境にSDカードを刺し、デバイス位置を確認する。
# dmesg
[ 1452.618571] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[ 1452.618580]  sdb: sdb1
[ 1452.639529] sd 7:0:0:0: [sdb] Attached SCSI removable disk
仮に、/dev/sdb がSDカードとする。各自の環境に合わせて読みかえるべし。

で、パーティションを手動で切っていく。
既存のパーティションは削除してまっさらにする。
# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sdb: 2041 MB, 2041577472 bytes
255 heads, 63 sectors/track, 248 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         248     1992028    c  W95 FAT32 (LBA)

Command (m for help): d
Selected partition 1

Command (m for help): p

Disk /dev/sdb: 2041 MB, 2041577472 bytes
255 heads, 63 sectors/track, 248 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
次に、エキスパートモードを使用してディスクパラメータを設定する。
head = 255
sector = 63
シリンダはディスク容量(上記、赤文字)から計算する。
cylinder = ディスク容量 / head / sector / 512
         = 2041577472 / 255 / 63 / 512
         = 248.208
小数切捨 = 248
Command (m for help): x

Expert command (m for help): h
Number of heads (1-256, default 63): 255

Expert command (m for help): s
Number of sectors (1-63, default 62): 63
Warning: setting sector offset for DOS compatiblity

Expert command (m for help): c
Number of cylinders (1-1048576, default 1020): 248

Expert command (m for help): r
パーティションを切って、パーティションタイプを指定する。
第1パーティションは、FAT32、サイズ64M、Boot。
第2パーティションは、Linux、サイズ残り全部。
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-248, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-248, default 248): +64M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (10-248, default 10):
Using default value 10
Last cylinder, +cylinders or +size{K,M,G} (10-248, default 248):
Using default value 248

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 83

Command (m for help): a
Partition number (1-4): 1

Command (m for help): p

Disk /dev/sdb: 2041 MB, 2041577472 bytes
255 heads, 63 sectors/track, 248 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    c  W95 FAT32 (LBA)
/dev/sdb2              10         248     1919767+  83  Linux
以上でパーティションはOK。
テーブルの書き込み。
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
各パーティションをフォーマットして使えるようにする。
第1パーティション。/dev/sdb1 VFAT、ラベル名 boot
# mkfs.vfat -c -F 32 -n "boot" /dev/sdb1
第2パーティション。/dev/sdb2 ext3、ラベル名 rootfs
# mke2fs -j -L "rootfs" /dev/sdb2
さてさて、これでSDカードがフォーマットされたので、ブートに必要なファイルをコピーして環境を作っていく。

まず、boot領域。
ここには、MLO, u-boot.bin, uImage を配置する。
mountポイントを /media/tmp/ としてmount。ダウンロードしておいたファイルをコピー。
コピーする順番があるらしく、MLOを一番にコピーする必要がある。
# mount /dev/sdb1 /media/tmp/
# cp ~/MLO /media/tmp/
# cp ~/u-boot.bin /media/tmp/
# cp ~/uImage /media/tmp/
# umount /media/tmp/
次に、rootfs領域。
ここにはブート時に使用する/ファイルシステムを置いておく。
ダウンロードしたramdiskイメージを解凍して展開する。
2643の環境を使用する場合の例。
# mount /dev/sdb2 /media/tmp/
# dd if=~/ramdisk-row-2643.ub of=/media/tmp/ramdisk.img.gz bs=64 skip=1
# cd /media/tmp
# gunzip ramdisk.img.gz
# cpio -idmv < ramdisk.img
/media/tmp/ 内に / 以下のファイルシステムが展開される。
最後に、
# cd
# umount /media/tmp/
して、おしまい。

A1の電源を切り、作成したSDカードを刺して電源ONすれば、SD側のカーネルをロードして起動してくるはず。
設定-タブレット情報からカーネルバージョンやビルド番号を確認しておく。

もし、SD側のカーネルを読まないで起動してたり、Lenovoロゴでループする場合はSDカードがおかしいので作り直し。
結構、シビアなのでブートさせるまでに苦労するかもしれない。

しかし、これができるとハックカーネルを手軽に試せるのでとても便利。
本体の環境を壊さずに、SDカードの差し替えだけで済むのは画期的。
デバッグにも使えるし。
自家製のカーネルを放り込んで試すのが楽になってうれしい限り。

2012年3月1日木曜日

Nintendo Wireless Keyboardテスト版

以下、完全自己責任で。

ニンテンドーワイヤレスキーボード用のキーレイアウトとマップファイル。
ネタ用テスト版。インストールはリカバリメニューからのupdate.zip方式で。


patch-Nintendo_Wireless_Keyboard_signed.zip
http://www.mediafire.com/download.php?cestt9ry7cftzyf

基本、キートップの通りに出るはず、、たぶん。

一部キーは機能が入れ替わってるので注意。
全角/半角キーはBACKボタンと同じ。ESCキーとして考えればおk。
家マークはHOMEボタン。
ControlキーはVOLUME_DOWNボタン。某ターミナルアプリでCtlコードを送るときに使う。

CAPS_LOCKは使用できない。

Fn+1~6で、MUTE, VOLUME_UP, VOLUME_DOWN, MEDIA_PREVIOUS, MEDIA_PLAY_PAUSE, MEDIA_NEXT が割り当てられている。

ちなみに、カーソルキーはポートレイト(縦置き)時に正しく動くマッピングなのでランドスケープ(横置き)の時は方向が90度ずれる。
慣れてくれー。

私は実機を持ってないので実際に動くかどうかは未確認。
人柱な方、動作報告してもらえると助かります。待ってますm(__)m

あくまでもテスト版なので直リンクは避けてください。

2012年2月27日月曜日

2643_ROWリリース

やっとリリース解禁。
予想通り、各国版も同時リリースになった。

アーカイブ内容はotatest版と全く同じなので、先行アプデしてる人は特に必要なし。

以下、自己責任で。
2643_ROW向けの何かは、何か - 2643_ROW用に在り。
Bluetoothキーボードの何か も使用可。

2012年2月23日木曜日

Source探訪

ソースのビルドができないって腐ってみても仕方ないので、リファレンスのカーネルソースとのDiffを取りながら、A1のコードをダラダラと流し読みしてみた。

コードの修正が入ってるところには、コメントが入ってるようで修正箇所は分かりやすかった。

気になるところをいくつか拾うと、

OPP動作クロックが cpufreq34xx.c あたりで定義されてたりして。
オーバークロックなんてどうなの?とか妄想したり。
できる方法があるのかなー。

USB関係には結構な修正が入ってたりする。
まだ詳しく見てないけど、OTG関係は処理が死んでるのかな?
直すのに広範囲になる感じがするなぁ。

ホームやバックのタッチボタンのLED
drivers/input/touchscreen/mg-i2c-ts.c で、2秒タイマーをセットして、OFFにする消灯処理をやってる。
これを殺すか、点灯時間延長すればいいっぽい。

カメラ周りとかビデオ周りはまだ見てない。


とは言うものの、カーネルの構築も自家カーネルの動作も検証されてないから本当に動かせるかどうか分からんな。

でも、とりあえず、ワクワクしてきた。

2643シリーズとkernel source

突然、otatestに現れた各国版の2643ファーム
A107W0_A234_001_015_2643_GR.zip
A107W0_A234_001_015_2643_TR.zip
A107W0_A234_001_015_2643_US.zip
差分をとってみると、どれもフレームワークバージョンは2643_ROWと同じ。
異なっているのは、プリインストールのアプリとフォントの有無だけで中身はほぼ同じものと考えていい。
2643シリーズが出揃ったと言うことは、リリースが近いと思われる。

うちの2643_ROWは全く快調に動いてるので、安定化版のファームとしてここで一旦落ち着けようと言うことなのかもしれない。
ROW版だけ2525_ROWがリリースされたのは、フォントの件と実験の意味合いがあったのだろうか。
今となっては、2375と共に早く葬り去るべきバージョンだと思う。


今日はもうひとつ。

A1用のカーネルソースが公開された。
ここ数日、フォーラムで予告されてた動きが実現して、個人的には嬉しい。
早速落としてみた。

が、、、、いくつかのファイルが足りない。
がーーん!makeできない。
ちなみに、コードの一部にA1固有の情報がハードコードされているのは確認してるので、本物のソースである可能性は高い。

で、手元にあるリファレンスのカーネルソースとの差分をとりながら、足りないファイルを補充してみたりしたけど、、、、
やってられるかっ!!(-_-メ
ってくらい、色々足らない。
面倒くさいからあきらめた。

lenovoよ。。。
ガッカリだ。


再リリースを待つ。

2012年2月16日木曜日

さあこい Source code

http://forums.lenovo.com/t5/IdeaPad-Slate-Tablets/Android-Source-Code/td-p/610273/page/5

https://twitter.com/#!/lenovoforums/status/169832583012691968

キタ!
やっと公開になるっぽい。
リンク先にあるThinkPad Tabletのソースを落として眺めてみたけど、ツール類も含めて色々なコードが提供されている。
もちろん、kernelも入ってる。
徐々にハック情報も出てくるだろう。

A1用のリリースが楽しみだなぁ。