2009/10/17
NetWalker PC-Z1 カーネルのコンパイル
SD ブートで好きなだけ実験できる環境が出来たので次はカーネルをカスタマイズします。
●仮想マシン
Windows に VirtualBox をインストール。
あらかじめ Ubuntu 9.04 のインストール iso をダウンロードしておく。
VirtualBox で仮想マシンを [新規] 作成
仮想マシンが出来たらいったん [設定] を開く
[設定]
→ ネットワーク
アダプタの割り当てを「NAT」から「ブリッジアダプタ」に変更
→ CD/DVD-ROM
CD/DVD ドライブのマウント→iso イメージファイル
仮想メディアマネージャーからダウンロードしておいた ubuntu の iso を選択
ubuntu-9.04-desktop-i386.iso や ubuntu-9.04-desktop-amd64.iso 等
VirtualBox の「ファイル」→「環境設定」を開いてホストキーの確認
入力 の中の ホストキー
必要なら変更しておく。特にキーボードに右 ctrl キーがない場合は要変更。
作成した仮想マシンを起動して ubuntu をインストール。
右 Control キー、または設定したホストキーでマウスが HOST 側に戻る。
パーティショニングは「ディスク全体を使用する」にしておく。
●クロスコンパイル
下記ページを参考にさせていただきました。
・ひまじめ 組み込みLInux
「ARMクロス開発環境構築」の手順に従い ARM EABI (armel) 用ツールをインストール。
設定したら gcc-4.3-arm-linux-gnueabi binutils-multiarch を入れます。
クロス開発用ライブラリはここでは不要です。
次は「ARM用Linuxカーネルをソースからビルドする」を参照します。
libncurses5-dev も install 。
NetWalker のカーネルソースとビルド方法は下記ページを参考にさせていただきました。
・Android Zaurusの日記 NetWalkerのカーネルをリビルド
手順に従い上記ページ "*2" の場所から tar.gz をダウンロード。
解説の通りコンパイルしてみます。
CROSS_COMPILE は arm-linux-gnueabi- を指定。
config.gz はあらかじめ NetWalker の /proc からコピーしておく。
menuconfig でオプション確認と変更
以前作った 「[Ctrl] と [A] の併用化」 を動かすなら下記を enable に
( space キーを押して '<*>' にする)
できあがった arch/arm/boot/zImage を 起動確認用 micro SD の /boot に
ファイル名 zImage-10 としてコピー
/boot/boot.conf の最初のパスを zImage-10 に変更
microSD からの起動を確認。
あとはカーネルの設定を変更しつついろいろテストできます。
[Ctrl] と [A] の併用化 を試すなら
動きました。左手小指を使って Ctrl-H とか Ctrl-U とか使えています。
長かったけど、この設定を常用化できれば自分としては目的達成です。
関連エントリ
・NetWalker PC-Z1 Debian (2)
・NetWalker PC-Z1 Debian
●仮想マシン
Windows に VirtualBox をインストール。
あらかじめ Ubuntu 9.04 のインストール iso をダウンロードしておく。
VirtualBox で仮想マシンを [新規] 作成
OS タイプ: Linux バージョン: Ubuntu または Ubuntu (64bit) (64bit 仮想マシンに 32bit OS を入れてもかまわない) RAM 適量 (HOST PC の RAM 容量と相談) 可変容量で新規ディスク作成 20GB くらい
仮想マシンが出来たらいったん [設定] を開く
[設定]
→ ネットワーク
アダプタの割り当てを「NAT」から「ブリッジアダプタ」に変更
→ CD/DVD-ROM
CD/DVD ドライブのマウント→iso イメージファイル
仮想メディアマネージャーからダウンロードしておいた ubuntu の iso を選択
ubuntu-9.04-desktop-i386.iso や ubuntu-9.04-desktop-amd64.iso 等
VirtualBox の「ファイル」→「環境設定」を開いてホストキーの確認
入力 の中の ホストキー
必要なら変更しておく。特にキーボードに右 ctrl キーがない場合は要変更。
作成した仮想マシンを起動して ubuntu をインストール。
右 Control キー、または設定したホストキーでマウスが HOST 側に戻る。
パーティショニングは「ディスク全体を使用する」にしておく。
●クロスコンパイル
下記ページを参考にさせていただきました。
・ひまじめ 組み込みLInux
「ARMクロス開発環境構築」の手順に従い ARM EABI (armel) 用ツールをインストール。
設定したら gcc-4.3-arm-linux-gnueabi binutils-multiarch を入れます。
クロス開発用ライブラリはここでは不要です。
$ sudo apt-get install gcc-4.3-arm-linux-gnueabi binutils-multiarch libncurses5-dev
次は「ARM用Linuxカーネルをソースからビルドする」を参照します。
libncurses5-dev も install 。
NetWalker のカーネルソースとビルド方法は下記ページを参考にさせていただきました。
・Android Zaurusの日記 NetWalkerのカーネルをリビルド
手順に従い上記ページ "*2" の場所から tar.gz をダウンロード。
解説の通りコンパイルしてみます。
CROSS_COMPILE は arm-linux-gnueabi- を指定。
config.gz はあらかじめ NetWalker の /proc からコピーしておく。
$ tar -zxvf linux-fsl-imx51_2.6.28-15.50fsl1araneo7.tar.gz $ zcat config.gz > jaunty-arm/arch/arm/configs/netwalker_defconfig $ cd jaunty-arm $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- netwalker_defconfig $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
menuconfig でオプション確認と変更
以前作った 「[Ctrl] と [A] の併用化」 を動かすなら下記を enable に
( space キーを押して '<*>' にする)
Input device support ---> Miscellaneous devices ---> <*> User level driver support
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zImage modules
できあがった arch/arm/boot/zImage を 起動確認用 micro SD の /boot に
ファイル名 zImage-10 としてコピー
/boot/boot.conf の最初のパスを zImage-10 に変更
microSD からの起動を確認。
あとはカーネルの設定を変更しつついろいろテストできます。
[Ctrl] と [A] の併用化 を試すなら
# wget http://dench.flatlib.jp/arfiles/ctrla.tgz # tar -zxvf ctrla.tgz # cd ctrla # mknod /dev/uinput c 10 223 # ./ctrla /dev/input/event5
動きました。左手小指を使って Ctrl-H とか Ctrl-U とか使えています。
長かったけど、この設定を常用化できれば自分としては目的達成です。
関連エントリ
・NetWalker PC-Z1 Debian (2)
・NetWalker PC-Z1 Debian
2009/10/16
NetWalker PC-Z1 Debian (2)
容量増やして NetWalker の Debian に gdm, gnome を入れてみました。
入れてみただけでまだいろいろ問題があります。
取りあえず SD からの起動で環境を切り替えを行うテストなので。

