Raspberry Piのカーネルをクロスコンパイルする

  • 44
    Like
  • 4
    Comment
More than 1 year has passed since last update.

環境

MacのMountain Lion上のVM WareにUbuntu minimal版を入れて Ubuntu上でクロスコンパイルする.
なぜMinimal版かというとできるかぎりUbuntuの占有する領域を小さくしたから.
minimal版はここから入手できる.

ソースとツールの入手

gitをつかってとってくる.
https://github.com/raspberrypi にRaspberry Pi関係のソースやらがそろっている.
必要なリポジトリはlinuxtools
作業用のディレクトリとして~/にraspiを作った.

$ mkdir raspi
$ cd ./raspi
$ git clone https://github.com/raspberrypi/linux.git
$ git clone https://github.com/raspberrypi/tools.git

[追記]

必要なものをaptでインストールする.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get clean
$ sudo apt-get install build-essential libncurses5-dev

コンパイルの準備

ひとつ下のlinuxディレクトリに移動する.
Raspberry Pi上にある設定ファイルをもってきてconfigファイルを作成する.

$ cd ./linux
$ scp  pi@raspberrypi:/proc/config.gz ./
$ zcat config.gz > .config

コマンドがながくなるのでexportしておく.

$ export CCPREFIX=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-

設定ファイルを読み込む.

$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} oldconfig
$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} menuconfig

いろいろ聞かれますが すべてデフォルトのままにした.
menuconfigではloadしてsaveしてexitした.

ビルド

まてないのでj8オプションをつかった.

$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} -j8

適当なディレクトリをつくってそこにモジュールをいれた.

$ mkdir tmp
$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} modules -j8
$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=./tmp modules_install -j8

完了作業

scpでRaspberry Piに送る.
それで然るべき場所にコピーしてrebootすれば完了.
uname -aでカーネルのバージョンを確認できる.

$ scp -rp ./tmp/lib ./arch/arm/boot/zImage pi@raspberrypi:~/
$ ssh pi@raspberrypi
pi@raspberrypi $ sudo cp -rp ./lib /
pi@raspberrypi $ sudo cp -rp ./zImage /boot/kernel.img
pi@raspberrypi $ sudo reboot

追記:raspberrypiをSDカードにコピー

ddrescueを使います.
ddrescueはhomebrewをつかってインストールしました.

イメージは~/Downloadsの下に置いて SDカードはdisk5s1と認識されました.
SDカードをアンマウントしてから次のコマンドを入力します.

sudo ddrescue ~/Downloads/2013-09-25-wheezy-raspbian.img  /dev/disk5s1