|
|
![]() |
| >>How toのTopへ |
| OpenRTLinux v3.2-pre1の構築手順(続編) | 最終更新日:2003/04/24 |
| メーリングリストで公開されたパッチを使う事で、未解決だった起動精度の問題が改善されるので、OpenRTLinuxの構築の続編としてまとめる。なお、このHow-toは、Linux kernelがv2.4.18, OpenRTLinuxがv3.2-pre1を前提にしています。 それぞれの構築方法は、別のHow-to(Linux v2.4.18へのバージョンアップ, OpenRTLinux v3.2-pre1の構築手順)をご参照ください。 |
|
| 注) 記載している内容は、いかなる動作も保証しない完全無保証です。使用される場合は、すべて自己責任でお願いします。 弊社Web siteからファイルをダウンロードする場合は、ユーザIDを取得してください。 |
|
| 1. | Linux kernelに、メーリングリストで公開されたパッチをあてる。 (詳しくは、http://www.m17n.org/linux-sh/ml/linux-sh-ja/2003-04/msg00009.html参照) |
|
ここでは、linux kernel v2.4.18は /usr/src/sh-linux/linux-2.4.18/に、OpenRTLinux v3.2-pre1は /usr/src/sh-linux/rtlinux-3.2-pre1/に展開している事を前提としています。 (1) 弊社Web siteから必要なファイル(diff-2.4.18-ts-linux-20030407, diff-2.4.18-ts-rtlinux-20030407, libgcc-sh-mno-implicit-fp-20030110.tar.bz2, config-linux, config-rtlinux)を、/usr/src/sh-linux/にダウンロードする。 (2) #cd /usr/src (3) #tar jxvf /usr/src/sh-linux/ libgcc-sh-mno-implicit-fp-20030110.tar.bz2 (4) #cd /usr/src/sh-linux/linux-2.4.18 (5) #patch -p1 <../ diff-2.4.18-ts-linux-20030424 (6) #patch -p1 <../ diff-2.4.18-ts-rtlinux-20030424でパッチをあてる。 (7) kernelコンパイルに使用するincludeファイルにリンクをはる ・ #ln -s /usr/src/sh-linux/linux-2.4.18/include/asm /usr/sh-linux/include/asm ・ #ln -s /usr/src/sh-linux/linux-2.4.18/include/linux /usr/sh-linux/include/linux (8) #make ARCH=sh mrproper (9) #cp ../config-linux ./.config (10) #make ARCH=sh xconfig Linux/SuperH Kernel Configurationのメニュー画面が表示されるので、好みに合わせて設定する。(.configで既に設定してあるので、ここでは何も変更せず、Save and Exitを選択する。) (11) #make ARCH=sh CROSS_COMPILE=sh4-linux- INSTALL_MOD_PATH=/usr/src/sh-linux clean dep zImage modules modules_install これで、./arch/sh/boor/zImageと../lib/modules/2.4.18-sh-rtl/*が出来る。 |
| 2. | OpenRTLinux v3.2-pre1の再コンパイル |
|
OpenRTLinuxへのパッチあては不要で、主にRTモジュールのバージョンを一致させるために再コンパイルを行う。
(1) #cd /usr/src/sh-linux/rtlinux-3.2-pre1 (2) #ln -s ../linux-2.4.18 linux (3) #cp ../config-rtlinux ./.config (4) #make ARCH=sh CROSS_COMPILE=sh4-linux- DESTDIR=/usr/src/sh-linux/rtlinux-3.2-pre1 clean (5) #make ARCH=sh CROSS_COMPILE=sh4-linux- DESTDIR=/usr/src/sh-linux/rtlinux-3.2-pre1 xconfig デフォルト以外の動作確認はしていない。また、今回使ったパッチで、FP SUPPORTが使用出来る様になる。 (6) #make ARCH=sh CROSS_COMPILE=sh4-linux- DESTDIR=/usr/src/sh-linux/rtlinux-3.2-pre1 (7) #make ARCH=sh CROSS_COMPILE=sh4-linux- DESTDIR=/usr/src/sh-linux/rtlinux-3.2-pre1 install これで、/usr/src/sh-linux/rtlinux-3.2-pre1/usr/rtlinux-3.2-pre1/以下に、必要なモジュール等が作られるので、ターゲットのファイルシステムにコピーする。 前回同様、作成したモジュールは、rtl.o, rtl_time.o, rtl_sched.o, rtl_posixio.o, rtl_fifo.o, mbuff.oの6モジュールで、regression.shといくつかのサンプルプログラムで動作確認をする。 exsamples/の中には、使用しないのでパッチをあてていない物もあります。(parallelはコンパイルエラーになります) |
| 3. | ターゲット(SH4 CPU)のファイルシステムへコピー |
|
(1) 前回のHow-to(OpenRTLinuxの構築)でGNU/Linuxを構築したターゲット(SH)CPUを起動し、Linuxを立ち上げる。
(2) パソコン側で、#/etc/rc.d/init.d/nfs start (3) SH CPU側で#mount kitty:/usr /mnt NFS: NFSv3 not supported. Nfs warning: mount version older than kernel と出るが、気にしない。 (4) 以下、SH CPU側の手順 #cp -a /mnt/src/sh-linux/linux-2.4.18/arch/sh/boot/zImage /boot/vmlinuz #cp -a /mnt/src/sh-linux/lib/modules/2.4.18-sh-rtl /lib/modules/ #lilo ここまでで、Linuxのkernelとmodulesが、ターゲットにコピーできた。次は、OpenRTLinux関連の内、まずは必要な物だけをコピーする。 #cp -a /mnt/src/sh-linux/rtlinux-3.2-pre1/lib/modules/2.4.18-sh-rtl/misc /lib/modules/2.4.18-sh-rtl/ #cp -a /mnt/src/sh-linux/rtlinux-3.2-pre1/usr/rtlinux-3.2-pre1/modules/* /usr/ rtlinux-3.2-pre1/modules/ RT用のconfigファイルを一部変更する。 #vi /usr/rtlinux-3.2-pre1/include/rtl.configで、9,10行目を、 LINUX_SUBLEVEL=”18” LINUX_EXTRAVERSION=”sh-rtl” とする。 |
| 4. | OpenRTLinuxを動かす | |||||||||||||||||||||||||||
|
(1)一旦、これだけでOpenRTLinuxが立ち上がるか確認する。
まずは、SH CPU側で、#umount /mnt 次に、パソコン側で、#/etc/rc.d/init.d/nfs stop とし、再度SH CPU側で、#shutdown -r nowとする。 リブート後、SH CPU側で、 #rtlinux startとすると、以下のようなWarningが出るが、これは MODULE_LICENSE("GPL");などをOpenRTLinuxのモジュールソースに入れれば解決するのだろうが、気が引けるのでそのままにしている。気にしなくて良い。 |
||||||||||||||||||||||||||||
|
Warning: loading /usr/rtlinux-3.2-pre1/modules/rtl.o will taint the kernel: no license
Module rtl loaded, with warnings Scheme: (-) not loaded, (+) loaded (+) mbuff (+) rtl (+) rtl_fifo (+) rtl_posixio (+) rtl_sched (+) rtl_time |
||||||||||||||||||||||||||||
|
大切なのは、最後のメッセージ。いい感じである。 #lsmod すると、確かに組み込まれている。 |
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
| まだ、サンプルプログラムをコピーしていないので、#rtlinux stopで一旦 モジュールを取り外す。 | ||||||||||||||||||||||||||||
|
rmmod: rtl is in use
Scheme: (-) not loaded, (+) loaded (-) mbuff (-) rtl (-) rtl_fifo (-) rtl_posixio (-) rtl_sched (-) rtl_time |
| 5. | Regressionを動かす |
|
パソコン側で構築できている/usr/src/sh-linux/rtlinux-3.2-pre1/usr/rtlinux-3.2-pre1/regression* を/usr/rtlinux-3.2-pre1/にコピーする。
#cd /usr/rtlinux-3.2-pre1 #./regression.sh モジュール組み込み時のワーニングが、とても鬱陶しいが我慢。ワーニングを取り除くと、表示は以下の通り。 |
|
|
No directory for linux 2.3
---------------------------- - Installing basic modules - ---------------------------- Testing multiple loads of rtl.o... [ OK ] Testing multiple loads of rtl_time.o... [ OK ] Testing multiple loads of rtl_posixio.o... [ OK ] Testing multiple loads of rtl_fifo.o... [ OK ] Testing multiple loads of rtl_sched.o... [ OK ] Testing RTLinux fifos... [ OK ] Testing thread wait times... [ OK ] Testing that Linux time progresses... [ OK ] Testing that Linux time is monotonically increasing... [ OK ] Testing ping flood... [ OK ] Testing floating-point support... [ OK ] Removing rtl_sched.o... [ OK ] Testing periodic timer... [ OK ] Testing oneshot timer... [ OK ] |
|
| regression.logの中身は、以下の通り。 | |
|
grep: /include/linux/version.h: No such file or directory
rmmod: module periodic_test is not loaded rmmod: module rtl_fifo is not loaded rmmod: module rtl_posixio is not loaded rmmod: module rtl_sched is not loaded rmmod: module rtl_time is not loaded rmmod: module psc is not loaded rmmod: module rtl is not loaded rmmod: module fifo_module is not loaded Testing /dev/rtf1 . . 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 passed. Testing /dev/rtf32 . . 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 passed. Testing /dev/rtf63 . . 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 passed. Testing /dev/rtf10 . . 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 passed. Testing /dev/rtf11 . . 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 passed. Testing /dev/rtf12 . . 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 passed. rmmod: module fifo_module is not loaded rmmod: module thread_time is not loaded system (/sbin/rmmod thread_time): Success avg_drift: 1.86 us worst_drift: 27.00 us rmmod: module periodic_test is not loaded rmmod: module rtl_sched is not loaded rmmod: module psc is not loaded |
|
| X Window System上で、xtermを3つ開き、それぞれmeasurements, ls -R /, ps auxを動かす。また、telnetでSH(CPU)に接続しls -R /を実行させてみた。以前は、この状態でRTTaskの起動精度が600μsec程度まで悪化する現象が発生していたが、135μsec程度に改善されています。
CUIでmeasurementsを実行し、telnetでSH(CPU)に接続しls -R /を実行するだけだと起動精度の最悪値は75μsec程度。 |
| © 2012 Interface Corporation. All rights reserved. |
| |||||||||||||||||||||||||