Pylone Blog - タグ:debian
debootstrapの前半部分をホストで、後半をターゲットで行う手順
何もインストールされていないターゲット向けに 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-Rootでターゲットを起動
NFSサーバの設定については触れません。
カーネルパラメータでホストの/nfsroot/etch-ARCHをNFS-Rootとして指定してカーネルを起動します。
カーネルパラメータの例:
console=ttyS0,115200n8 root=/dev/nfs nfsroot=ホストのIPアドレス:/nfsroot/etch-ARCH/ ip=ホストのIPアドレス:::サブネットマスク::eth0: init=/bin/sh
ターゲットで後半部分を実行
debootstrapを実行するための準備をします。# 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などに インストールして使う場合、 事前にターゲットの環境に合わせて設定が必要になります。
よくある設定としては
- /etc/inittab
- /etc/fstab
- /etc/securetty
- /etc/resolv.conf
- /etc/network/interfaces
といったところでしょうか。
シリアルコンソールであればttySnも作っておくといいかもしれません。
# cd /nfsroot/etch-ARCH/dev # ./MAKEDEV ttyS
リンク
dpkg-crossの--exclude オプション
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パッケージ
社内で使っているクロス開発環境のDebianパッケージを公開します。
更新履歴
- 2007/11/09: 公開
- 2007/12/15: apt-lineのtypoを修正
- 2008/02/26: update-alternativesについての記述を追加
- 2008/07/04: mipsel で gcc-4.1 の動作を確認
- 2008/12/22: アーカイブの鍵についての記述を追加
- 2009/03/09: powerpc で動作を確認
概要
- ホストアーキテクチャ: i386
- ターゲットアーキテクチャ: arm, mipsel, powerpc, sh4
- コンパイラ: gcc-3.4, gcc-4.1, g++-4.1
- glibc: 2.3.6 (etch の glibc)
- ssp: 無効
基本的には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の何れかに置き換えてください。
gcc-3.4
# aptitude install gcc-3.4-ARCH-linux-gnu
gcc-4.1
# aptitude install gcc-4.1-ARCH-linux-gnu
g++-4.1
# aptitude install g++-4.1-ARCH-linux-gnu
※ powerpc用g++はまだ用意できていません。
gdb
# aptitude install gdb-ARCH-linux-gnu
gcc-3.4とgcc-4.1の切り替え
# update-alternatives --config ARCH-linux-gnu-gcc
リンク
- Embedded Debian Cross Development Environments
- Debian Wiki - SH4/CrossToolchain
- DebianCrossCompilerHowto
謝辞
sh4用glibcをビルドするにあたって、シリコンリナックス株式会社様が公開されているglibcパッケージのdebian/patches/sh/*.diffを使わせて頂きました。
CPU ボード Bishop (10)『Debian GNU/Linux』
前回の記事
でご紹介した uClibc によるルートファイルシステムとは別に
Debian GNU/Linux
環境もご提供させていただく予定です。
組込み Linux 開発において、アプリケーションのクロスコンパイルだけでそれなりの 時間を取られてしまった経験のある開発者の方も多いかと存じます。 Debian の豊富な バイナリパッケージをお使いいただければ製品企画段階のデモ機作成などが手軽に行え ます。