« 2011年4月 | トップページ | 2014年7月 »

2011年5月

2011年5月31日 (火)

LTN用Debian(Lenny)配布ページ

Life Touch Note 用のDebian5.0(Lenny) の配布ページです。
現在のバージョンは0.10です。

Debian5.0をLTNに入れると以下のことができます。

  1. PCのDebian上で動いているソフトと同じものをLTNで動かすことが可能(一部動かないものあり)
  2. Androidで提供されていないソフトを動かす
  3. ソフトをLTNでコンパイルしてLTN上で動かす等

現時点では、以下のものがきちんと動きません

  1. サウンド機能(音が出ません)
  2. フラッシュ(flv)等の動画再生
  3. x-window上でのネット接続(一般ユーザー権限)
  4. Nvidiaのハードウェアアクセラレーション機能の使用
  5. LTNのセンサー(GPS等)
  6. テキストの色がおかしい(初期化されていないため)
  7. タッチスクリーンのキャリブレーションがうまくいかない
  8. コンソールのカーソルが出ない、キーリピートしない(x-windowだと大丈夫)

いずれ解決するかもしれません。また他にも動かないものがあるかもしれません。

スクリーンショット

lxde

Lxde

icewm

Icewm

gnustep

Gnustep

ここでは以下のものをダウンロードできます。

  1. Debian5.0のルートファイルシステムイメージ(cpio.gz)
  2. リカバリーパーティションに書き込むイメージ
  3. セットアップ用スクリプト
  4. busybox

ファイルのサイズを小さくするため、x-window-systemは入っていません。
LTNの起動後に、apt-get等を使用して必要なパッケージを入れてください。
本ページの後半に、各種ソフトを入れるためのコマンド等をメモしてあります。

注意
LTNのリカバリーパティションを書き換える必要があります。
パーティションの書き換えに失敗したり、書き換えの手順を間違えると、LTNが起動しなくなったり、メーカー修理が必要となる場合が考えられます。
また、この使用方法はメーカーが保障しない使用方法になりますので、メーカー修理も拒否される可能性も考えられます。
そのため、十分に注意して使用ください。

必要なもの

  1. SDカードをext3でフォーマットできる環境(Linux PC)
  2. LTN上で動く端末ソフトか、adb経由でLTNのコンソールへ接続できる環境
  3. root化ずみのLTN
  4. Linux(Debian)を普通に使える知識

LTNの構成として、/dev/block/mmcblk3p3にリカバリーパーティション、
/dev/block/mmcblk3p6に/system
/dev/block/mmcblk2p1に/sdcardがマウントされる環境前提です。
違う場合はインストールできません。

手順1
SDカード(空のもの)を用意してください。2GB以上は必要でしょう。SDHCのClassは6とか10とか、早いものがいいです。

LTNに付属しているSDカードはFAT32でフォーマットされています。
FAT32でフォーマットされているSDカードには、Debianを入れることができません。
付属のカードはAndroidのソフトを入れたりできますので、そのままとっておきましょう。

PC上でSDカードをext3でフォーマットしてください。
Debianを入れるパーティションはSDカードの第1パーティションになります。
必要とあらば、fdiskを使用して、SDカードにswap用のパーティションをあらかじめ作っておくのもよいと思います(2番目以降のパーティション)。

SDカードをext3でフォーマットするには以下のようにしてください
(/dev/sdc1がSDを示す場合)
#mkfs.ext3  /dev/sdc1

SDカードをフォーマットしたら、以下のファイルをSDカードの/にコピーしてください。

ltna-debian-010.tar.gz

そしてtarで展開してください。
展開するとSDの/に以下のファイルができます。

  1. recovery2.img
  2. ltna-debian-rootfs.cpio.gz
  3. setup_recovery.sh
  4. setup_rootfs.sh
  5. busybox
  6. sh

#tar xfpz ltna-debian-010.tar.gz

tarで展開したらltna-debian-010.tar.gzは消してもらってかまいません。

その後に、SDカードをumountしてから、LTNにSDカードを入れてください。
ここからはAndroidが起動しているLTN上での作業になります。

LTNの端末ソフト、あるいはadb経由でLTNに接続して
コンソールを開きrootになってください。
そして以下のコマンドを実行してください。

#mount -t ext3 /dev/block/mmcblk2p1 /sdcard

SDカード上の第1パーティションを/sdcardにマウントします。
(ext3なのでAndroidからは自動でマウントされません)

/sdcardに移動してから、setup_rootfs.shを実行します。
このコマンドで、SDカードにdebianのルートファイルシステムを展開します。
そして、Androidの無線LAN用の定義ファイルや、bluetooth動作に必要なファイルを
SDカードにコピーします。

