NetWalker PC-Z1 カーネルのコンパイル

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 側に戻る。
パーティショニングは「ディスク全体を使用する」にしておく。

●クロスコンパイル

下記ページを参考にさせていただきました。

ひまじめ 組み込み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

NetWalker PC-Z1 カーネルのコンパイル」への2件のフィードバック

  1. 青木

    i386系は普通にchar=signed ですが、armelはchar=unsignedですので、要注意ですよね。こうなると、qemuもいるんですかね?

    ogaさんの情報等を参考に http://wiki.debian.org/Inst… を書きました。

  2. oga 投稿作成者

    なるほど、たしかに 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 とかむしろ参考にさせていただきます。
    ありがとうございました。

コメントは停止中です。