Raspberry Pi用のReal Time Linuxをビルドする

http://elinux.org/RPi_Kernel_Compilation を参考にしながら。


まず、Raspberry Pi用のkernelを取得する

git clone --depth 1 git://github.com/raspberrypi/linux.git

Raspberry Pi上でビルドすると半日くらいかかるらしいのでクロスコンパイラを取得する

wget https://github.com/raspberrypi/tools/archive/master.tar.gz
tar xzvf master.tar.gz

環境変数をセットする

export KERNEL_SRC=$HOME/linux
export CCPREFIX=$HOME/tools-master/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi-

kernelのディレクトリの掃除

cd $HOME/linux
make mrproper

パッチ適用

wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.12/patch-3.12.19-rt30.patch.gz
zcat patch-3.12.19-rt30.patch.gz | patch -p1

config修正。追加されたオプションはデフォルトでいいと思うので全部Enter押した

cp arch/arm/configs/bcmrpi_defconfig .config
make ARCH=arm CROSS_COMPILE=${CCPREFIX} oldconfig
make ARCH=arm CROSS_COMPILE=${CCPREFIX} menuconfig

ビルド

make ARCH=arm CROSS_COMPILE=${CCPREFIX}
make ARCH=arm CROSS_COMPILE=${CCPREFIX} modules
export MODULES_TEMP=$HOME/modules
make ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=${MODULES_TEMP} modules_install

不要なシンボリックリンクを削除

rm $HOME/modules/lib/modules/3.12.20+/build
rm $HOME/modules/lib/modules/3.12.20+/source

ファイルをRaspberry Piに転送&/bootに配置

scp arch/arm/boot/zImage pi:.
(Raspberry Piで) sudo mv zImage /boot/kernel.img
scp -r $HOME/modules/lib pi:.
(Raspberry Piで) sudo mv lib/* /lib

/boot/cmdline.txtに以下を追加 http://storyhub.actionaid.org/forums/viewtopic.php?f=29&t=39951&sid=8782e6586505dcd336665dc5a4466454

sdhci_bcm2708.enable_llm=0


性能調査。Maxが100マイクロ秒超えていて、今回使いたい用途には使えなかった。しかし、標準カーネルならMaxは4000マイクロ秒とかなので、かなりマシにはなっている。

$ ./cyclictest -t 5 -n -p 90 -i 50 -d 100 -c CLOCK_REALTIME -q
^CT: 0 ( 2403) P:90 I:50 C:  44660 Min:      2 Act:   26 Avg:   28 Max:     114
T: 1 ( 2404) P:90 I:150 C:  14887 Min:      5 Act:   54 Avg:   52 Max:     154
T: 2 ( 2405) P:90 I:250 C:   8933 Min:     15 Act:   44 Avg:   49 Max:     111
T: 3 ( 2406) P:90 I:350 C:   6381 Min:     15 Act:   25 Avg:   50 Max:     162
T: 4 ( 2407) P:90 I:450 C:   4963 Min:     13 Act:   34 Avg:   41 Max:     153

$ ./cyclictest -t 5 -n -p 90 -i 100 -d 100 -c CLOCK_REALTIME -q
^CT: 0 ( 2415) P:90 I:100 C:  43451 Min:      3 Act:   49 Avg:   31 Max:     111
T: 1 ( 2416) P:90 I:200 C:  21726 Min:     14 Act:   69 Avg:   30 Max:     106
T: 2 ( 2417) P:90 I:300 C:  14484 Min:     29 Act:   88 Avg:   47 Max:     124
T: 3 ( 2418) P:90 I:400 C:  10864 Min:     18 Act:   68 Avg:   49 Max:     120
T: 4 ( 2419) P:90 I:500 C:   8691 Min:     16 Act:   42 Avg:   43 Max:     114

 $ ./cyclictest -t 5 -n -p 90 -i 200 -d 100 -c CLOCK_REALTIME -q
^CT: 0 ( 2428) P:90 I:200 C:  15787 Min:     14 Act:   64 Avg:   34 Max:      89
T: 1 ( 2429) P:90 I:300 C:  10525 Min:     14 Act:   27 Avg:   27 Max:      92
T: 2 ( 2430) P:90 I:400 C:   7894 Min:     15 Act:   46 Avg:   26 Max:      66
T: 3 ( 2431) P:90 I:500 C:   6315 Min:     18 Act:   26 Avg:   33 Max:      74
T: 4 ( 2432) P:90 I:600 C:   5263 Min:     18 Act:   24 Avg:   31 Max:      7