- 论坛徽章:
- 0
|
使用rtai-3.6.1中对linux-2.6.23内核源码打上补丁,编译后得到一个rtai的内核,使用该内核启动后编译rtai模块,
代码是从网上得到的,如下
- #include <linux/module.h>
- #include <asm/io.h>
- #include <rtai.h>
- #include <rtai_sched.h>
- #include <rtai_fifos.h>
- #define TIMERTICKS 500000
- #define CMDF0 0
- #define ONE_SHOT
- static RT_TASK Slow_Task;
- static RT_TASK Fast_Task;
- static int cpu_used[NR_RT_CPUS];
- static void Slow_Thread(int t)
- {
- static struct { char task, susres;
- unsigned long flags;
- RTIME time;} msg = {'S',};
- while (1) {
- cpu_used[hard_cpu_id()]++;
- msg.time = rt_get_cpu_time_ns();
- msg.susres = 'r';
- rt_global_save_flags(&msg.flags);
- rtf_put(CMDF0, &msg, sizeof(msg));
- rt_busy_sleep(11*TIMERTICKS);
- msg.time = rt_get_cpu_time_ns();
- msg.susres = 's';
- rt_global_save_flags(&msg.flags);
- rtf_put(CMDF0, &msg, sizeof(msg));
- rt_task_wait_period();
- }
- }
- static void Fast_Thread(int t)
- {
- static struct { char task, susres;
- unsigned long flags;
- RTIME time;} msg = {'F',};
- while (1) {
- cpu_used[hard_cpu_id()]++;
- msg.time = rt_get_time_ns();
- msg.susres = 'r';
- rt_global_sti();
- rt_global_save_flags(&msg.flags);
- rtf_put(CMDF0, &msg, sizeof(msg));
- rt_busy_sleep(2*TIMERTICKS);
- msg.time = rt_get_time_ns();
- msg.susres = 's';
- rt_global_save_flags(&msg.flags);
- rtf_put(CMDF0, &msg, sizeof(msg));
- rt_task_wait_period();
- }
- }
-
- int init_module(void)
- {
- RTIME tick_period;
- RTIME now;
- rtf_create_using_bh(CMDF0, 20000, 0);
- rt_task_init(&Fast_Task, Fast_Thread, 0, 2000, 0, 0, 0);
- rt_task_init(&Slow_Task, Slow_Thread, 0, 2000, 1, 0, 0);
- #ifdef ONE_SHOT
- rt_set_oneshot_mode();
- #endif
- tick_period = 4*start_rt_timer(nano2count(TIMERTICKS));
- now = rt_get_time();
- rt_task_make_periodic(&Fast_Task, now + tick_period,
- tick_period);
- rt_task_make_periodic(&Slow_Task, now + tick_period,
- 6*tick_period);
- return 0;
- }
- void cleanup_module(void)
- {
- int cpuid;
- stop_rt_timer();
- rt_busy_sleep(10000000);
- rtf_destroy(CMDF0);
- rt_task_delete(&Slow_Task);
- rt_task_delete(&Fast_Task);
- printk("\n\nCPU USE SUMMARY\n");
- for (cpuid = 0; cpuid < NR_RT_CPUS; cpuid++) {
- printk("# %d -> %d\n", cpuid, cpu_used[cpuid]);
- }
- printk("END OF CPU USE SUMMARY\n\n");
- }
复制代码
Makefile 如下:
- obj-m := rt_process.o
- KDIR := /lib/modules/$(shell uname -r)/build
- PWD := $(shell pwd)
- EXTRA_CFLAGS := -I/usr/rtai/realtime/include -I/usr/rtai/linux-2.6.23/include -ffast-math -mhard-float
- default:
- $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
- clean:
- rm -rf *.ko *.o *.mod.o *.mod.c
复制代码
执行makefile的时候编译可以通过,但是会有一些未识别的内核符号的警告,如下:
- Building modules, stage 2.
- MODPOST 1 modules
- WARNING: "rt_get_time_ns" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rt_task_wait_period" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rtf_put" [/usr/rtai/myrtai/rt_process/rt_process.ko]undefined!
- WARNING: "rt_get_cpu_time_ns"[/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rt_task_make_periodic" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rt_get_time" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "start_rt_timer"[/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "nano2count" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rt_set_oneshot_mode" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rt_task_init" [/usr/rtai/myrtai/rt_process/rt_process.ko]undefined!
- WARNING: "rtf_create" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rt_task_delete" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rtf_destroy" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "rt_busy_sleep" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
- WARNING: "stop_rt_timer" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
复制代码
我想这应该是内核源码里面没有把这些函数export_symbol出来的原因吧,但怎么解决这个问题呢?有做过rtai开发的吗?不吝赐教呵呵……
到网上查了一些资料说只要把rtai的一些模块如:rtai_hal.ko rtai_sched.ko等加载到内核里去再编译,就可以解决这个问题,但我加载了rtai生成的realtime文件夹下module子目录里的这些模块后,问题依旧……
[ 本帖最后由 ppb0320 于 2009-8-8 14:41 编辑 ] |
|