Raspberry Pi 2 カーネル4.0.7のクロスコンパイルメモ
(参考サイト)
Kernel Building - Raspberry Pi Documentation
RaspberryPi - Raspberry Piのカーネルをクロスコンパイルする - Qiita
Raspberry Pi2のカーネルの再構築とGW-450Dを使えるようにする。 - 石を売る
raspberry pi 2のカーネルソースとツール取得
githubから取得。git pullしないなら--depth 1 をつけた方が早く取得できると思う。
$ git clone https://github.com/raspberrypi/linux.git $ git clone https://github.com/raspberrypi/tools.git
取得した時点で4.0.7だった。
pi@raspberrypi ~ $ uname -a Linux raspberrypi 4.0.7-v7+ #3 SMP PREEMPT Wed Jul 8 23:31:48 JST 2015 armv7l GNU/Linux
環境構築 CentOS 6.6 x86_64
いろいろと怒られたので、zlib.i686とlibstdc++.i686をyumで導入した。
$ sudo yum install zlib.i686 libstdc++.i686
ビルド
config設定
下記コマンドでデフォルトのコンフィグで.configが生成される。旧Raspberry Piの場合は引数が違うらしいので注意。
$ make ARCH=arm bcm2709_defconfig
カーネル、カーネルモジュール、デバイスツリーのビルド
gitで取得したtoolsのパスをCROSS_COMPILE以降に適切に入力する。
64bit CentOSでトライしたものの、x64だとライブラリが不足していたので32bitツールチェインでコンパイルした。
$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- zImage modules dtbs
コンパイルされたものを集める
適当なディレクトリを作っておいて、そちらにモジュールやらカーネルイメージやらを集める。 下記のコマンドだとtemp以下に集まる。
$ mkdir temp $ mkdir temp/overlays $ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=./temp modules_install $ scripts/mkknlimg arch/arm/boot/zImage temp/kernel7.img $ cp arch/arm/boot/dts/*.dtb temp $ cp arch/arm/boot/dts/overlays/*.dtb* temp/overlays $ cp arch/arm/boot/dts/overlays/README temp/overlays
sourceとbuildのシンボリックリンクが出来ていたので、転送サイズを減らすためにも消しておく。
シンボリックリンクを削除するので、パスの最後に/を付けないように注意。
$ rm temp/lib/modules/4.0.7-v7+/source temp/lib/modules/4.0.7-v7+/build
インストール
Raspberry Pi2の場合、カーネルイメージは/boot/kernel7.imgらしい。7が付いていない方は旧Raspberry Pi用とのこと。
適当なディレクトリ下に集めた雑多なファイルをRaspberry Pi2にscpして、下記コマンドをRaspberry Pi上で実行する。
$ sudo cp temp/kernel7.img /boot/kernel7.img $ sudo cp -r temp/lib / $ sudo chown -R root /lib/modules $ sudo chgrp -R root /lib/modules $ sudo cp temp/*dtb /boot $ sudo cp -r temp/overlays/ /boot
終わったら再起動する。失敗すると虹色画面で止まってしまうので、LED点灯が消えたら電源OFFして、SDカードの中身を修復してやりなおし。
Raspberry Pi2 Model B ボード&ケースセット (Standard, Clear)
- 出版社/メーカー: TechShare
- メディア: エレクトロニクス
- この商品を含むブログ (5件) を見る
AndroidのLogについて
出力方法
Logクラスのメソッドを使う。 Log.dのように、ログレベルの頭文字のメソッドが用意されている。
ERRORより酷いエラー*1の場合は、wtf *2 メソッドを使う。
フォーマット
幾つかある。logcat -v <format_name> でフォーマット指定が可能。
- threadtime
- [日付] [時刻] [PID?]-[TID?]/[アプリ名] [ログレベル]/[TAG]: [本文]
04-25 08:36:48.633 5265-5306/com.sample.hoge.test I/OpenGLRenderer﹕ Initialized EGL, version 1.4
- [日付] [時刻] [PID?]-[TID?]/[アプリ名] [ログレベル]/[TAG]: [本文]
ログレベル
- VERBOSE
- DEBUG
- INFO
- WARN
- ERROR
リリース版では出力を抑制する方法
ProGuardを使ったハックがあるらしい。