免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2329 | 回复: 0
打印 上一主题 下一主题

RTAI模块的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-08 14:36 |只看该作者 |倒序浏览
使用rtai-3.6.1中对linux-2.6.23内核源码打上补丁,编译后得到一个rtai的内核,使用该内核启动后编译rtai模块,
代码是从网上得到的,如下

  1. #include <linux/module.h>
  2. #include <asm/io.h>
  3. #include <rtai.h>
  4. #include <rtai_sched.h>
  5. #include <rtai_fifos.h>
  6. #define TIMERTICKS 500000
  7. #define CMDF0 0
  8. #define ONE_SHOT
  9. static RT_TASK Slow_Task;
  10. static RT_TASK Fast_Task;
  11. static int cpu_used[NR_RT_CPUS];
  12. static void Slow_Thread(int t)
  13. {
  14.         static struct {     char task, susres;
  15.                        unsigned long flags;
  16.                        RTIME time;} msg = {'S',};
  17.         while (1) {  
  18.            cpu_used[hard_cpu_id()]++;
  19.             msg.time = rt_get_cpu_time_ns();
  20.             msg.susres = 'r';
  21.            rt_global_save_flags(&msg.flags);
  22.             rtf_put(CMDF0, &msg, sizeof(msg));
  23.             rt_busy_sleep(11*TIMERTICKS);
  24. msg.time = rt_get_cpu_time_ns();
  25.             msg.susres = 's';
  26.            rt_global_save_flags(&msg.flags);
  27.             rtf_put(CMDF0, &msg, sizeof(msg));
  28.             rt_task_wait_period();                                       
  29.         }
  30. }
  31. static void Fast_Thread(int t)
  32. {
  33.         static struct {     char task, susres;
  34.                        unsigned long flags;
  35.                        RTIME time;} msg = {'F',};
  36.         while (1) {
  37.            cpu_used[hard_cpu_id()]++;
  38.             msg.time = rt_get_time_ns();
  39.             msg.susres = 'r';
  40.              rt_global_sti();
  41.            rt_global_save_flags(&msg.flags);
  42.             rtf_put(CMDF0, &msg, sizeof(msg));
  43.             rt_busy_sleep(2*TIMERTICKS);
  44.             msg.time = rt_get_time_ns();
  45.             msg.susres = 's';
  46.            rt_global_save_flags(&msg.flags);
  47.             rtf_put(CMDF0, &msg, sizeof(msg));
  48.                   rt_task_wait_period();                                       
  49.         }
  50. }
  51.                                                                                    
  52. int init_module(void)
  53. {
  54.       RTIME tick_period;
  55.       RTIME now;
  56.          rtf_create_using_bh(CMDF0, 20000, 0);
  57.          rt_task_init(&Fast_Task, Fast_Thread, 0, 2000, 0, 0, 0);
  58.          rt_task_init(&Slow_Task, Slow_Thread, 0, 2000, 1, 0, 0);
  59. #ifdef ONE_SHOT
  60.          rt_set_oneshot_mode();
  61. #endif
  62.          tick_period = 4*start_rt_timer(nano2count(TIMERTICKS));
  63.          now = rt_get_time();
  64.          rt_task_make_periodic(&Fast_Task, now + tick_period,  
  65.                                            tick_period);
  66.          rt_task_make_periodic(&Slow_Task, now + tick_period,
  67.                                           6*tick_period);
  68.          return 0;
  69. }
  70. void cleanup_module(void)
  71. {
  72.          int cpuid;
  73.          stop_rt_timer();
  74.          rt_busy_sleep(10000000);
  75.          rtf_destroy(CMDF0);
  76.          rt_task_delete(&Slow_Task);
  77.          rt_task_delete(&Fast_Task);
  78.          printk("\n\nCPU USE SUMMARY\n");
  79.        for (cpuid = 0; cpuid < NR_RT_CPUS; cpuid++) {
  80.                printk("# %d -> %d\n", cpuid, cpu_used[cpuid]);
  81. }
  82.          printk("END OF CPU USE SUMMARY\n\n");
  83. }
复制代码



Makefile 如下:
  1. obj-m        := rt_process.o

  2. KDIR        := /lib/modules/$(shell uname -r)/build
  3. PWD        := $(shell pwd)
  4. EXTRA_CFLAGS := -I/usr/rtai/realtime/include -I/usr/rtai/linux-2.6.23/include -ffast-math -mhard-float

  5. default:
  6.         $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
  7. clean:
  8.         rm -rf *.ko *.o *.mod.o *.mod.c
复制代码



执行makefile的时候编译可以通过,但是会有一些未识别的内核符号的警告,如下:
  1.   Building modules, stage 2.
  2.   MODPOST 1 modules
  3. WARNING: "rt_get_time_ns" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  4. WARNING: "rt_task_wait_period" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  5. WARNING: "rtf_put" [/usr/rtai/myrtai/rt_process/rt_process.ko]undefined!
  6. WARNING: "rt_get_cpu_time_ns"[/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  7. WARNING: "rt_task_make_periodic" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  8. WARNING: "rt_get_time" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  9. WARNING: "start_rt_timer"[/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  10. WARNING: "nano2count" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  11. WARNING: "rt_set_oneshot_mode" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  12. WARNING: "rt_task_init" [/usr/rtai/myrtai/rt_process/rt_process.ko]undefined!
  13. WARNING: "rtf_create" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  14. WARNING: "rt_task_delete" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  15. WARNING: "rtf_destroy" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  16. WARNING: "rt_busy_sleep" [/usr/rtai/myrtai/rt_process/rt_process.ko] undefined!
  17. 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 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP