ICONIA TAB A500でUbuntuとか
とても久しぶりです。平和ではありませんが元気です。
OSC Tokyoでも展示していましたが、ICONIA TAB A500でlinux(ubuntu)を導入してみました。手順が長いので残しておこうかと思います。今回はUbuntuで実施していますが、結局の違いはrootfsの作成方法だけのはずですので、当然ながらDebianでもできる内容かと思います。*1
- おやくそく
- 文鎮になってもなんの保証もないので、at own liskです。
用意しておくもの
- PC
- Ubuntu11.10が動作して、SDカードが読めて、USBが使えるPC
- Windowsが動作するPC。
どちらかでadbが使える環境にしてください(ここでは省略)。ちなみにlinuxでadbを使うならwindows側の用途はフルバックアップだけです。
- microSDカード(microSDHC)
最低4G以上。16GBあれば安心。
- ICONIA TAB A500
rootedにしておいてください。(ここでは省略)。あと事前にアプリケーションのバックアップとか取っているといいかも(手順内でもフルバックアップはしますが念の為)
- USBキーボードとか
あると幸せ。
1.Uubntu側での作業(その1)
-
- microSDカードのフォーマット
fdiskでmicroSDカードのパーティションを2つにします。fdiskの前にumountしておくこと。1つ目のパーティションは、Android用、2つ目のパーティションはext4でフォーマットします。うちの環境ではこんな感じ。*2
Disk /dev/sdb: 16.0 GB, 16021192704 bytes
ヘッド 204, セクタ 48, シリンダ 3195, 合計 31291392 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 48 10497023 5248488 83 Linux ←android
/dev/sdb2 10497024 31285439 10394208 83 Linux ←linux
で、フォーマット。
$sudo mkfs.vfat /dev/sdb1
$sudo mkfs.ext4 /dev/sdb2
終わったら、一旦SDカードを抜き差しして再マウントさせます。
-
- mkbootimg
androidのrepoからmkbootimgをビルドするか、http://forum.xda-developers.com/showthread.php?t=562318 から持って行って、パスの通っているところに置きます。
-
- クロスビルド環境の作成
クロスビルド用として必要そうなのをインストールします。
$sudo apt-get install build-essential gcc-arm-linux-gnueabi lzop
-
- rootstock
Ubuntu上で、rootfsが作成できるようにrootstockをインストール。
$sudo apt-get install rootstock
rootstockでrootfsを作成します。性能面から考えて、lxdeを入れました。
$mkdir /your/path/to/rootfs
$cd /your/path/to/rootfs
$sudo rootstock --fqdn ubuntu --login ubuntu --password ubuntu --imagesize 4G -d natty --seed lxde,gdm
nattyを指定しているのは、そこしか動作確認していないため*3。--seed周りは、この設定だと最低限だったので、もうちょっと試してみるのがいいかも*4。ちょっと時間かかりますが、armel-rootfs-YYYYMMDDHHMM.tgzなファイルができます。不明な点は https://wiki.ubuntu.com/ARM/RootfsFromScratch で。*5
-
- rootfsの展開
前手順で作成したrootfsをmicroSDに展開します。
$sudo tar zxvf /your/path/to/rootfs/armel-rootfs-YYYYMMDDHHMM.tgz -C /media/yourlinuxpartition/
-
- kernelのgit clone
ChromeOS 2.6.28からブランチしている以下のカーネルソースをgit cloneしておきます。時間かかるよ。
cd /your/path/to/
$git clone https://github.com/astarasikov/iconia-gnu-kernel
-
- kernelのビルド
kernelのビルド。
# ARCH指定、CROSS_COMPILE指定
$export ARCH=arm
$export CROSS_COMPILE=arm-linux-gnueabi-
# git cloneしたディレクトリに移動
$cd /your/path/to/iconia-gnu-kernel
# iconia用のdefconfigを実行(以下のコマンドそのままで)
$make iconiaa500_defconfig
# Ncpu * 2で -jxを指定する。2コアなら-j4。
$make -j4 ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE zImage modules
# modules用のディレクトリを作成。kernelの中でなくてもいいです。
# 再度生成する場合はrm -rで。
$mkdir /your/path/modules
# モジュールの作成。
$make modules_install INSTALL_MOD_PATH=/your/path/modules/
# iconiaに焼くimageを作成。mkbootimgをつかいます。
$mkdir rc
$export TEGRA=/your/path/to/iconia-gnu-kernel
$mkbootimg --ramdisk /dev/zero --kernel ${TEGRA}/arch/arm/boot/zImage -o ${TEGRA}/rc/newrec.img
できた{TEGRA}/rc/newrec.imgをmicroSDカードのandoroidのパーティションにコピーしておきます
$cp ${TEGRA}/rc/newrec.img /media/yourandroidpartition/.
wifiのファームウェアをmicroSDカードの/media/yourlinuxpartition/lib/firmware/brcm配下にコピーします。ディレクトリはないと思うので作成します。あとで、iconiaから持ってきたbcm4329-fullmac-4.txtもここに入れることになります。
$sudo mkdir -p /media/yourlinuxpartition/lib/firmware/brcm
$sudo cp /your/path/modules/lib/firmware/brcm/bcm4329-fullmac-4.bin /media/yourlinuxpartition/lib/firmware/brcm/
ureadaheadがあると、起動時に刺さってしまうため、microSD上にある/etc/ureadheadを無効化します。
$sudo mv /media/yourlinuxpartition/etc/init/ureadahead.conf /media/yourlinuxpartition/etc/init/ureadahead.disable
2.Windows側での作業
http://forum.xda-developers.com/showthread.php?t=1121543&highlight=itsmagic からitsmagic.zipとbackup_tool.zipをダウンロードしていずれも展開しておきます。
itsmagicは、mmcblk0p7に保存している、各パーティションのchecksumに整合性を取るためのツール。backup_toolはフルバックアップツールです。
-
- バックアップ
すでにrootedされているICONIA TABを、windowsに接続して、backup_toolディレクトリにある、01_backup.batを実行します。*6バックアップ後は、backupディレクトリの中に、各パーティションのダンプ(cacheとdataパーテイション以外)、chechsumとuidが記されたテキストファイルがあるかと思います。
-
- itsmagicのコピー
itsmagicをandroid側のパーティションにコピーします。
- ICONIA TABでの作業(その1)
microSDカードをICONIA TABに差し込んで起動します。
-
- itsmagicの導入
- adb shellでICONIA TABにアクセスして、itsmagicを/data/localの配下にコピーして、755のパーミッションを与えます。
adb shellでアクセス
$ su
# cp /mnt/external_sd/itsmagic /data/local
# chmod 755 /data/local/itsmagic
-
- nvram.txtのコピー
続けてbcm4329用のモジュール用をlinuxでも有効にするため、nvram.txtをコピー。
#cp /system/etc/nvram.txt /mnt/external_sd/bcm4329-fullmac-4.txt
ICONIA TABからmircoSDカードを抜きます。
3.ubuntu側での作業(その2)
microSDをPCに差し込みます
-
- bcm4329-fullmac-4.txtのコピー
bcm4329-fullmac-4.txtをmicroSD側のlinuxパーティションにコピーします。
$sudo cp /media/yourandroidpartition/bcm4329-fullmac-4.txt /media/yourlinuxpartition/lib/firmware/brcm/
microSDカードを抜いて、ICONIA TAB差し込みます。
4.ICONIA TABでの作業(その2)
-
- フラッシュイメージの書き込み
adb shellでICONIA TABにアクセスして、先ほど作成したフラッシュイメージをICONIA上の/dev/block/mmcblk0p1に書き込みます。慎重に、ちょう慎重に。書き込みが終わったら、先ほど導入したitsmagicを実行します。
adb shellでアクセス
$ su
# dd if=/mnt/external_sd/newrec.img of=/dev/block/mmcblk0p1
6196+0 records in
6196+0 records out
3172352 bytes transferred in 1.219 secs (2602421 bytes/sec)
# /data/local/itsmagic
Some magic trick by @sc2k on xda
it tricks the bootloader to run any kernel you want.
Thx @Acer for making this so easy.. why did you say the BL is locked if it isn't? :DUSE AT YOUR OWN RISK!
Done. Have fun!
-
- ICONIAの電源OFF
いつもどおりに電源OFFにします。
5.ICONIA上でのLinux起動
VolUpを押しながら電源をONにします。"Booting recovery kernel image"と出るまでVolUpボタンを押しておいてください。Xで少しエラーが出た後に、gdmのログイン画面が出るかと思います。rootstockで指定したパスワードでログインしてください。あと、wifiとか設定するかと思いますが、このあたりは難しくないので試してみてください。
- ひんと
- wifiを使うときはrfkillを使ってデバイスを有効化しておく必要があります。
- おまけ
- bootchart
http://twitpic.com/7cse6z/full
- 参考
http://forum.xda-developers.com/showthread.php?t=1158260
http://forum.xda-developers.com/showthread.php?t=1197793
*1:advent calendar分のエントリーなので、Debian側にも配慮。。。
*2:linux側は3GB以上にしておいたほうが良いですね。
*3:oneiricの挑戦はみなさん頑張ってください。。
*4:"$sudo rootstock --fqdn ubuntu --login ubuntu --password ubuntu --imagesize 4G -d natty --seed lxde,gdm,rfkill,alsa-utils,wireless-tools,wpasupplicant,ttf-takao"とかですかね。。
*5:Ubuntuにしていない理由はplymouthが。。。という理由もあります
*6:要はこれがあるので、windows環境使っているんですね。 http://forum.xda-developers.com/showthread.php?t=1121543&highlight=itsmagic にあるManual Methodをlinux上でやる方法もあります。