#cd /sdcard
#./setup_rootfs.sh

extract...
copy wpa_supplicant.conf
copy /system/lib/BCM4329B1.hcd
copy bcm4329 files...
copy /system/lib/hw/wlan/usibcm4329-RC218-nvram.txt

debian rootfs ready.

と表示されれば、SDカードにルートファイルシステムが展開されたことになります。

エラーとか出た場合は教えてください。

さて、次にLTNのリカバリーパーティションを書き換えます。
setup_recovery.shを実行すると書き換えます。
一応念のため、/systemが/dev/block/mmcblk3p6で、
/dev/block/mmcblk3p3がどこにもマウントされていない環境でのみ
書き換えるようになっています。
もし違う場合はリカバリーパーティションを書き換えずに終わります。
以下のようにして実行します。

#./setup_recovery.sh
Backup recovery...
New recovery ready.

と出れば終わりです。
SDカードにrecovery_org.imgというファイルができます。
これが、オリジナルのリカバリーパーティションの内容です。
後で戻すことができます。

これを本体の/data/local/tmp/以下とか、外付けHDDにでもバックアップしておくといいでしょう。後でrecovery_org.imgを書き戻せば元に戻ります。

#cp recovery_org.img /data/local/tmp/

sdcardのbusybox、ltna-debian-rootfs.cpio.gz、recovery2.img、setup_recovery.sh、
setup_rootfs.shはいらないので消しても大丈夫です。

SDカードをumountします。

#cd /
#umount /sdcard

端末ソフトを終了させて、LTNの電源をOFFにします。

Debianの起動

電源をOFFにしたら、ホームボタンを押しながら電源をONにします
(上段の右から4つ目のボタン)。

ホームボタンはNECのロゴが出てから離します。
問題がなければLinuxの起動メッセージが流れて、その後にログイン画面が出ます。
SDカードによっては、LinuxのInitが起動するタイミングで十数秒またさせることもあります。

ユーザーは2つあります。userとrootです。

一般ユーザー:user
パスワード:user

ルート:root
パスワード:root

ログインしたら、rootのパスワードとuserのパスワードを違うものに変更しておきましょう。
passwdコマンドで変更できます。

自宅の無線LANがDHCPなら、以下のように入力すればIPアドレスが割当たるはずです(最初だけ必要)。

#ifup eth0

環境が違う等の影響でネットに接続できないなら、一般的なLinuxと同じように
以下の場所にあるファイルを書き換えてください。

  1. /etc/network/interface
  2. /etc/wpa_supplicant/wpa_supplicant.conf

無線LANのHWが認識していないなら、lsmodでdhdというモジュールがロードされているかも確認してください。
無線LAN用のiwconfigも入っていますので、ネット接続がうまくいかない場合は、
確認してください。

IPアドレスが割当たっている状態なら、apt-getコマンドでソフトをインストールできます。
アップデートしてから、ここではjfbtermを入れてみます。

#apt-get update
#apt-get install jfbterm

jfbtermが無事に入ったら後は好きなようにカスタマイズしてください。

各種ソフトを入れるためのメモ

[bluetooth]
bluetoothのキーボード、マウスが使えます。

#apt-get install bluez-utils

以下のように入力すると、LTNのBluetooth機能が正しく動いているか分かります。
#hcitool device

Bluetoothマウスを認識させたい場合(マウスをペアリング可能にしてから)
#hidd --search
と入れれば相手のBD Addressが見つかってマウスが使用できるようになります。

[時刻合わせ]

#apt-get install ntp

[ssh]

#apt-get install ssh

[開発環境]

#apt-get install build-essential

gccやmake等の開発環境が入ります。

[x-window-system]

基本+フォント+タッチスクリーンドライバ
#apt-get install x-window-system ttf-mona ttf-kochi-gothic ttf-kochi-mincho
#apt-get install xfonts-shinonome*
#apt-get install xserver-xorg-input-evtouch

ウインドウマネージャー(お好みで)
#apt-get install icewm

#apt-get install lxde

#apt-get install gnustep menu
#apt-get install wmbubble wmcalclock

インストールに時間がかかるのもあるので、ACアダプターをつないでおいたほうがいいでしょう。

インストールが終わったら、/opt/ltna/xorg.confファイルを/etc/X11/に上書きコピーしてください。
LTN用の xorg.conf になります。

#cp /opt/ltna/xorg.conf /etc/X11/

タッチスクリーンの位置がずれる場合は、/etc/X11/xorg.confファイル内の
xmin、ymin、xmax、ymaxの値を少しいじってみてください。

