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