# cvs -d:pserver:anonymous@cvs.gna.org:/cvs/rtai co showroomとしてインストールするが,proxy サーバ経由では CVS が使えないようだ.
# 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 で止める) # 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_hal
↓foo.datをグラフ表示したところ &ref(/:RTAI/period/foo.png)
時間が経過するに従いジッタが生じている.余分なモジュールを削除する等して,要改善.
# 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 (略) 1905.460718[Hz] 0.000077 -46.710920[deg] 0.000014 -43.897886[deg] sampling_period=0.00017095, resolution=3, recording_samples=2499, canceling_samples=2924Starting real time task ... done. done.ng for record ... 1949.844600[Hz] 0.000202 -140.362597[deg] 0.000045 -218.565118[deg] sampling_period=0.00016706, resolution=3, recording_samples=2499, canceling_samples=2992 Starting real time task ... done. done.ng for record ... 1995.262315[Hz] 0.000154 -72.083142[deg] 0.000026 -104.920862[deg]
# 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.cperiod_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.cfreqresp(周波数応答実験) freqresp.h freqresp.h
freqresp_module.c freqresp_module.c freqresp_app.c freqresp_app.c
# プログラム作成の参考資料:
* RTAI3.4 User Manual rev 0.3 * RTAI API Documentation