LoginSignup
4
6

More than 5 years have passed since last update.

Raspberry PiのカーネルをPREEMPT_RTで作る

Last updated at Posted at 2018-11-02

リアルタイム性のあるOSを触ってみたくなった。Raspberry Pi 3にRTカーネルをインストールする。ビルドはクロス環境を使う。つまり、ホストとしてはWindows 10(Corei7)、ターゲットとしてRaspberry Pi 3。
環境構築方法は先輩諸氏の記事を参考にさせていただいた(末尾に挙げておいた)。

手順

ビルドするバージョンを決める(ホスト)

最新であればいいというわけではないらしい。今回は、比較的新しそうなリアルタイム・カーネルがあるので、それを使わせてもらう(手間が大幅に省ける)。

ビルドに必要なツールを揃える(ホスト)

rpiという作業用ディレクトリを作成することにする(好み)。

sudo apt-get install git bc
mkdir rpi
cd rpi
git clone https://github.com/raspberrypi/tools
export PATH=$PATH:~/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

カーネルを作るのに必要なソースをダウンロードする(ホスト)

git clone --depth=1 --branch rpi-4.18.y-rt https://github.com/raspberrypi/linux

ビルドの環境を整える(ホスト)

export INSTALL_MOD_PATH=`pwd`/rtkernel
mkdir -p $INSTALL_MOD_PATH

ビルドする(ホスト)

pushd linux
KERNEL=kernel7
make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtb
popd

ターゲットにコピーするファイルを集める(ホスト)

mkdir -p $INSTALL_MOD_PATH/boot
pushd linux
./scripts/mkknlimg ./arch/arm/boot/zImage $INSTALL_MOD_PATH/boot/$KERNEL.img
cp ./arch/arm/boot/dts/*.dtb $INSTALL_MOD_PATH/boot/
cp -r ./arch/arm/boot/dts/overlays $INSTALL_MOD_PATH/boot
popd
# Wifi用のFirmware
git clone --depth 1 https://github.com/RPi-Distro/firmware-nonfree
cp -r ./firmware-nonfree/brcm ./rtkernel/lib/firmware
# czf rpi-4.18.y-rt.tar.gzはターゲットにコピーするファイル
tar czf rpi-4.18.y-rt.tar.gz boot/ lib/

ターゲットにビルドしたカーネルを展開する(ターゲット)

作成したカーネル(rpi-4.18.y-rt.tar.gz)は、ターゲットの$HOME/rtkernelにコピーしたとする。

# ファイルのコピーは省略(手段は何でもいい)
cd rtkernel
tar xzfrpi-4.18.y-rt.tar.gz

カーネルを書き換える(ターゲット)

動作が確認されているバージョンはバックアップしておく。

/boot/cmdline.txtsdhci_bcm2708.enable_llm=0という行を追加する。

sudo -s
cd boot
cp -rd * /boot/
cd ../lib
cp -rd * /lib/
reboot

テストしてみる(ターゲット)

uname -a
# Linux raspberrypi 4.14.74-rt44-v7+ #1 SMP PREEMPT RT Fri Nov 2 15:34:54 JST 2018 armv7l GNU/Linux
git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
cd ~/rt-tests
make -j4
# 
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
6
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
4
6