Porting from ADEOS to ADEOS-IPIPE
Porting from ADEOS-IPIPE 1.0 to 1.1
Using an Adeos nano kernel patched vanilla linux kernel allows to run stuff in hard real time in kernel modules.
This page presents a few things to change when porting existing software from ADEOS to the new ADEOS-IPIPE system.
Additional info for ADEOS-IPIPE for 2.4 kernels below
The left column shows the traditional ADEOS functions/constant/data-type - the right column the equivalent ADEOS-IPIPE function/constant/data-type.
| ADEOS | ADEOS-IPIPE |
| ADEOS_ROOT_PRI | IPIPE_ROOT_PRIO |
adeos_critical_enter
adeos_critical_exit
adeos_control_irq
adeos_propagate_irq
adeos_virtualize_irq
adeos_get_sysinfo
adeos_virtualize_irq
adeos_suspend_domain
adeos_register_domain
adeos_unregister_domain
| ipipe_critical_enter
ipipe_critical_exit
ipipe_control_irq
ipipe_propagate_irq
ipipe_virtualize_irq
ipipe_get_sysinfo
ipipe_virtualize_irq
ipipe_suspend_domain
ipipe_register_domain
ipipe_unregister_domain |
| adomain_t | struct ipipe_domain |
| adattr_t | ipipe_domain_attr |
| adsysinfo_t | struct ipipe_sysinfo |
| adp_current | ipipe_current_domain |
| adeos_virtualize_irq(IRQ, &handler, NULL, IPIPE_DYNAMIC_MASK); |
ipipe_virtualize_irq(ipipe_current_domain, IRQ, &handler, NULL, IPIPE_HANDLE_MASK); |
Domain initialization:
ADEOS classic:
adattr_t attr;
attr.name = "TestDomain";
attr.domid = 1; // Adeos Domain ID: >0
attr.entry = &domain_entry;
attr.estacksz = 0; // Adeos chooses a reasonable stack size
attr.priority = ADEOS_ROOT_PRI + 1;
attr.dswitch = NULL; // Domain switch hook - always a C routine
return adeos_register_domain(&this_domain,&attr);
ADEOS-IPIPE:
struct ipipe_domain_attr attr;
ipipe_init_attr (&attr);
attr.name = "TestDomain";
attr.priority = IPIPE_ROOT_PRIO + 1;
attr.entry = &domain_entry;
return ipipe_register_domain(&this_domain,&attr);
If you have something like this
for (;;)
adeos_suspend_domain();
in your ADEOS code, remove it for ADEOS-IPIPE.
These are just a few things I encountered when testing the new adeos-ipipe 1.00 patch with kernel 2.6.13.
adeos-ipipe kernel patch for the 2.4 kernel series (2.4.31 - 2.4.32):
Error:
`LOCAL_TIMER_VECTOR' undeclared (first use in this function)
add
#include <asm/hw_irq.h>
Porting from ADEOS-IPIPE 1.0 to 1.1
Some things changed from IPIPE 1.0 to 1.1. One I've encountered so far is this one:
error: too few arguments to function `ipipe_virtualize_irq'
From the patch:
+int ipipe_virtualize_irq(struct ipipe_domain *ipd,
+ unsigned irq,
+ ipipe_irq_handler_t handler,
+ void *cookie,
+ ipipe_irq_ackfn_t acknowledge,
+ unsigned modemask)
+{
IPIPE 1.0
ipipe_virtualize_irq(ipipe_current_domain, RTHAL_8254_IRQ,
&timer_tick, NULL, IPIPE_DYNAMIC_MASK);
IPIPE 1.1
ipipe_virtualize_irq(ipipe_current_domain, RTHAL_8254_IRQ,
&timer_tick, NULL, NULL, IPIPE_DYNAMIC_MASK);
"ipipe_irq_ackfn_t acknowledge" seems to be some interrupt acknowledge handler, but I have
yet to find out more details (it's not used in Xenomai 2.1).
Last-Modified: Sat, 04 Feb 2006 15:44:18 GMT