タッチスクリーンのクリックで普通の左クリックになります。
タッチスクリーンを長押しすると、右クリックになります。
ただし、押した位置がずれると、ドラッグになるので、
右クリックしたいときは、押した位置がずれないようにしてください。

gnomeやkdeはおすすめしません。gnomeはインストールにすごく時間がかかります。また、インストールが途中で進まなくなってしまうパッケージがありました。
Ctrl+Cキーで中断すれば最後までいきました。

グラフィカルログインにしたいなら
#apt-get install gdm

x-window上で動くターミナルソフト
#apt-get install rxvt-unicode

私のLTNはgnustepにしています(動作が軽いので)。

[日本語化]
#apt-get install locales
#dpkg-reconfigure locales

ja_JP.UTF-8 を選択

日本語化したら、コンソールログインでキーボードがきかなくなりました。
まったくでたらめの配列になってしまってログインできなくなりました。
日本語化するなら、x-windowとgdmを入れておいてください。
(グラフィカルログインで使うなら問題ありません)

gnustepは日本語化すると、メニューが文字化けするので、
使用するフォントをWindow Maker Perferenceで日本語のフォントに変更してください。

[OpenGL]
#apt-get install mesa-base mesa-utils

glxdemoとかglxgearとか







| コメント (10) | トラックバック (0)

2011年5月23日 (月)

LifeTouch NoteにDebianを入れる3

LifeTouch NoteにDebianを入れる2の続き。

必要なもの

  1. android-sdk(mkbootfs、mkbootimg)

リカバリーモード用のinitramfsを書き換える。
リカバリーモードで起動すると、initramfsの/initが実行されるが、
initの中身を書き換えて、SDにLinuxのルートファイルシステムがあれば、
そちらを起動するようにする。
SDカードがなければ通常のリカバリーモードが実行されるようにする。
まずは、リカバリーモード用のパーティションを書き換える必要がある。

リカバリーモード用のパーティションの調べ方。

LTN上のコンソールを表示する。
LTNに端末ソフトを入れるか、PCからLTNへadb軽油で接続する。
リカバリーモード用のパーティションは、ロットとかモデルによって違うかもしれない。
操作を誤ると起動しなくなったり、メーカー修理になることもあるので注意すること。

mountコマンドでマウントされているパーティションを調べる。

$su
#busybox mount
/dev/block/mmcblk3p2 /fdt
/dev/block/mmcblk3p6 /system
/dev/block/mmcblk3p9 /data
/dev/block/mmcblk3p7 /cache
/dev/block/mmcblk3p1 /misc

私のLTNは上記のようになっている。
マウントされていないmmcblk3p3が、リカバリー用パーティションと仮定して、
ddコマンドで中身を取り出し、イメージをSDカードに保存する。

#busybox mount /dev/block/mmcblk2p1 /sdcard
#busybox dd if=/dev/block/mmcblk3p3 of=/sdcard/recovery.img

recovery.imgをzImageとinitramfsに分解する。
これはPC上で行う。

分解用のperlスクリプトがあるみたいだが、リンク切れで入手できなかった。
なので、自分でc言語で抜き出しソフトを書いた。
intel のx86用バイナリを置いておく。

「android_split」をダウンロード

以下のようにするとファイルが抜き出せる。

$android_split recovery.img

できるファイルは3つ。
android.header.bin
android.kernel.bin
android.ramdisk.bin

抜き出したイメージがAndroid用のboot、またはリカバリーイメージでない場合は、
not ANDROID imageと出るので、そのときは違うパーティションで試すこと。

android.header.binはファイル中の先頭から2KBのもの。
ヘッダや起動時にカーネルへ渡すコマンドライン等が入っている。android.kernel.binはzImageそのもの。android.ramdisk.binはinitramfs。

抜き出したinitramfsを以下のようにしてマウントする。
rootになって行う。

#mkdir ramdisk
#cd ramdisk
#zcat ../android.ramdisk.bin | cpio -id

以下のようなファイルがあるはず。

data
default.prop
dev
etc
init
init.goldfish.rc
init.rc
proc
res
sbin
sys
system
tmp
var

起動に必要なファイル(busybox)をramdisk/sbin/にコピーする。
そして必要そうなファイルも用意しておく。
(busyboxは/xxx/yyy/busyboxにある場合)

#cp /xxx/yyy/busybox sbin/
#cd sbin
#chmod 755 busybox
#ln -s /sbin/busybox switch_root
#ln -s /sbin/busybox mount
#ln -s /sbin/busybox umount
#ln -s /sbin/busybox mknod
#ln -s /sbin/busybox cp
#ln -s /sbin/busybox mv
#ln -s /sbin/busybox rm

