Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

リアルタイム性のある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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away