Intro.

bootc kernelのサイト(http://www.bootc.net/projects/raspberry-pi-kernel/)を見ていると、”hogehogeのカーネルモジュールを追加して欲しい”といったコメントが多いですね。また、自分用にRaspberry Piで動くリアルタイムカーネルを作りたい、という必要性もありました。
こうなったら、自分でカーネルの再構築するしかないですよね。
最初は、Raspberry Pi上でコンパイルしようかなと思ったのですが、5~6時間かかるということでNG。それならWindows上でQEMUでコンパイルすればいいんじゃね?と思ってQEMUを使ってみたら、Raspberry Piより動作が遅いのでNG。
というわけで、Debian GNU/Linux squeezeで、クロスコンパイル環境を作り、カーネルの再構築をしてみました。

0.このエントリーは”電脳あざらしの泳ぎ”(このサイトの本館)の記事”How to:クロスコンパイル環境を作り、カーネルの再構築をする(Raspberry Pi)”を再検証がてら書いたものです。

本館の記事では、Debian GNU/Linux Wheezyを使っていますが、こちらの記事では、Debian GNU/Linux squeezeを使っています。
1.前提となる環境

クロスコンパイル環境の作成については、Linuxさえ動いていれば、ディストリビューション、アーキテクチャーは基本的に関係ないはずです(むしろCPU性能が大事)。カーネルの再構築についてはmake-kpkgなどを使うのでDebian系ディストリビューションがいいでしょう。(多分、ubuntuでも同じ手順でできるのではないかと、未検証ですが)
また、LinuxのCUI環境に慣れている方向けです。

2.クロスコンパイル環境の構築

例のごとく、bootc kernel作者のサイト”Chris’s Digital Realm”の、http://www.bootc.net/archives/2012/05/26/how-to-build-a-cross-compiler-for-your-raspberry-pi/
を参考に進めていきます。

http://crosstool-ng.org/から、現時点での最新版のcrosstool-NG 1.17.0をダウンロードし、適当なところに展開します。私は/usr/local/srcにしました。

展開したディレクトリにcdし、

 

で、configureします。
/opt/cross配下に自分のユーザー権限でread/writeできるようにします。

$ make
$ sudo make install

$PATHに/opt/cross/binを追加します。
最後に、crosstool-NGの作業ディレクトリーを作ります。
$ mkdir ~/cross
(自分が読み書きできるところであれば、どんな場所、名前でもいいですが、amd64環境でディスク容量を3.5GBほど使用するので注意して下さい。以下、~/crossが作業ディレクトリーとして進めます)

この後必要になる、tool類をインストールします
$ sudo apt-get install bison flex texinfo libtool automake libncurses5-dev subversion

“Chris’s Digital Realm”では、このあと、crosstool-NGのmenuconfigに関する説明がだーっとありますが、ちょっと古いのと、Raspberry PiのARMアーキテクチャーに正確に一致していないために、Raspberry Piのforumにアップロードされている.configを拝借します。
wget、lynxなどで、http://www.raspberrypi.org/phpBB3/download/file.php?id=589のファイルをダウンロードしてきます。
http://www.raspberrypi.org/phpBB3/viewtopic.php?t=11315&p=129461にあるファイルです)
tar.gz形式のファイルですので、解凍します。すると、.configが得られます。この.configを~/crossにコピーします。
crosstool-NGでどのようなクロスコンパイル環境を作るかについてconfigureします。
$ cd cross
$ ct-ng menuconfig
ほとんど変更する点はありませんが、Operating System –> Linux kernel versionを3.2.32にします。(現時点でのbootc kernelのソースは3.2.23ベースですが問題ありませんでした)

クロスコンパイル環境を作ります
$ ct-ng build
最初にソースを取得し、あとはひたすら必要なバイナリーをコンパイルしてくれます。マシンパワーで大きく差がでますが、かなり時間がかかります。私の環境(某VPS、仮想3コア、メモリー2GB)で、30分程かかりました。
終わると、/opt/cross/x-tools/配下にクロスコンパイルに必要なバイナリー類が出来上がっていますので、パスを追加します。

3.bootc kernelのクロスコンパイル

公開されているbootc kernelはアーキテクチャーがarmelなので、試しにarmhfでコンパイルしてみます。
bootc kernelを取得します。
$ sudo apt-get git
$ git clone -b rpi-3.2.23 https://github.com/bootc/linux.git
(もしくは、https://github.com/bootc/linux/tree/rpi-3.2.23からzipファイルを取得。なお、gitコマンド実行時にダウンロードが始まるまで5分ぐらいかかるのでじっと我慢)

$ sudo apt-get install fakeroot kernel-package
$ wget http://apt.bootc.net/debian/pool/main/l/linux-source-3.2.23-rpi1+/linux-image-3.2.23-rpi1+_1_armel.deb
$ dpkg -x linux-image-3.2.23-rpi1+_1_armel.deb .
展開してできたディレクトリーのboot内にconfig-3.2.23-rpi1+があるので、これを取得したbootc kernelツリーに.configとしてコピー

 

oldconfigのところはconfigを変えたい場合にはconfigにすれば大丈夫

 

bootc kernelはやたらとカーネルモジュールが多いので、コンパイルに時間がかかります。別の作業でもして時間を潰して下さい。
エラーがなければ、カーネルツリーの一つ上のディレクトリーに.debファイルが出来上がっています。

4.カーネルのインストール

出来上がったパッケージをRaspberry Piに転送します。
あとは、root権限で
# dpkg -i linux-image-3.2.23+_0.1_armhf.deb
# cp /boot/vmlinuz-3.2.23+ /boot/kernel.img
としてrebootすれば、新しいカーネルで立ち上がります。
$ uname -a
して確認しましょう。

2 thoughts on “How to:Raspberry Pi(Raspbian”Wheezy”)用にクロスコンパイル環境を構築する

  1. Pingback: RaspBerry PiでLXC(Linux Container) | 電脳あざらしの泳ぎ Raspberry Pi 別館

Leave a reply

required

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">