SD ブートで好きなだけ実験できる環境が出来たので次はカーネルをカスタマイズします。
●仮想マシン
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 側に戻る。
パーティショニングは「ディスク全体を使用する」にしておく。
●クロスコンパイル
下記ページを参考にさせていただきました。
「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 とか使えています。
長かったけど、この設定を常用化できれば自分としては目的達成です。
i386系は普通にchar=signed ですが、armelはchar=unsignedですので、要注意ですよね。こうなると、qemuもいるんですかね?
ogaさんの情報等を参考に http://wiki.debian.org/Inst… を書きました。
なるほど、たしかに 255 でした。(signed だと -1)
printf( "%d\n", (char)-1 );
大抵は char の符号拡張に依存しないようコードを書いているはずですが
注意した方が良さそうですね。
特に int 代入後の定数比較とか
char a= -1; // or 255
int b= a;
if( b == 255 ){
}
template で char が渡っていると意外に気がつかないかもしれません。
wiki の方いろいろ情報がまとまってて勉強になりました。
UBI とかむしろ参考にさせていただきます。
ありがとうございました。