概要
https://github.com/raspberrypi/linux を見てると、rpi-4.14.y-rt というブランチが。。
らずぱいのフォーラムの、New RT (Real Time) kernel branch にて、PREEMPT_RTをサポートしたブランチ (-rt) を作った、とのこと。
このブランチからソースを持ってきて、いつも通りカーネルのビルドをすればよいらしい。
ビルドしたバイナリを用意したので、かるく使ってみよう。
-
特にリアルタイムカーネルを実感するほどのようなことを試していないので、うまいテストがあったら教えてください...
環境
- 実行環境
- Raspberry Pi 3
- Raspbian: 以下をベースに、
sudo sh -c 'apt update && apt upgrade && reboot'
2018-06-27-raspbian-stretch.img
2018-06-27-raspbian-stretch-lite.img
- カーネルのバージョンが
Linux raspberrypi 4.14.50-v7+ #1122 SMP Tue Jun 19 12:26:26 BST 2018 armv7l GNU/Linux
から、
Linux raspberrypi 4.14.52-v7+ #1123 SMP Wed Jun 27 17:35:49 BST 2018 armv7l GNU/Linux
になる。(2018/7/30現在)
TL;DR;
-
Raspbianを焼く
-
sudo sh -c 'apt update && apt upgrade && reboot'
-
以下、実行
コピペ
cd
mkdir -p work
cd work
wget https://github.com/mt08xx/files/raw/master/rpi/raspberrypi-kernel-4.14.52-rt34-SMP-PREEMPT-RT-20180730.1.tbz
tar jxvf ./raspberrypi-kernel-4.14.52-rt34-SMP-PREEMPT-RT-20180730.1.tbz
sudo cp -rv boot lib /
sudo reboot
4. 再起動後
```shell-session:カーネルバージョン確認
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.14.52-rt34-v7 #1 SMP PREEMPT RT Mon Jul 30 17:20:43 UTC 2018 armv7l GNU/Linux
pi@raspberrypi:~ $
手順
-
ソース取得
https://github.com/raspberrypi/linux/tree/rpi-4.14.y-rt
v4.14.52-rt34 - hash: 36674db1d99952eb722669a69a659d6ba082847d
wget https://codeload.github.com/raspberrypi/linux/zip/36674db1d99952eb722669a69a659d6ba082847d -O linux-36674db1d99952eb722669a69a659d6ba082847d.zip
2. あとは、いつも通りビルド。。
3. ビルド後、アーカイブ作成
```bash
KERNEL=kernel7
mkdir -p mnt/boot/overlays/
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt modules_install
#
cp arch/arm/boot/zImage mnt/boot/${KERNEL}.img
cp arch/arm/boot/dts/*.dtb mnt/boot
cp arch/arm/boot/dts/overlays/*.dtb* mnt/boot/overlays/
cp arch/arm/boot/dts/overlays/README mnt/boot/overlays/
#
# アーカイブ作成
cd mnt
tar cjvf ~/raspberrypi-kernel-4.14.52-rt34-SMP-PREEMPT-RT-2018xxxx.y.tbz boot lib
テスト
-
ツールビルド
sudo apt install git build-essential -y
cd ~
git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
cd ~/rt-tests
make -j4
2. 軽くテスト
```bash
# clock固定
echo performance | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# シングルコア
cd ~/rt-tests && ./hackbench -l 1000000 & sleep 5 ; sudo ./cyclictest -p98 -m -l 50000; sleep 5 ; killall hackbench
# マルチコア
cd ~/rt-tests && ./hackbench -l 1000000 & sleep 5 ; sudo ./cyclictest --smp -p98 -m -l 50000; sleep 5 ; killall hackbench
その他
-
4.14.52
のカーネルに戻す。4.14.52
Linux raspberrypi 4.14.52-v7+ #1123 SMP Wed Jun 27 17:35:49 BST 2018 armv7l GNU/Linux
https://github.com/Hexxeh/rpi-firmware/commit/963a31330613a38e160dc98b708c662dd32631d5
sudo rpi-update 963a31330613a38e160dc98b708c662dd32631d5
2. `config.txt`にて、`kernel=ore-no-rt-kernel.img` という感じでファイル名で指定できる。
3. `make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig` で、`/`をおして、`PREEMPT_RT`を検索してみるのもよいかと。