起動時に表示される画像(ロゴ)もじゃまなので、

ramdisk/のinitlogo.rleをinitlogo.rle.disable等にファイル名を変更しておく。

initの改変

android2.2(froyo)のinit.cに以下のパッチをあてる。
コンパイル済みのバイナリも用意した。

パッチの内容
android-2-2のsystem/core/init/init.cのmain関数。
action_for_each_trigger("init", action_add_queue_tail);
drain_action_queue();
の後に以下のコードを入れる。
init.rcのinitセクションを実行した後に実行されるような箇所。

busyboxのswitch_rootコマンドでrootfsの移行をしている。
(/rootにSDカードをマウントする処理が必要)

//<- for LTN
    {
    static char *argv[] = {"switch_root","/root","/sbin/init","/bin/bash",NULL};

    // SD Card Check
    fd = open("/root/sbin/init",O_RDONLY);
    if (fd >= 0) {
        close(fd);
        umount("/tmp");
        umount("/cache");
        umount("/sys");
        umount("/proc");
        umount("/dev/pts");
        umount("/dev");
        execv("/sbin/busybox",argv);
    }
    }
// ->

「init」をダウンロード

initをramdiskの/にコピーし、実行権限をつけておく。

init.rcの変更をする。
initramfs内で、/rootを作成し、/dev/block/mmcblk2p1(rootfs)をマウントする指示を付け加える。

変更する箇所は以下の場所(+の行。+は含めない)
# create mountpoints
     mkdir /sdcard
     mkdir /misc
     mkdir /staging
     mkdir /system
     mkdir /data
     mkdir /cache
+   mkdir /root
     mount tmpfs /tmp /tmp

...

  # mount mtd partitions
  # Mount /system rw first to give the filesystem a chance to save a checkpoint
  # mount ext2 /dev/block/mmcblk3p6 /system
  # mount ext2 /dev/block/mmcblk3p6 /system ro remount
+  mount ext3 /dev/block/mmcblk2p1 /root
      mount ext3 /dev/block/mmcblk3p7 /cache nosuid nodev
      chown system cache /cache
      chmod 0770 /cache

変更準備が終わったら、新recovery.imgを作る。
ramdiskの階層で以下のコマンドを実行(mkbootimg は長いけど一行で)。

#find . | cpio -o -H newc | gzip > ../android.ramdisk-new.bin
#mkbootimg --cmdline 'mem=384M@0M nvmem=128M@384M vmalloc=256M video=tegrafb console=tty0,115200n8 usbcore.old_scheme_first=1 \
#no_console_suspend tegraboot=sdmmc egrapart=pt:600:80:800,bootloader:680:400:800,fdt:1180:12c00:800, \
#recovery:13d80:a00:800,boot:14800:1000:800,mbr:b80:200:800,system:15880:18000:800, \
#cache:2d900:12c00:800,misc:d80:400:800,staging:40580:1f400:800,userdata:5fa00:35b600:800' \
#--kernel android.kernel.bin --ramdisk android.ramdisk-new.bin --base 0x10000000 -o recovery2.img

 (最初に抜き出したrecovery.imgをとっておけば、いつでも戻せる)

recovery2.imgをSDカードへコピーする。
(/mnt/hd1がSDカードの第一パーティション)

#cp recovery2.img /mnt/hd1/
#umount /mnt/hd1

そして、LTNへSDカードを挿入しAndroidを起動する。
LTN上で端末ソフトを起動し、ddで書き込む。
/dev/block/mmcblk3p3がリカバリーパーティションでない場合は適時読み替えること。

$su
#busybox mount /dev/block/mmcblk2p1 /sdcard
#cd /sdcard
#busybox dd if=./recovery2.img of=/dev/block/mmcblk3p3

Debianのルートファイルシステムが入っているSDをLTNに入れて、
HOMEキーを押しながら電源ONにすると、Debianが立ち上がるはず。


| コメント (0) | トラックバック (0)

2011年5月21日 (土)

LifeTouch NoteにDebianを入れる2

LifeTouch NoteにDebianを入れる1の続き。

無線LANとBluetoothを使えるようにする。

1.無線LAN

LTNで使用している無線LANはbcm4329。
bcm4329は動作させるためにファームウェアを読み込む必要がある。
これに必要なファイル一式をSDカードにコピーする。
コピー元のファイルは、Androidの/system/lib/hw/wlan/にある。

事前にAndroid上で無線LANを使えるようにしておく。

