何もインストールされていないターゲット向けにDebian基本システムを作る手順です。Debianの作法的に正しいかどうかはわかりません。
NFS-Rootのホスト側ディレクトリを/nfsroot/etch-ARCH として説明します。
ARCHはアーキテクチャ(arm, mipsel, powerpcなど)に置き換えてください。
debootstrapを--foreignオプションで実行します。
# debootstrap --foreign --arch ARCH etch /nfsroot/etch-ARCH http://ftp.debian.org/debian/
NFS-Root用の/etc/fstabを用意します。
# echo "proc /proc proc defaults 0 0" > /nfsroot/etch-ARCH/etc/fstab # echo "ホストのIPアドレス:/nfsroot/etch-ARCH / nfs defaults 0 1" >> /nfsroot/etch-ARCH/etc/fstab
/dev/consoleを作ります。
# mknod /nfsroot/etch-ARCH/dev/console c 5 1
NFSサーバの設定については触れません。
カーネルパラメータでホストの/nfsroot/etch-ARCHをNFS-Rootとして指定してカーネルを起動します。
カーネルパラメータの例:
console=ttyS0,115200n8 root=/dev/nfs nfsroot=ホストのIPアドレス:/nfsroot/etch-ARCH/ ip=ホストのIPアドレス:::サブネットマスク::eth0: init=/bin/sh
# mount -n -o remount,rw / # mount -n /proc # export PATH=/bin:/sbin:/usr/bin:/usr/sbin # date -s "2008-2-27 18:33"debootstrapを--second-stageオプションで実行します。
# /debootstrap/debootstrap --second-stage --no-resolve-deps
上記手順で作成したDebian基本システムをターゲットのNANDやCFなどにインストールして使う場合、事前にターゲットの環境に合わせて設定が必要になります。
よくある設定としては
といったところでしょうか。
シリアルコンソールであればttySnも作っておくといいかもしれません。
# cd /nfsroot/etch-ARCH/dev # ./MAKEDEV ttyS
dpkg-crossの基本的な使い方を知っている方向けの記事です。
dpkg-crossの--excludeオプションはクロスへ変換する際にDependsから特定のパッケージを取り除くオプションです。 最近追加 されたらしいのですが、使ってみたら便利だったので紹介します。
こんな感じです。
普通にクロスパッケージ化すると
$ dpkg -f lib64gcc1_4.1.1-21_powerpc.deb | grep Depends Depends: gcc-4.1-base (= 4.1.1-21), libc6-ppc64 (>= 2.3.6-7) $ dpkg-cross -a powerpc -b lib64gcc1_4.1.1-21_powerpc.deb Building lib64gcc1-powerpc-cross_4.1.1-21_all.deb $ dpkg -f lib64gcc1-powerpc-cross_4.1.1-21_all.deb | grep Depends Depends: gcc-4.1-base (= 4.1.1-21), libc6-ppc64-powerpc-cross (>= 2.3.6-7), libc6-ppc64-powerpc-dcv1
となります。
--excludeを使ってgcc-4.1-baseへの依存を削ると
$ dpkg-cross -a powerpc -b --exclude gcc-4.1-base lib64gcc1_4.1.1-21_powerpc.deb Building lib64gcc1-powerpc-cross_4.1.1-21_all.deb $ dpkg -f lib64gcc1-powerpc-cross_4.1.1-21_all.deb | grep Depends Depends: libc6-ppc64-powerpc-cross (>= 2.3.6-7), libc6-ppc64-powerpc-dcv1
となります。
社内で使っているクロス開発環境のDebianパッケージを公開します。
基本的にはetchのbinutils, gccをdebian/README.cross等の手順通りにビルドしたものですが、etchとsidの両方にインストールできるように依存関係を調整するなど若干の変更を加えています。
| gcc-3.4 | gcc-4.1 | g++-4.1 | |
|---|---|---|---|
| arm | ○ | ○ | ○ |
| mipsel | △ | ○ | △ |
| powerpc | ○ | × | × |
| sh4 | ○ | ○ | △ |
etchかsidであればインストールできる筈です。
/etc/apt/sources.listに以下のapt lineを加えます。
deb http://downloads.pylone.jp/cross-toolchain/deb ./
アーカイブの鍵を導入します。
# wget http://pylone.jp/pubkey.asc -O - | apt-key add -
パッケージ情報を更新します。
# aptitude update
必要なツールをインストールします。ARCHはarm、mipsel、sh4、powerpcの何れかに置き換えてください。
# aptitude install gcc-3.4-ARCH-linux-gnu
# aptitude install gcc-4.1-ARCH-linux-gnu
# aptitude install g++-4.1-ARCH-linux-gnu※ powerpc用g++はまだ用意できていません。
# aptitude install gdb-ARCH-linux-gnu
# update-alternatives --config ARCH-linux-gnu-gcc
sh4用glibcをビルドするにあたって、シリコンリナックス株式会社様が公開されているglibcパッケージのdebian/patches/sh/*.diffを使わせて頂きました。
前回の記事
でご紹介した uClibc によるルートファイルシステムとは別に
Debian GNU/Linux
環境もご提供させていただく予定です。
組込み Linux 開発において、アプリケーションのクロスコンパイルだけでそれなりの時間を取られてしまった経験のある開発者の方も多いかと存じます。 Debian の豊富なバイナリパッケージをお使いいただければ製品企画段階のデモ機作成などが手軽に行えます。