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人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/09/06 2018年 9月 05日
  2. Today's Linux 2018/09/07 2018年 9月 06日
  3. Today's Linux 2018/09/11 2018年 9月 10日
  4. Today's Linux 2018/09/12 2018年 9月 11日
  5. Today's Linux 2018/09/10 2018年 9月 09日

Linux Foundationについて

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

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

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

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

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

乞うご期待!