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

リンク

謝辞

sh4用glibcをビルドするにあたって、シリコンリナックス株式会社様が公開されているglibcパッケージのdebian/patches/sh/*.diffを使わせて頂きました。

CPU ボード Bishop (10)『Debian GNU/Linux』

Debian 前回の記事 でご紹介した uClibc によるルートファイルシステムとは別に Debian GNU/Linux 環境もご提供させていただく予定です。

組込み Linux 開発において、アプリケーションのクロスコンパイルだけでそれなりの 時間を取られてしまった経験のある開発者の方も多いかと存じます。 Debian の豊富な バイナリパッケージをお使いいただければ製品企画段階のデモ機作成などが手軽に行え ます。