オプティカルポイントの左右ボタンでクリックがきかないのに、ドラッグでウィンドウの移動はできる。
クリックしつつカーソルをわずかに動かすとボタンも反応する。
タッチパネルは補正されてないので位置がばらばら。
USB の外付けマウスだと普通に使えます。

起動直後の gdm でキー入力できない場合あり。
ネット経由で gdm を restart するか、しばらくして gdm が勝手に起動し直せば直るようです。
関連エントリ
・NetWalker PC-Z1 Debian
入れてみただけでまだいろいろ問題があります。
取りあえず SD からの起動で環境を切り替えを行うテストなので。

オプティカルポイントの左右ボタンでクリックがきかないのに、ドラッグでウィンドウの移動はできる。
クリックしつつカーソルをわずかに動かすとボタンも反応する。
タッチパネルは補正されてないので位置がばらばら。
USB の外付けマウスだと普通に使えます。

起動直後の gdm でキー入力できない場合あり。
ネット経由で gdm を restart するか、しばらくして gdm が勝手に起動し直せば直るようです。
関連エントリ
・NetWalker PC-Z1 Debian
2009/10/14
NetWalker PC-Z1 Debian
カーネルの再構築をテストするために SD からの boot を少々試しました。
取りあえずリカバリ microSD の中身を書き換えるだけで起動します。
/boot だけ残して本体フラッシュの中身をまるごとコピーするだけでも ubuntu が
SD から立ち上がるようです。カーネルのテストだけならこれで十分かもしれません。
手持ちが 2GB SD しかなく、ただのコピーだと入りきらなかったので Debian 入れてみました。
下記ページを参考にしました。ほぼこの手順通りに作業しています。
・D.3. Unix/Linux システムからの Debian GNU/Linux のインストール
最初にリカバリ用 micro SD を作成しており、そこから /boot 以外全部削除しています。
NetWalker がネットに繋がった状態です。
/media/disk の microSD を /mnt/sd にマウントし直す
install CD-1 の iso をあらかじめ download してあるなら
またはネットから実行する場合 ( http://www.debian.org/mirror/list)
モジュールをコピーしておく
手順通りです
起動してみます。
SHARP ロゴがでる前から、オプティカルポイントの左右ボタン (本体左側にあるマウスボタン)
の両方を押しっぱなしにします。そのまましばらく耐え続けて、うまく起動すると SHARP ロゴを
突き破ってコンソールが出現。root でログイン。

無線 LAN で繋がらないので、手持ちの USB LAN アダプタを試したら両方とも使えました。
USB1.1 のかなり古いものです。
・corega FEther USB-TX
・IO DATA Lan-Egg USB-ET/T
これで ssh を入れればリモートから作業できるようになりました。
コンソールだとカーソルが表示されないのでエディタの編集で少々困ります。
X を入れてみます。
xorg.conf を書き換えて Section "Device" のところに Driver "fbdev" を追加。
startx で取りあえず起動することがわかったので
起動します。
何も入っていません。

マウスボタンの同時押しを失敗しやすいのが難点ですが、micro SD から割と簡単に
起動できることがわかりました。
取りあえずリカバリ microSD の中身を書き換えるだけで起動します。
/boot だけ残して本体フラッシュの中身をまるごとコピーするだけでも ubuntu が
SD から立ち上がるようです。カーネルのテストだけならこれで十分かもしれません。
手持ちが 2GB SD しかなく、ただのコピーだと入りきらなかったので Debian 入れてみました。
下記ページを参考にしました。ほぼこの手順通りに作業しています。
・D.3. Unix/Linux システムからの Debian GNU/Linux のインストール
最初にリカバリ用 micro SD を作成しており、そこから /boot 以外全部削除しています。
NetWalker がネットに繋がった状態です。
$ sudo -s # apt-get update # apt-get install debootstrap
/media/disk の microSD を /mnt/sd にマウントし直す
# umount /media/disk # mkdir /mnt/sd # mount /dev/mmcblk0p1 /mnt/sd
install CD-1 の iso をあらかじめ download してあるなら
# mkdir /mnt/cd # cd # mount -t iso9660 -o loop debian-503-armel-CD-1.iso /mnt/cd # debootstrap --arch armel lenny /mnt/sd file:/mnt/cd
またはネットから実行する場合 ( http://www.debian.org/mirror/list)
# debootstrap --arch armel lenny /mnt/sd http:/ftp.~.org/debian/
モジュールをコピーしておく
# cp -r /lib/modules/* /mnt/sd/lib/modules
手順通りです
# LANG=C chroot /mnt/sd /bin/bash # mount -t proc proc /proc # cd /dev # MAKEDEV generic # dpkg-reconfigure tzdata
# vi /etc/hosts
127.0.0.1 localhost netwalker
# vi /etc/network/interfaces
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet dhcp
# aptitude update # aptitude install locales # dpkg-reconfigure locales
起動してみます。
# reboot
SHARP ロゴがでる前から、オプティカルポイントの左右ボタン (本体左側にあるマウスボタン)
の両方を押しっぱなしにします。そのまましばらく耐え続けて、うまく起動すると SHARP ロゴを
突き破ってコンソールが出現。root でログイン。

無線 LAN で繋がらないので、手持ちの USB LAN アダプタを試したら両方とも使えました。
USB1.1 のかなり古いものです。
・corega FEther USB-TX
・IO DATA Lan-Egg USB-ET/T
# /etc/init.d/networking restart
これで ssh を入れればリモートから作業できるようになりました。
コンソールだとカーソルが表示されないのでエディタの編集で少々困ります。
X を入れてみます。
# aptitude install xserver-xorg-video-fbdev # aptitude install xinit
xorg.conf を書き換えて Section "Device" のところに Driver "fbdev" を追加。
# vi /etc/X11/xorg.conf
~ Section "Device" Identifier "Configured Video Device" Driver "fbdev" Option "UseFBDev" "true" EndSection ~
startx で取りあえず起動することがわかったので
# aptitude install xterm fvwm
# vi /root/.xinitrc
xterm & exec fvwm
起動します。
# startx
何も入っていません。

マウスボタンの同時押しを失敗しやすいのが難点ですが、micro SD から割と簡単に
起動できることがわかりました。
2009/10/11
NetWalker PC-Z1 [A] キーを Control キーと兼用する実験
以前 キーボードのカスタマイズ でやりたかったのはこれです。
横に長い NetWalker の [A] キーを Ctrl キーと兼用にしています。
そのままキータイプした場合は文字 'A' が入力され、[A] を押したまま他のキーを押すと
Ctrl キー操作になります。
欠点は
・Ctrl-A の入力ができない
・文字 'A' キーのリピートができない
・[A] キーを離したときに文字 'A' が入力されるので表示が遅れる
Ctrl-A の入力には本物の [Ctrl] キーを使う必要があります。
[A] + [F] (Ctrl-F) など、コントロールキーとして機能する場合はリピートできます。
[A] キーは遅延判定になるので表示が遅れますが連続したキー入力には影響は出ません。
NetWalker の場合そのままでは uinput が使えないので、次のどちらかの手段が必要です。
(1) カーネルを入れ替えて uinput が使えるようにする。
(2) uinput の代わりに別のキーボードをつないで代用する。
(1) はまだ試していないので、本当に使えるかどうか確認していません。
他の PC の Linux 上では一応 uinput を使ってテストしています。
(2) の場合 USB の外付けキーボードをつないで代わりの出力先として流用します。
常に USB のキーボードがぶら下がっていることになるので全く実用的ではないです。
取りあえず標準状態の NetWalker で走らせるには (2) の方法を使います。
USB キーボードをつないだ状態で下記のように実行します。
・プログラム ctrla.tgz v1.00
・プログラム ctrla110.tgz v1.10
●アルゴリズム
[A] を押し続けている間に他のキーを押して離すと Control キーと見なします。
いったん Control キーと認識されると [A] キーを離すまで状態が続きます。
それ以外のキーストロークはバッファリングした後、判断可能な状態になったら文字
として出力します。
他にも一定時間 [A] を押し続けると Control と判定するとか、短い時間で先に [A]
より他のキーを離したときは文字と見なすとかいろいろ試しましたが、結局シンプルな
この方法が自然に扱えました。
関連エントリ
・NetWalker PC-Z1 設定とキーの打ち方
・NetWalker PC-Z1 と親指シフト入力
・NetWalker PC-Z1 Bluetooth とキーカスタムその他
・NetWalker PC-Z1 意外にいける
・Netwalker PC-Z1 買いました
横に長い NetWalker の [A] キーを Ctrl キーと兼用にしています。
そのままキータイプした場合は文字 'A' が入力され、[A] を押したまま他のキーを押すと
Ctrl キー操作になります。
欠点は
・Ctrl-A の入力ができない
・文字 'A' キーのリピートができない
・[A] キーを離したときに文字 'A' が入力されるので表示が遅れる
Ctrl-A の入力には本物の [Ctrl] キーを使う必要があります。
[A] + [F] (Ctrl-F) など、コントロールキーとして機能する場合はリピートできます。
[A] キーは遅延判定になるので表示が遅れますが連続したキー入力には影響は出ません。
NetWalker の場合そのままでは uinput が使えないので、次のどちらかの手段が必要です。
(1) カーネルを入れ替えて uinput が使えるようにする。
(2) uinput の代わりに別のキーボードをつないで代用する。
(1) はまだ試していないので、本当に使えるかどうか確認していません。
他の PC の Linux 上では一応 uinput を使ってテストしています。
(2) の場合 USB の外付けキーボードをつないで代わりの出力先として流用します。
常に USB のキーボードがぶら下がっていることになるので全く実用的ではないです。
取りあえず標準状態の NetWalker で走らせるには (2) の方法を使います。
USB キーボードをつないだ状態で下記のように実行します。
$ sudo ./ctrla -u /dev/input/event7 /dev/input/event5
・
・プログラム ctrla110.tgz v1.10
●アルゴリズム
[A] を押し続けている間に他のキーを押して離すと Control キーと見なします。
いったん Control キーと認識されると [A] キーを離すまで状態が続きます。
それ以外のキーストロークはバッファリングした後、判断可能な状態になったら文字
として出力します。
他にも一定時間 [A] を押し続けると Control と判定するとか、短い時間で先に [A]
より他のキーを離したときは文字と見なすとかいろいろ試しましたが、結局シンプルな
この方法が自然に扱えました。
関連エントリ
・NetWalker PC-Z1 設定とキーの打ち方
・NetWalker PC-Z1 と親指シフト入力
・NetWalker PC-Z1 Bluetooth とキーカスタムその他
・NetWalker PC-Z1 意外にいける
・Netwalker PC-Z1 買いました