2013年5月9日木曜日

Wheezy用カーネルをクロスコンパイル環境で作ってみる

KURO-BOX/T4をWheezyにあげる前にカーネルを作っておきます。

PCはAMD FX6100(AMD880G+SB710)/8G/64GBSSDにWheezy(64bit版)入れてます。

1. 開発ツールをいれる
まずEmdebianの鍵を登録します。
debian# apt-get install emdebian-archive-keyring
次にパッケージのダウンロード元にEmdebianを追加します。
debian# vi /etc/apt/sources.list
↓以下を最後に追加
#
# -- Emdebian cross toolchains
#
deb http://www.emdebian.org/debian wheezy main
編集が終わったら更新します。
debian# apt-get update
更新できたらパッケージを追加します。
debian# apt-get install build-essential fakeroot
debian# apt-get build-dep linux
debian# apt-get install ncurses-dev ← menuconfig用にいれました
debian# apt-get install gcc-4.7-powerpc-linux-gnu
debian# update-alternatives --install /usr/bin/powerpc-linux-gnu-gcc powerpc-linux-gnu-gcc /usr/bin/powerpc-linux-gnu-gcc-4.7 47
debian# update-alternatives --install /usr/bin/powerpc-linux-gnu-gcc-ar powerpc-linux-gnu-gcc-ar /usr/bin/powerpc-linux-gnu-gcc-ar-4.7 47
debian# update-alternatives --install /usr/bin/powerpc-linux-gnu-gcc-nm powerpc-linux-gnu-gcc-nm /usr/bin/powerpc-linux-gnu-gcc-nm-4.7 47
debian# update-alternatives --install /usr/bin/powerpc-linux-gnu-gcc-ranlib powerpc-linux-gnu-gcc-ranlib /usr/bin/powerpc-linux-gnu-gcc-ranlib-4.7 47
debian# update-alternatives --install /usr/bin/powerpc-linux-gnu-cpp powerpc-linux-gnu-cpp /usr/bin/powerpc-linux-gnu-cpp-4.7 47
debian# update-alternatives --install /usr/bin/powerpc-linux-gnu-gcov powerpc-linux-gnu-gcov /usr/bin/powerpc-linux-gnu-gcov-4.7 47
カーネルソースも取ってきます。
debian# cd /usr/src ← ソースを展開するディレクトリに移動
debian# apt-get install debian-keyring
debian# apt-get source linux
2. mkimageの作成
あらかじめmkimageを作っておきます。
u-bootのソースを拾ってきます。 こちらからとってきました。
debian# wget ftp://ftp.denx.de/pub/u-boot/u-boot-2013.04.tar.bz2
解凍してコンパイルします。
debian# tar xjvf u-boot-2013.04.tar.bz2
debian# cd u-boot-2013.04
debian# make linkstation_HGLAN_config
debian# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make tools
適当なディレクトリにコピーしておきます。
debian# cp tools/mkimage /usr/local/bin/
debian# ln -s /usr/local/bin/mkimage /usr/bin/
3. dtcの作成
カーネルソースに入ってる物ではうまくFITイメージが作れなかったので古いもの(v1.2)でやることにします。
gitでdtcソースを取得します。 こちらからとってきました。
debian# cd /usr/src
debian# apt-get install git flex bison
debian# git clone http://git.jdl.com/software/dtc.git
debian# cd dtc
debian# git checkout v1.2.0
debian# make
適当なディレクトリにコピーしておきます。
debian# cp dtc /usr/local/bin/
debian# ln -s /usr/local/bin/dtc /usr/bin/
4. パッチあて
まずKURO-BOX/T4用のファイルをダウンロードしておきます。 こちらののページから必要なファイルを使わせてもらいます。
debian# cd /usr/src
debian# wget http://hiro7216.dyndns.org/blognplus/files/initrd.img
debian# wget http://hiro7216.dyndns.org/blognplus/files/kuro_nas_t4.its
同じページにある2.26.32用のパッチを3.2.41用に変えたもの(kuro-nas-t4-3.2.41-wheezy-2.diff)も入れておきます。
debian# wget https://sites.google.com/site/iroirofiles/kuro-nas-t4-3.2.41-wheezy-2.diff
debian# cd linux-3.2.41
debian# patch -p 1 < ../kuro-nas-t4-3.2.41-wheezy-2.diff
5. カーネルのコンパイルとか
T4用のコンフィグをコピーします。oldconfigでいろいろ聞かれてもそのままEnterで良いと思います。
debian# cp arch/powerpc/configs/kuro_nas_t4_defconfig .config
debian# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make oldconfig
設定を変更する場合は、menuconfigとかで。
debian# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make menuconfig
カーネルをコンパイルします。
debian# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make
マルチコアの環境であれば、-j(コア数)で速くなります。
debian# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make -j6 ← 6コアの場合
dtbファイルを作成します。
debian# scripts/dtc/dtc -I dts -O dtb -p 1024 -o ../kuro_nas_t4.dtb arch/powerpc/boot/dts/kuro_nas_t4.dts
モジュールをコンパイルし、移行用にアーカイブしておきます。
debian# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make modules
debian# mkdir ../modules ← モジュール用のディレクトリ作成
debian# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- INSTALL_MOD_PATH=../modules make modules_install
debian# cd ../modules
debian# tar zcvf /usr/src/modules-3.2.41.tgz lib ← 圧縮するファイル名(modules-3.2.41.tgz)は何でも
FITイメージを作成します。
debian# cd /usr/src
debian# cp linux-3.2.41/vmlinux.bin.gz vmlinuz
debian# mkimage -f kuro_nas_t4.its uImage-3.2.41-wheezy-2
できたuImage-3.2.41-wheezy-2とmodules-3.2.41.tgzをKURO-BOX/T4に移して使います。 (tftpとかで正しく起動するか試してから移すと良いと思います。)

参考: EmdebianToolchain - Debian Wiki
参考: Debian Linux Kernel Handbook - Common kernel-related tasks
参考: Hiroaki’s blog::Kernel 2.6.32をコンパイル

0 件のコメント:

コメントを投稿