twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル Raspberry PiとMinnowBoardにLTSI-3.10 Kernelをインストールする

Raspberry PiとMinnowBoardにLTSI-3.10 Kernelをインストールする

つい先日正式リリースされたLTSI-3.10を早速Raspbery-pi (http://www.raspberrypi.org/) とMinnow Board (http://www.minnowboard.org/) に移植してみました。以下ではその手順を説明したいと思います。


(1) LTSI-3.10 入手
まず、LTSI-RC1をダウンロードします。リリース案内のページに、ダウンロード先のURLが書かれています。正式にリリースされたLTSI-3.10 は 3.10.31 をベースにしています。ダウンロードは、gitでも良いのですが、私は、まだ、慣れていないので、tarボール形式を使いました。適当なディレクトリの下に展開します。

$ cd work/patch
$ tar xvzf  ~/Download/patch-3.10.31-ltsi.gz


Raspbian on Raspberry Piへのインストール

次に、Raspberry-piのKernelビルド環境を構築します。クロスでも、セルフでも構いません。私は、両方試してみました。ただし、セルフでの構築には、忍耐力が必要です。セルフ環境の場合は、sshで、接続して構築しています。構築方法は、インターネット上にいろいろ書かれていますが、ここにも、掲載しておきたいと思います。


(a) クロスビルド環境 私は、Ubuntu Desktop 12.04 32bitの上に構築しました。必要なパッケージをインストールします。

$ sudo apt-get  install build-essential libncurses5-dev

  次に、クロスコンパイラを入手します。

$ wget  --no-check-certificate
https://github.com/raspberrypi/tools/archive/master.tar.gz

適当なところに展開します。私は、/optの下に展開しました。

$ cd /opt
$ tar xvzf  ~/Download/master.tar.gz


(b) セルフビルド環境

  Raspbianを入れておけば、多分ビルド環境は、整っていると思います。少なくとも、私の場合は、大丈夫でした。もし、makeできないということがあれば、(a)クロスビルド環境と同様に、必要なパッケージをインストールします。

$ sudo apt-get  install build-essential libncurses5-dev


(2) カーネルソース入手

    Raspbianのカーネルソースが、github上に公開されています。

$ wget --no-check-certificate https://github.com/raspberrypi/linux/archive/rpi-3.10.y.tar.gz

   作業ディレクトリ下に展開します。

$ cd ~/work
$ tar xvzf  ~/Download/rpi-3.10.y.tar.gz
$ cd  linux-rpi-3.10.y

以降、~/work/linux-rpi-3.10.yディレクトリで、作業します。LTSIのパッチを当てます。

$ cat  ~/work/patch/* | patch -p1

次に、現在、稼働中のRaspbian on Raspberry-piから、カーネルコンフィグを入手します。ここでは、Raspberry-piのホスト名をraspberryとします。

クロス環境の場合

$ scp  pi@raspberry:/proc/config.gz .
$ zcat config.gz  > .config

セルフ環境の場合

$ cp  /proc/config.gz .
$ zcat config.gz  > .config

make oldconfigコマンドで、カーネルコンフィグを反映します。カーネルバージョンの違いで、新規追加されたコンフィグの設定について質問されますが、まずは、全て、デフォルトにします。

クロス環境の場合

$ make  CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-  ARCH=arm oldconfig

セルフ環境の場合

$ make oldconfig

つづいて、make menuconfigコマンドで詳細コンフィグを決定します。

クロス環境の場合

$ make  CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-  ARCH=arm menuconfig

セルフ環境の場合

$ make  menuconfig

さあ、カーネルのコンパイル開始です。セルフ環境の場合は、夜間バッチの準備が必要です。

クロス環境の場合

$ make  CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-  ARCH=arm

セルフ環境の場合

$ nohup make  1>/tmp/log.txt 2>&1 &

セルフ環境の場合、リモートログインして作業しているため、ログアウトしても、ビルドが継続するように、nohupコマンドを使いました。

本体のビルドが終了したら、モジュールもコンパイルします。

クロス環境の場合

$ make  CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-  ARCH=arm modules

セルフ環境の場合

$ make modules

最後に、インストールします。クロス環境の場合は、ちょっと工夫が必要です。まず、一時的なディレクトリにモジュール群を格納し、それらをリモートコピーします。

クロス環境の場合

$ mkdir  /tmp/rasp-mod
$ sudo make  CROSS_COMPILE=~/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-  ARCH=arm \\

INSTALL_MOD_PATH=/tmp/rasp-mod modules_install

$ sudo rm  /tmp/rasp-mod/lib/modules/3.10.y/build
$ sudo rm  /tmp/rasp-mod/lib/modules/3.10.y/source
$ scp -rp  /tmp/rasp-mod/lib arch/arm/boot/zImage pi@raspberry:~/

ここで、Raspberry-piに、ログインして、scpしたファイルを展開します。

$ sudo cp -rp lib  /
$ sudo cp  /boot/kernel.img /boot/kernel.org
$ sudo cp -rp  zImage /boot/kernel.img

セルフ環境の場合

$ sudo make  modules_install
$ sudo cp  /boot/kernel.img /boot/kernel.org
$ sudo cp  arch/arm/boot/zImage /boot/kernel.img

以上で、構築が終わりました。リブートしましょう。

$ sudo reboot

 

Angstrom on MinnowBoardへのインストール

次に、LTSI on Minnowboardです。こちらは、セルフ環境のみ試してみました。手順は、Raspberry-piのセルフ環境と同様です。異なる点は、カーネルソースをMainLineカーネル(http://www.kernel.org)からダウンロードした点と、ブート方式が、EFIになっている点です。


(1) LTSI-3.10 の 入手

  Raspberry Piを参照してください。適当なディレクトリの下への展開まで、完了しておきます。

$ cd work/patch
$ tar xvzf  ~/Download/patch-3.10.31-ltsi.gz

 次に、MinnowboardのKernelビルド環境を構築します。クロスでも、セルフでも構いません。私は、セルフを試してみました。セルフ環境の場合は、sshで、接続して構築しています。Minnowboardの標準Distroは、Yoctoで構築されたAngstromです。Distributionの構築方法は、MinnowboardのWikiサイトにあるのですが、Kernelだけの構築方法は良く分からなかったので、以下は私が試した方法です。

ビルド環境構築

  Angstromを入れておけば、多分ビルド環境は、整っていると思います。少なくとも、私の場合は、大丈夫でした。もし、makeできないということがあれば、必要なパッケージをインストールします。

$ sudo apt-get  install build-essential libncurses5-dev


(2) カーネルソース入手

   Kernel.orgから、適当なカーネルをダウンロードします。私は、LTSIの正式リリースバージョンであった、3.10.31を選びました。作業ディレクトリ下に展開します。

$ cd ~/work
$ tar xvzf  ~/Download/linux-3.10.31.tgz

 

(3) Minnowパッチの作成

Mainlineのカーネルそのままでは、MinnowBoardのGPIO/LEDが使えないので、その機能のためのパッチを、作成します。もともとの、MinnowBoardのカーネルのバージョンを確認します。私は、3.8.13-yocto-standardでした。そこで、やはり、Kernel.orgから、3.8.13カーネルをダウンロードします。続いて、Angstrom上で、パッケージ管理コマンドopkgを使って、MinnowBoard用のカーネルソースを入手します。

$ opkg install  kernel-3.8.13-yocto-standard

両者の差分をとります。

$ diff -rNu  linux-3.10.13 /usr/src/kernel > patch-minnow

私の場合は、結果がかなり大きく、しかも、関係ない部分があったので、つぎのようにして、必要な部分だけ、抜き出しました。

$ mkdir  ~/patch-m
$ cd ~/patch-m
$ csplit  ~/patch-minnow /^diff/ {*}

これで、パッチの結果が、複数のファイルに分割されます。
Minnowに関するパッチだけ、探します。

$ grep  MINNOWBOARD *

該当するパッチファイルだけ、まとめます。

$ cat 見つかったファイル > ~/patch-minnow-result 
  

以降、~/work/linux-3.10.31ディレクトリで、作業します。Minnowboard用パッチとLTSIのパッチを当てます。

$ cat  ~/patch-minnow-result | patch -p1 
$ cat  ~/work/patch/* | patch -p1

次に、現在、稼働中のAngstrom on Minnowboardから、カーネルコンフィグを入手します。

$ cp  /proc/config.gz .
$ zcat config.gz  > .config

make oldconfigコマンドで、カーネルコンフィグを反映します。カーネルバージョンの違いで、新規追加されたコンフィグの設定について質問されますが、まずは、デフォルトにします。

$ make oldconfig

つづいて、make menuconfigコマンドで詳細コンフィグを決定します。

$ make menuconfig

さあ、カーネルのコンパイル開始です。

$ nohup make  1>/tmp/log.txt 2>&1 &

本体のビルドが終了したら、モジュールもコンパイルします。

$ make modules

最後に、モジュールとカーネルをインストールします。

$ sudo make  modules_install

カーネルは、EFIパーティションにインストールします。

$ sudo mount  /dev/sda1 /efi
$ sudo cp  /efi/vmlinuz /efi/vmlinuz.org
$ sudo cp  arch/arm/boot/zImage /efi/vmlinuz

以上で、構築が終わりました。リブートしましょう。

$ sudo reboot

あ、ブートしませんか?。電源を切って、再度入れてみて下さい。どうも、Angstrom Distributionの癖でしょうか、リブートがうまく効きません。

Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ


Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!