LTNにDebianのルートファイルシステムを書き込んだSDカードを挿入し、マウントする。
ext3なので手動でマウントさせる必要がある。

LTN上に入れた端末ソフトか、PCからLTNへadbで接続してLTNのコンソールで操作する。

$su
#busybox mount /dev/block/mmcblk2p1 /sdcard
#cd /sdcard/lib
#busybox mkdir firmware
#cd firmware
#busybox cp /system/lib/hw/wlan/* .
#busybox rm nvram.txt
#busybox mv usibcm4329-RC128-nvram.txt nvram.txt

usibcm4329-RC128-nvram.txtはファイル名が違うかもしれないので、そのときは適時読み替えること。

以下のようなファイルが/sdcard/lib/firmwareにあるはず。

bcm4329.ko
fw_bcm4329.bin
fw_bcm4329_apsta.bin
nvram.txt
calibration

2.Bluetooth

Bluetoothを動かすために、bcm4329にファームウェアをロードする必要がある。
そのファームウェアは/system/lib/BCM4329B1.hcdにある。
ファームウェアをロードするためにbrcm_patchram_plusというのも必要になるが、元のAndroid用のは使えないので、ソースコードにパッチをあててコンパイルする必要がある。

まずは、BCM4329B1.hcdを/sdcard/lib/firmwareにコピーする。

#busybox cp /system/lib/BCM4329B1.hcd .
#busybox mv BCM4329B1.hcd bcm4329.hcd

コピーが終わったらSDカードをアンマウントしてPCに挿入する。

brcm_patchram_plusはAndroid用のソースをダウンロードしてきてパッチをあてて作成する。
brcm_patchram_plusの作り方の元ネタはここ
コンパイル済みのものを用意した。
「brcm_patchram_plus」をダウンロード

 

brcm_patchram_plusをSDカードの/usr/bin/にコピーする。
(私の環境では、/dev/sdc1がSDカードの第一パーティション)

#mount /dev/sdc1 /mnt/hd1
#cp brcm_patchram_plus /mnt/hd1/usr/bin/
#chmod 755 /mnt/hd1/usr/bin/brcm_patchram_plus

3.その他

Linuxで起動したときに、無線LAN用モジュールをロードするようにスクリプトを用意する。

perlで適当に作ったスクリプト。
「ltnaw」をダウンロード

 

ltnawをSDカードの/etc/init.d/にコピーする。
#cp ltnaw /mnt/hd1/
#chmod 755 /mnt/hd1/etc/init.d/ltnaw
#ln -s /etc/init.d/ltnaw /mnt/hd1/etc/rc2.d/S10ltnaw
#ln -s /etc/init.d/ltnaw /mnt/hd1/etc/rc3.d/S10ltnaw
#ln -s /etc/init.d/ltnaw /mnt/hd1/etc/rc5.d/S10ltnaw

/etc/network/interface ファイル

以下のようなinterfacesファイルを作って、SDカードの/etc/network/にコピーする。
(essidsecretは、使用しているessidに書き換えること)

auto lo
iface lo inet loopback

allow-hotplug eth0
auto eth0
iface eth0 inet dhcp
wpa-essid "essidsecret"
wpa-driver wext
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#cp interfaces /mnt/hd1/etc/network/

wpa_supplicant.conf ファイル
以下のようなwpa_supplicant.confファイルを作って、SDカードの/etc/wpa_supplicant/にコピーする。
(WPA2の場合)

ctrl_interface=eth0
update_config=1
network={
    proto=WPA2
    ssid="essidsecret"
    psk="psksecret"
    key_mgmt=WPA-PSK
    pairwise=CCMP
    priority=1
}

#cp wpa_supplicant.conf /mnt/hd1/etc/wpa_supplicant/

カーネルモジュール

nvidiaのtegra用Linuxカーネルを元に、NTNの/proc/config.gzの設定を摘要させ、
できたLinuxカーネルモジュールをSDカードの/lib/modulesにコピーしておく。
(ないと、起動時にエラーかなにかが出るため)
このモジュールはきちんと使えるか不明。
NECがきちんと、LTN用のLinuxカーネルを公開してくれれば問題ないんだが。
(GPLだから公開する義務があるはず...)

「libs.tar.gz」をダウンロード

(/xxx/yyy/libs.tar.gz はlibs.tar.gz ファイルの場所)
#cd /mnt/hd1/
#tar xfpz /xxx/yyy/libs.tar.gz

LifeTouch NoteにDebianを入れる3に続く。

| コメント (0) | トラックバック (0)

« 2011年4月 | トップページ | 2014年7月 »