# cvs -d:pserver:anonymous@cvs.gna.org:/cvs/rtai co showroomとしてインストールするが,proxy サーバ経由では CVS が使えないようだ.
# cd /usr/src # tar zxvf rtai-snapshot.tar.gz
# cd rtai/showroom/v3.x/kern/shm
# make gcc -I. -I/usr/realtime/include -O2 -I/usr/src/linux/include -Wall -Wstrict-prototypes -pipe -o display display.c make -C /usr/src/linux CC=gcc SUBDIRS=$PWD V= modules make[1]: Entering directory `/usr/src/linux-2.6.20.21' CC [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm.o LD [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.o Building modules, stage 2. MODPOST 1 modules WARNING: vmlinux - Section mismatch: reference to .init.data:boot_params from .text between '_text' (at offset 0xc1000029) and 'checkCPUtype' (略) WARNING: "rt_busy_sleep" [/usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.ko] undefined! WARNING: "rt_get_time" [/usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.ko] undefined! WARNING: "nano2count" [/usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.ko] undefined! CC /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.mod.o LD [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.ko make[1]: Leaving directory `/usr/src/linux-2.6.20.21'undefined! とたくさん出るのは無視
# ../ldmod # insmod shm_rt.ko # ./display (ctrl-C で止める)数字が変化する様子が表示されればOK.(カーネル空間のモジュールがリアルタイムでカウンタを変化させ,shared memory を経由して,ユーザー空間のプログラムでカウンタの内容を表示する)
# rmmod shm_rt # ../remod ERROR: Module rtai_lxrt does not exist in /proc/modules ERROR: Module rtai_smp does not exist in /proc/modules ERROR: Module rtai_mup does not exist in /proc/modules ERROR: Module rtai_up does not exist in /proc/modules ERROR: Module rtai_hal is in use by rtai_sched 何故かエラー. # lsmod Module Size Used by rtai_sched 80424 0 rtai_hal 32340 1 rtai_sched (略) 手動で外す: # rmmod rtai_sched # rmmod rtai_hal
# cd /usr/src/rtai/showroom/v3.x/kern # cp -a shm period (とりあえずコピーしてから編集する) # cd period # mv display.c period_app.c # mv shm.c period_module.cMakefile, GNUmakefile 中,shm → period_module,display → period_app に修正する.
# make gcc -I. -I/usr/realtime/include -O2 -I/usr/src/linux/include -Wall -Wstrict-prototypes -pipe -o period_app period_app.c make -C /usr/src/linux CC=gcc SUBDIRS=$PWD V= modules make[1]: Entering directory `/usr/src/linux-2.6.20.21' CC [M] /usr/src/rtai/showroom/v3.x/kern/period/period_module.o /usr/src/rtai/showroom/v3.x/kern/period/period_module.c: In function ‘fun’: /usr/src/rtai/showroom/v3.x/kern/period/period_module.c:27: 警告: ‘t0’ may be used uninitialized in this function /usr/src/rtai/showroom/v3.x/kern/period/period_module.c:26: 警告: ‘s_time’ may be used uninitialized in this function LD [M] /usr/src/rtai/showroom/v3.x/kern/period/period_module_rt.o Building modules, stage 2. MODPOST 1 modules WARNING: vmlinux - Section mismatch: reference to .init.data:boot_params from .text between '_text' (at offset 0xc1000029) and 'checkCPUtype' WARNING: vmlinux - Section mismatch: reference to .init.data:boot_params from .text between '_text' (at offset 0xc1000037) and 'checkCPUtype' (略) [/usr/src/rtai/showroom/v3.x/kern/period/period_module_rt.ko] undefined! WARNING: "rt_get_time" [/usr/src/rtai/showroom/v3.x/kern/period/period_module_rt.ko] undefined! WARNING: "nano2count" [/usr/src/rtai/showroom/v3.x/kern/period/period_module_rt.ko] undefined! CC /usr/src/rtai/showroom/v3.x/kern/period/period_module_rt.mod.o LD [M] /usr/src/rtai/showroom/v3.x/kern/period/period_module_rt.ko make[1]: Leaving directory `/usr/src/linux-2.6.20.21' # ../ldmod # insmod period_module_rt.ko # ./period_app > foo.dat # rmmod period_module_rt # ../remod # rmmod rtai_sched # rmmod rtai_halfoo.datをグラフ表示した結果 時間が経過するに従いジッタが生じている.余分なモジュールを削除する等して,要改善.
# lspci -v (略) 03:01.0 Multimedia controller: Contec Co., Ltd Unknown device 8183 Subsystem: Contec Co., Ltd Unknown device 8183 Flags: medium devsel, IRQ 10 I/O ports at ece0 [size=32] 03:02.0 Multimedia controller: Contec Co., Ltd Unknown device 8153 Subsystem: Contec Co., Ltd Unknown device 8153 Flags: medium devsel, IRQ 6 I/O ports at ecc0 [size=32]id=8183 は D/A12-4(PCI), id=8153 は AD12-16(PCI).
# cd /usr/src/rtai/showroom/v3.x/kern/freqresp # mkdir data # make clean # make
# ../ldmod # /sbin/insmod freqresp_module_rt.ko # ./freqresp_app (2ch 分の周波数応答が出力されるが,一方がゲインがほぼ1, 位相が0になっていることを確認する) # rmmod _freqresp_module_rt # ../remod ERROR: Module rtai_mq does not exist in /proc/modules ERROR: Module rtai_lxrt does not exist in /proc/modules ERROR: Module rtai_smp does not exist in /proc/modules ERROR: Module rtai_mup does not exist in /proc/modules ERROR: Module rtai_up does not exist in /proc/modules (insmod していない module を rmmod しようとしてエラーになってるだけなので問題なし) # rmmod rtai_sched # rmmod rtai_hal
RTLinux 版 | RTAI版 | |
period(実行周期を記録する) | period.h | period.h |
period_module.c | period_module.c | |
period_app.c | period_app.c | |
period_da(DAボードから矩形波を出力する) | period.h(同上) | period.h(同上) |
period_da_module.c | period_da_module.c | |
period_app.c(同上) | period_app.c(同上) | |
adc.h | adc.h | |
adc.c | adc.c | |
freqresp(周波数応答実験) | freqresp.h | freqresp.h |
freqresp_module.c | freqresp_module.c | |
freqresp_app.c | freqresp_app.c |