Ejemplo n.º 1
0
flavor_ptr default_flavor(void)
{
    char *fname = getenv("FLAVOR");
    flavor_ptr f, flavor;

    if (fname) {
	if ((flavor = flavor_byname(fname)) == NULL) {
	    fprintf(stderr, 
		    "FLAVOR=%s: no such flavor -- valid flavors are:\n",
		    fname);
	    f = flavors;
	    while (f->name) {
		fprintf(stderr, "\t%s\n", f->name);
		f++;
	    }
	    exit(1);
	}
	/* make sure corresponding rtapi lib is also present */
	if (check_rtapi_lib(fname))
	    return flavor;
	else
	    exit(1);
    }

    if (kernel_is_rtai()) {
	f = flavor_byid(RTAPI_RTAI_KERNEL_ID); 
	if (check_rtapi_lib((char *)f->name))
	    return f;
    }
    if (kernel_is_xenomai()) {
	/* check for userspace first */
	f = flavor_byid(RTAPI_XENOMAI_ID); 
	if (check_rtapi_lib((char *)f->name))
	    return f;
	/* else look for xenomai_kernel */
	f = flavor_byid(RTAPI_XENOMAI_KERNEL_ID); 
	if (check_rtapi_lib((char *)f->name))
	    return f;
    }
    if (kernel_is_rtpreempt()) {
	f = flavor_byid(RTAPI_RT_PREEMPT_ID); 
	if (check_rtapi_lib((char *)f->name))
	    return f;
    }
    return flavor_byid(RTAPI_POSIX_ID);
}
Ejemplo n.º 2
0
// determine if we can run this flavor on the current kernel
static int flavor_and_kernel_compatible(flavor_ptr f)
{
    int retval = 1;

    if (f->id == RTAPI_POSIX_ID)
	return 1; // no prerequisites

    if (kernel_is_xenomai()) {
	if (f->id == RTAPI_RT_PREEMPT_ID) {
	    fprintf(stderr,
		    "MSGD:%d Warning: starting %s RTAPI on a Xenomai kernel\n",
		    rtapi_instance, f->name);
	    return 1;
	}
	if ((f->id != RTAPI_XENOMAI_ID) &&
	    (f->id != RTAPI_XENOMAI_KERNEL_ID)) {
	    fprintf(stderr,
		    "MSGD:%d ERROR: trying to start %s RTAPI on a Xenomai kernel\n",
		    rtapi_instance, f->name);
	    return 0;
	}
    }

    if (kernel_is_rtai() &&
	(f->id != RTAPI_RTAI_KERNEL_ID)) {
	fprintf(stderr, "MSGD:%d ERROR: trying to start %s RTAPI on an RTAI kernel\n",
		    rtapi_instance, f->name);
	return 0;
    }

    if (kernel_is_rtpreempt() &&
	(f->id != RTAPI_RT_PREEMPT_ID)) {
	fprintf(stderr, "MSGD:%d ERROR: trying to start %s RTAPI on an RT PREEMPT kernel\n", 
		rtapi_instance, f->name);
	return 0;
    }
    return retval;
}