Hello everyone, I recently ran a comparison test between Xemai native & posix skin, the goal is to see if its possible of using a full standard posix program instead of inserting some native functions. I'm not familiar with the Xenomai Posix skin so I may lack a lot of things, if you can give me some hints, I would be very grateful. Test run in xenomai 2.6.3 patched in linux 3.8.13. My program only have 1 task who use the soem library (which use rtdm) to send a message broadcast in order to detect EtherCAT slave through a real-time port RTNet. I have 2 test files which use native & posix skin respectively. Here some cuts of the main() function: Native: mlockall(MCL_CURRENT | MCL_FUTURE); rt_print_auto_init(1); rt_task_spawn(&rt_task_desc_1,NULL,0,98,T_JOINABLE|T_WARNSW,&mini,NULL); rt_task_join(&rt_task_desc_1); rt_task_delete(&rt_task_desc_1); Posix: mlockall(MCL_CURRENT | MCL_FUTURE); pthread_attr_init(&p_attr1); pthread_attr_setschedpolicy(&p_attr1,SCHED_FIFO); pthread_attr_setdetachstate(&p_attr1, PTHREAD_CREATE_JOINABLE); param.sched_priority = 98; pthread_attr_setschedparam(&p_attr1, ¶m); pthread_create( &thread1, &p_attr1, (void *) &mini, NULL); pthread_join(thread1, 0); pthread_exit(&thread1); pthread_attr_destroy(&p_attr1);
in mini(): pthread_set_mode_np(0,PTHREAD_PRIMARY|PTHREAD_WARNSW); in which mini() is my task. I activated WARNSW bit to detect spurious relaxes, according to this: http://xenomai.org/2014/06/finding-spurious-relaxes/ The mode switch occurs at socket level, but in differents ways: With native: Mode switch (reason invoked syscall), aborting. Backtrace: ./testcase_native[0x40152f] /lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7eff44375cb0] /usr/xenomai/lib/librtdm.so.1(rt_dev_socket+0x1d)[0x7eff43d5480d With posix: Critical errors: Mode switch (reason latency:received SIXCPU for unknown reason), aborting. Backtrace: ./testcase_posix[0x401570] /lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7f40ddb7acb0] /usr/xenomai/lib/librtdm.so.1(rt_dev_sendmsg+0x16)[0x7f40dd5598f6] These 2 programs use the same functions call, compiled with same flags (rtdm, native & posix mixed): CFLAGS += -g -O0 -ffunction-sections -DRTNET -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -D__XENO__ -I/usr/xenomai/include/posix LDFLAGS += -Wl,--gc-sections -Wl,--no-as-needed -Wl,@/usr/xenomai/lib/posix.wrappers -L/usr/xenomai/lib -lrtdm -lxenomai -lpthread -lrt -lpthread_rt The only different is the portion I mentioned above. I'm trying to follow this porting guide: https://xenomai.org/2014/08/porting-a-linux-application-to-xenomai-dual-kernel/ but there are perhaps something I went wrong. Thank you for any helps. -- Huy Cong _______________________________________________ Xenomai mailing list [email protected] http://www.xenomai.org/mailman/listinfo/xenomai
