Hello,

I've some difficulties to run Xenomai with a little 'hello' example (that create/start a task)
on a target 486 processor (without fpu).

I successfully compiled the Linux kernel 2.6.38.8 with adeos-ipipe-2.6.38.8-x86-2.11-02.patch (Xenomai version is 2.5.6) (modify file xenomai-2.5.6/include/asm-x86/calibration.h "current_cpu_data"->"cpu_info" were required)

dmesg extract:
[    0.000000] I-pipe 2.11-02: pipeline enabled.
...
[    0.140008] CPU: Cyrix Cx486SLC
...
[    1.440804] Xenomai: hal/i386 started.
[    1.448804] Xenomai: scheduling class idle registered.
[    1.452804] Xenomai: scheduling class rt registered.
[    1.488806] Xenomai: real-time nucleus v2.5.6 (Wormhole Wizards) loaded.
[    1.496807] Xenomai: starting native API services.
[    1.500807] Xenomai: starting POSIX services.
[    1.504807] Xenomai: starting RTDM services.

After compiling user-space Xenomai part with
./configure --disable-x86-sep --disable-x86-tsc / make / sudo make install
and copy /usr/xenomai/lib on the target
I've got "illegal instruction" with my little 'hello test' example that create/start a task.

Then I've tried to add flag to set 486 instruction set to gcc...
For that, to compile user-space this time I used :
./configure CFLAGS="-march=i486" LDFLAGS="-march=i486" --disable-x86-sep --disable-x86-tsc / make / sudo make install
Now, at rt_task_start, I've got an error code -38 !

Any one have an idea on the trouble ?
(at start thinking on the fpu missing, but seems not to be used !? no libm dependance)

Many thanks.



Here my little hello_test example code used :
============================
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/mman.h>

#include <native/task.h>
#include <native/timer.h>

RT_TASK task_desc;

static void task(void *arg)
{

    RTIME now,previous;

    rt_task_set_periodic( NULL, TM_NOW, 1000000000 );
    previous = rt_timer_read( );

    while( 1 )
    {
        rt_task_wait_period( NULL );
        now = rt_timer_read( );

printf("Hello world xenomai test! %ld.%06ld ms\n", (long)(now-previous)/1000000, (long)(now-previous)%1000000 );
  /* Outch... printf accesses a Linux ressource so we are now
     in secondary mode */
    }
}

void catch_signal( int sig )
{
}

int main (void)
{
    int err;

printf("starting...\n");

  signal( SIGTERM,catch_signal );
  signal( SIGINT,catch_signal );

  /* disable memory swap */
  mlockall( MCL_CURRENT | MCL_FUTURE );

  err = rt_task_create( &task_desc, "demo_task", 0, 99, 0 );
  if (err!=0 )
  {
    printf("rt_task_create error : %d\n",err);
    return 1;
  }

  /* wait for task function termination */
  err = rt_task_start( &task_desc, &task, NULL );
  if (err!=0 )
  {
    printf("rt_task_start error : %d\n",err);
    return 1;
  }

  printf("running!\n");
  pause( );

  rt_task_delete( &task_desc );
  return 0;
}

And the Makefile :
===========
CFLAGS = -march=i486 -O2
LDFLAGS = -march=i486 -O2

CFLAGS += `/usr/xenomai/bin/xeno-config --skin=native --cflags`
LDFLAGS += `/usr/xenomai/bin/xeno-config --skin=native --ldflags`

all:
    gcc hello_test.c $(CFLAGS) $(LDFLAGS) -o hello_test

cflags:
    echo $(CFLAGS)

ldflags:
    echo $(LDFLAGS)




_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to