LoginSignup
11
12

More than 5 years have passed since last update.

Raspberry Piのカーネルにパッチ(aufs)当て&ビルド

Last updated at Posted at 2015-02-12

やること&やり方

Raspberry Piで1番有名なOSである、Raspbianでfsprotectを使うために、カーネルにaufsのパッチを当ててビルドしなければいけません。

Raspberry Pi自身でカーネルをビルドかけると、あまりにも時間がかかり待てないので、x64マシンでクロスコンパイルをかけて、カーネルだけをRaspberry Piに持っていくというやり方を行います。

ビルド環境

OS : Ubuntu 14.10 64bit
workspace : ~/raspberrypi_work/

作業手順

事前準備

Raspberry Pi上で、カーネル他ソフトウェアをアップデートする。

$ sudo apt-get update
$ sudo apt-get upgrade

環境構築

ここからの作業はUbuntu上で行います。
まず、作業に必要なパッケージをインストールする。

$ sudo apt-get install lib32ncurses5 lib32z1 libncurses5-dev gcc-arm-linux-gnueabi make libncurses5-dev git

Raspberry Pi用のカーネルソースをダウンロード。
この状態で、最新のカーネルをダウンロードされます。
もし、別のバージョンが欲しいときは、checkoutするブランチを変更してください。

~/raspberrypi_work$ git clone git://github.com/raspberrypi/linux.git

コンパイル時に必要なツールをダウンロード

~/raspberrypi_work$ git clone git://github.com/raspberrypi/tools.git

aufsのパッチを適用する

aufsのダウンロード

~/raspberrypi_work/linux$ git clone git://git.code.sf.net/p/aufs/aufs3-standalone aufs-aufs3-standalone
~/raspberrypi_work/linux/aufs-aufs3-standal$ git checkout aufs3.18.1+

ビルドに必要なものをコピー

~/raspberrypi_work/linux/aufs-aufs3-standalone$ cp -rp fs/ ../
~/raspberrypi_work/linux/aufs-aufs3-standalone$ cp -rp Documentation/ ../
~/raspberrypi_work/linux/aufs-aufs3-standalone$ cp -rp include/uapi/linux/aufs_type.h ../include/uapi/linux/

カーネルにパッチを当てる

~/raspberrypi_work/linux$ patch -p1 < aufs-aufs3-standalone/aufs3-kbuild.patch
~/raspberrypi_work/linux$ patch -p1 < aufs-aufs3-standalone/aufs3-base.patch
~/raspberrypi_work/linux$ patch -p1 < aufs-aufs3-standalone/aufs3-mmap.patch

ビルド

環境変数にクロスコンパイルの設定を追加

$ export MYCC=${HOME}/raspberrypi_work/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-

実行中のRaspberry Piからコンパイル時のオプションを取得

~/raspberrypi_work/linux$ scp pi@RaspberryPiのIPアドレス:/proc/config.gz ./
~/raspberrypi_work/linux$ zcat config.gz > .config

menuconfigでaufsを有効化する。
File systems > Miscellaneous filesystems > Aufs (Advanced multi layered unification filesystem) support を<*>にする

~/raspberrypi_work/linux$ make ARCH=arm CROSS_COMPILE=$MYCC menuconfig

カーネルのバージョンを修正する。
"EXTRAVERSION"に内容を追加する。

~/raspberrypi_work/linux$ vi Makefile

EXTRAVERSION = -aufs

カーネルのビルド

~/raspberrypi_work/linux$ make ARCH=arm CROSS_COMPILE=$MYCC

モジュールのビルド

~/raspberrypi_work/linux$ make ARCH=arm CROSS_COMPILE=$MYCC modules

Raspberry Piにデータのコピー

Raspberry Piにカーネルとモジュールを持っていくための準備をします。
まずは、カーネルモジュールを出力し、tar.gzで固める。

~/raspberrypi_work/linux$ make ARCH=arm CROSS_COMPILE=$MYCC INSTALL_MOD_PATH=../tmp/rpimod modules_install
~/raspberrypi_work/tmp/rpimod$ tar zcvf rpimod.tar.gz ./lib/modules

Raspberry Piにコピーします。

~/raspberrypi_work$ scp linux/arch/arm/boot/Image pi@RaspberryPiのIPアドレス:/boot/kernel_new.img
~/raspberrypi_work$ scp tmp/rpimod/rpimod.tar.gz pi@RaspberryPiのIPアドレス:~/rpimod.tar.gz

Raspberry Piに適用する

ここからは、Raspberry Piで作業します。
まず、カーネルを置き換える。

~# mv /boot/kernel.img /boot/kernel.img_orz
~# mv /home/pi/kernel_new.img /boot/kernel.img

次に、カーネルモジュールを適用する。

~# tar zxvf /home/pi/rpimod.tar.gz
~# cp -R lib/modules/3.18.6-aufs+ /lib/modules/

最後に、再起動して置き換えたカーネルで起動させる。

~# reboot

確認

置き換えたカーネルで起動したかを確認する。

~$ uname -a
3.18.6-aufs+
11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12