秋の夜長の Raspberry Pi 3 カーネル・セルフ・ビルド
そんなわけで、RaspberryPi 3でカーネルをセルフビルドすると、何時間で終わるのでしょうか?
セルフビルドの良いところは、ビルド後の運用が素早いという点と、クロス環境(Linuxマシン)を用意する必要がない点です。 最初のビルド時間は長いですが、その後は差分のみですので、短ければ1~2分のビルド時間、5分程度のサイクルで再起動から検証できたりします。
CPUは熱くなるのでこのようにヒートシンクを付けたほうが良いです。電源アダプタやケーブルも気をつけましょう。 最大で2A食うようです。
以下はメモ書き。
CPU温度表示
cat /sys/class/thermal/thermal_zone0/temp
CPU周波数表示
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
では、早速準備しましょう。
今回は、Raspbianを使っている Moode Audio R2.7を使いました。 なぜか最新版のVolumio 2 だと上手くいかなかったからです。 パッケージの依存関係が壊れぎみ?
SDカードの領域を拡大
Moode Audio は WEB-UI からSDカードの領域を最大に広げられます。
Menu -> Configure から systemを選択して
「Expand SD Card storage」を yesに してSETボタンを押すと勝手に再起動します。
それ以外のOSの場合はraspi-config、もしくは、fdisk でパーティション変更して再起動後に resize2fs します。
ビルド環境の準備
sudo apt-get update
sudo apt-get -y install ncurses-dev device-tree-compiler bc
Moode Audio の場合はこれだけでOKでした。 gccやmakeなどが入っていない環境の場合はそれらもインストールします。
gccのバージョンを確認します。 カーネルをビルドしたgccバージョンを見るには
pi@moode:~ $ cat /proc/version
Linux version 4.4.19-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #906 SMP Tue Aug 23 15:53:06 BST 2016
4.9.3 のようですね。
インストールされているgccのバージョンは
pi@moode:~ $ gcc -v
Using built-in specs.
・・・・・・・・略
gcc version 4.9.2 (Raspbian 4.9.2-10)
4.9.2 ですね。 4.9.x なら問題ありません。 一致していない場合は、こちらのように一致させる作業が必要です。
※ rpi-source --skip-gcc として gccバージョンチェックをスキップする方法もあるようです。 実際に試したところ gcc バージョンが違っていても大丈夫でした。
カーネルソースのダウンロード
現在起動しているカーネルと同じバージョンのものを持ってきます。 なぜ最新版じゃないの? というのは、今回は、新しいものへの差し替えが目的ではないからです。
sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source
sudo chmod +x /usr/bin/rpi-source
sudo /usr/bin/rpi-source -q --tag-update
sudo rpi-source -d /home/pi/ ( --skip-gcc を付けるとgccバージョン無視)
カーネルソース一式が落ちてくるまで、しばらく待ちます。
以前は10~15分くらいだったのですが、昨日やってみたら1時間くらいかかりました。 ソースを置いているサーバーの応答に影響されているような気がします。
カーネルビルド
いよいよ、カーネルのビルドです。
最初にスーパーユーザーになっておきます。
sudo su
現在の起動中のKernel config情報を取得して、ビルドする.configへ反映します。
cd linux
modprobe configs
zcat /proc/config.gz > .config
make oldconfig
同じバージョンなので何も「yes/no」を求めてこないはずです。 カーネルソースの方が新しい場合は、追加になった項目をどうするか聞かれます。
makeは カーネル本体とモジュールとを個別にビルドしてみました。 timeコマンドを使ってかかった時間も計測してみました。 SDカードの速度に影響されますが、 トータルで 2時間くらいですね。
-j4 オプションで4並列でビルドするより、 -j6 の6並列でビルドした方が若干速いようでした。 logを取らないともう少し速くなると思います。
====== zImge =======
time make -j6 zImage 2>&1 | tee make1.log
real 32m1.401s
user 99m49.730s
sys 4m31.880s
====== modules =======
time make -j6 modules 2>&1 | tee make2.log
real 75m41.928s
user 266m24.640s
sys 15m31.250s
====== dtbs =======
time make dtbs 2>&1 | tee make3.log
real 0m14.773s
user 0m3.870s
sys 0m2.000s
実は、sshを切断すると、ビルドしているプロセスも落ちてしまいます。 2時間もsshを接続するためにPCの電源も入れっぱなしが嫌だというひとは、nohup コマンドでバックグラウンド処理にすればOKです。
nohup make -j6 zImage modules dtbs 2>&1 | tee make.log &
無事に終わったかどうかを確かめるには、LEDがチラチラしなくなった後、sshで接続して
cd linux
tail make.log
でどうでしょうか。
インストールと起動
ビルドしたカーネルをインストールして起動してみましょう。
モジュールのインストール
make modules_install
デバイスツリーオーバーレイのインストール
cp arch/arm/boot/dts/overlays/*.dtbo /boot/overlays/
cp arch/arm/boot/dts/overlays/README /boot/overlays/
カーネルのインストール(念のため現在のカーネルをバックアップ)
mv /boot/kernel7.img /boot/kernel7-bakup.img
cp arch/arm/boot/zImage /boot/kernel7.img
再起動します
reboot
再起動後、カーネルを確かめてみましょう。
pi@moode:~ $ uname -a
Linux moode 4.4.19-v7+ #1 SMP Wed Sep 21 11:00:36 EDT 2016 armv7l GNU/Linux
pi@moode:~ $ cat /proc/version
Linux version 4.4.19-v7+ (root@moode) (gcc version 4.9.2 (Raspbian 4.9.2-10) ) #1 SMP Wed Sep 21 11:00:36 EDT 2016
新しくなりましたね。
とはいっても、.configは今までと何も変えていないので、何も変化はないはずです。
ココまでが序章です。 あくまでも、この方法で問題なく起動できるカーネルがビルドできるのかを確かめる作業でした。
この後「Low-Latency」 カーネルや、352.8k / 384kHz対応のALSAドライバへの変更をやっていきましょう。
つづきはまた後日。
続きは、Low-Latency Kernelを通りこして Real Time Kernelまで行きました。 こちらからどうぞ。
※ 参考にさせていただいたwebサイト様はこちらです。 とても有用な情報と思います。
にほんブログ村
ブログランキングに参加中です。 めざせ1位!
もしよろしければ「ぽちっと」お願いします。
« Volumio2に秋月電子のI2CタイプOLEDを接続して曲名などを表示する方法(リベンジ) | トップページ | 秋の夜長は Raspberry Pi 3 で RT-Linux ビルドに挑戦 »
「Raspberry Pi」カテゴリの記事
- MotionEyeと余っているラズパイで監視カメラ(2024.11.21)
- 秋の夜長にはRaspberryPi5 RT-linux セルフビルド(2024.10.13)
- 秋の夜長にはRaspberryPi5 64bit版 Sabreberry32 ドライバコンパイル(2024.10.10)
- RaspberryPi 5 の公式OSは32bit版でも64bit?(2024.10.09)
- 秋の夜長にはRaspberry Pi5 64bit カーネル・セフル・ビルド (2024.10.07)
« Volumio2に秋月電子のI2CタイプOLEDを接続して曲名などを表示する方法(リベンジ) | トップページ | 秋の夜長は Raspberry Pi 3 で RT-Linux ビルドに挑戦 »
コメント