Hi Janek, I finally came around to review this patch. Can you make your own testsuite/sample folder with the ARINC calls and not patch the hello/init.c?
Please fix all trailing whitespace errors in the patch. virtualpok/Makefile.am produces an error at compile time: cat libpart.list | rename 's/.lo/.o/g' rename: not enough arguments Usage: rename [options] expression replacement file... Next error: This relative path for sed is broken in so far, that I don't have any arinc653 files from POK in my build tree. Am I missing a step? gmake[6]: Entering directory `[..]/rtems/build/i386-rtems4.11/c/virtualpok/lib/libbsp/i386/virtualpok' cp -u ../../../../../../../../c/src/lib/libbsp/i386/virtualpok/libpart.a . ar t libpart.a > libpart.list sed -e "s/\.lo/\.o/g" libpart.list > libpart.o.list ar x libpart.a rename .lo .o `cat libpart.list` ar q libbsp.a `cat libpart.o.list` sed -i '/#include <types.h>/d' ../../../../../../virtualpok/lib/include/arinc653/types.h sed: can't read ../../../../../../virtualpok/lib/include/arinc653/types.h: No such file or directory Cheers, Philipp On 08/24/2014 03:26 AM, JustJanek wrote: > --- > c/src/lib/libbsp/i386/virtualpok/Makefile.am | 18 +- > c/src/lib/libbsp/i386/virtualpok/arinc653_readme | 72 +++++++ > .../lib/libbsp/i386/virtualpok/startup/bspstart.c | 4 +- > testsuites/samples/hello/init.c | 210 > ++++++++++++++++++++- > 4 files changed, 297 insertions(+), 7 deletions(-) > create mode 100644 c/src/lib/libbsp/i386/virtualpok/arinc653_readme > > diff --git a/c/src/lib/libbsp/i386/virtualpok/Makefile.am > b/c/src/lib/libbsp/i386/virtualpok/Makefile.am > index c65a002..c2e0b18 100644 > --- a/c/src/lib/libbsp/i386/virtualpok/Makefile.am > +++ b/c/src/lib/libbsp/i386/virtualpok/Makefile.am > @@ -6,6 +6,7 @@ include $(top_srcdir)/../../../../automake/compile.am > include $(top_srcdir)/../../bsp.am > > include_bspdir = $(includedir)/bsp > +include_arinc653dir = $(includedir)/arinc653 > > dist_project_lib_DATA = bsp_specs > > @@ -19,6 +20,19 @@ nodist_include_bsp_HEADERS = > ../../shared/include/bootcard.h > DISTCLEANFILES = include/bspopts.h > noinst_PROGRAMS = > > +include_arinc653_HEADERS = $(POK_PATH)/libpok/include/arinc653/types.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/process.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/partition.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/blackboard.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/time.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/process.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/buffer.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/error.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/event.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/queueing.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/sampling.h > +include_arinc653_HEADERS += $(POK_PATH)/libpok/include/arinc653/semaphore.h > + > include_bsp_HEADERS = irq/irq.h > include_bsp_HEADERS += ../../shared/include/irq-generic.h > #include_bsp_HEADERS += > @@ -70,8 +84,10 @@ libpokpart.a : > ar t libpart.a > libpart.list > sed -e "s/\.lo/\.o/g" libpart.list > libpart.o.list > ar x libpart.a > - rename .lo .o `cat libpart.list` > +# rename .lo .o `cat libpart.list` > + cat libpart.list | rename 's/.lo/.o/g' > ar q libbsp.a `cat libpart.o.list` > + sed -i '/#include <types.h>/d' > ../../../../../../virtualpok/lib/include/arinc653/types.h > # ar cru libpokpart.a `cat libpart.o.list` > # rm `cat libpart.o.list` is optional as all files get overwritten with new > # ones by 'ar x'. But I think it's bad style to remove object files during > diff --git a/c/src/lib/libbsp/i386/virtualpok/arinc653_readme > b/c/src/lib/libbsp/i386/virtualpok/arinc653_readme > new file mode 100644 > index 0000000..ac82873 > --- /dev/null > +++ b/c/src/lib/libbsp/i386/virtualpok/arinc653_readme > @@ -0,0 +1,72 @@ > +Guide to get POK's arinc653 calls working on RTEMS. > + > +This guide will go through the steps that are necessary to get arinc653 calls > +from POK working on an RTEMS partition and to be able to run an example > project > +that goes through at least one arinc653 call of each arinc653 subset > (buffer, > +blackboard, partition, time etc.). As this guide won't go into detail > +please refer to either the arinc653 wiki on RTEMS wiki > +(http://www.rtems.org/wiki/index.php/Main_Page) or to justjnk.blogspot.nl for > +more details. > + > +Note: Make sure your environment can at least run the default "hello world" > for > +RTEMS on POK (i.e. the patches for virtualpok are applied to your RTEMS > +directory). > + > +1. Apply the patch arinc653 patch to your rtems environment and the > +pok patches to your pok environment. > + > +2. Go to $POK and make sure the POK_PATH environment variable is set to the > folder > +of your $POK directory. > + > +3. Go to $POK/examples/rtems-guest and use the command 'make'. A new folder > +named generated-code/ should either be added (if it wasn't there yet). Add > the > +following macros to > $POK/examples/rtems-guest/generated-code/cpu/part1/deployment.h > +Note: Compilation will most likely fail due to an error with > 'C_dispatch_isr'. This > +is okay, you can continue the steps of this guide. > + > +#define POK_CONFIG_NB_BLACKBOARDS 2 > +#define POK_CONFIG_NB_BUFFERS 2 > +#define POK_CONFIG_ARINC653_NB_SEMAPHORES 2 > +#define POK_CONFIG_NB_EVENTS 2 > +#define POK_CONFIG_ARINC653_NB_EVENTS 2 > +#define POK_NEEDS_BLACKBOARDS 1 > +#define POK_NEEDS_ARINC653_BLACKBOARD 1 > +#define POK_NEEDS_BUFFER 1 > +#define POK_NEEDS_ARINC653_BUFFER 1 > +#define POK_NEEDS_ARINC653_EVENT 1 > +#define POK_NEEDS_ARINC653_ERROR 1 > +#define POK_NEEDS_ARINC653_QUEUEING 1 > +#define POK_NEEDS_ARINC653_SAMPLING 1 > +#define POK_NEEDS_ARINC653_SEMAPHORE 1 > + > +4. Go to $POK/examples/rtems-guest/generated-code and run the command 'make > all' > +Note: Similar to step 3, this will throw an error about 'C_dispatch_isr'. > You can > +continue the steps in this guide. > + > +5. Copy-paste $POK/examples/rtems-guest/generated-code/cpu/part1/libpart.a to > +$RTEMS/c/src/lib/libbsp/i386/virtualpok. > + > +6. Use './bootstrap -p' at your rtems directory's root. > + > +7. Build RTEMS with the following configuration line: > + > +--target=i386-rtems4.11 --enable-rtemsbsp=virtualpok --enable-paravirt > +--disable-cxx --disable-networking --disable-posix --enable-maintainter-mode > +--enable-tests --disable-multiprocessing USE_COM1_AS_CONSOLE=1 > +BSP_PRESS_KEY_FOR_RESET=0 > + > +For example: > +mkdir pc386_arinc653 > +cd pc386_arinc653 > +$RTEMS/configure --target=i386-rtems4.11 --enable-rtemsbsp=virtualpok > + --enable-paravirt --disable-cxx --disable-networking --disable-posix > + --enable-maintainter-mode --enable-tests --disable-multiprocessing > + USE_COM1_AS_CONSOLE=1 BSP_PRESS_KEY_FOR_RESET=0 > + > +8. Copy-paste > <build_dir>/i386-rtems4.11/c/virtualpok/testsuites/samples/hello/hello.exe > +to $POK/examples/rtems-guest > + > +9. go to $POK/examples/rtems-guest and run "./copy_rebuild_kernel.sh > hello.exe" > + > +10. If everything went well you can now run "make run" in > $POK/examples/rtems-guest > +and the arinc653 calls example will run. > diff --git a/c/src/lib/libbsp/i386/virtualpok/startup/bspstart.c > b/c/src/lib/libbsp/i386/virtualpok/startup/bspstart.c > index 3464ee0..6b0686e 100644 > --- a/c/src/lib/libbsp/i386/virtualpok/startup/bspstart.c > +++ b/c/src/lib/libbsp/i386/virtualpok/startup/bspstart.c > @@ -34,8 +34,8 @@ void bsp_start( void ) > _BSP_Virtual_Char_write( "Hello RTEMS World\n" ); > > // Initialize IRQ management > - rtems_irq_mngt_init(); > + //rtems_irq_mngt_init(); > > // Register clock driver > - Clock_driver_install_handler(); > + //Clock_driver_install_handler(); > } > diff --git a/testsuites/samples/hello/init.c b/testsuites/samples/hello/init.c > index d8fe450..de9329d 100644 > --- a/testsuites/samples/hello/init.c > +++ b/testsuites/samples/hello/init.c > @@ -11,15 +11,47 @@ > #include "config.h" > #endif > > +#define POK_NEEDS_ARINC653_PARTITION 1 > +#define POK_NEEDS_ARINC653_PROCESS 1 > +#define POK_NEEDS_ARINC653_TIME 1 > +#define POK_NEEDS_ARINC653_ERROR 1 > +#define POK_NEEDS_ARINC653_BLACKBOARD 1 > +#define POK_NEEDS_ARINC653_BUFFER 1 > +#define POK_NEEDS_ARINC653_EVENT 1 > +#define POK_NEEDS_ARINC653_SEMAPHORE 1 > +#define POK_NEEDS_ARINC653_SAMPLING 1 > +#define POK_NEEDS_ARINC653_QUEUEING 1 > + > #include <rtems/test.h> > > #include <bsp.h> /* for device driver prototypes */ > > #include <stdio.h> > #include <stdlib.h> > +#include <arinc653/types.h> > +#include <arinc653/partition.h> > +#include <arinc653/process.h> > +#include <arinc653/time.h> > +#include <arinc653/error.h> > +#include <arinc653/blackboard.h> > +#include <arinc653/buffer.h> > +#include <arinc653/event.h> > +#include <arinc653/semaphore.h> > +#include <arinc653/sampling.h> > +#include <arinc653/queueing.h> > > /* forward declarations to avoid warnings */ > rtems_task Init(rtems_task_argument argument); > +void arinc653_test_partition(void); > +void arinc653_test_process(void); > +void arinc653_test_time(void); > +void arinc653_test_error(void); > +void arinc653_test_blackboard(void); > +void arinc653_test_buffer(void); > +void arinc653_test_event(void); > +void arinc653_test_semaphore(void); > +void arinc653_test_sampling(void); > +void arinc653_test_queueing(void); > > const char rtems_test_name[] = "HELLO WORLD"; > > @@ -27,12 +59,182 @@ rtems_task Init( > rtems_task_argument ignored > ) > { > - rtems_test_begin(); > - printf( "Hello World\n" ); > - rtems_test_end(); > - exit( 0 ); > + arinc653_test_partition(); > + arinc653_test_process(); > + arinc653_test_time(); > + arinc653_test_error(); > + arinc653_test_blackboard(); > + arinc653_test_buffer(); > + arinc653_test_event(); > + arinc653_test_semaphore(); > + arinc653_test_sampling(); > + arinc653_test_queueing(); > + exit( 0 ); > +} > + > +void arinc653_test_partition() > +{ > + printf("arinc653_test_partition start\n"); > + PARTITION_STATUS_TYPE partition_status; > + RETURN_CODE_TYPE ret; > + > + GET_PARTITION_STATUS(&partition_status, &ret); > + > + printf("OPERATING_MODE_TYPE after GET_PARTITION_STATUS: %d\n", > (int)partition_status.OPERATING_MODE); > + printf("Return after GET_PARTITION_STATUS: %d\n", (int)ret); > + printf("arinc653_test_partition stop\n\n"); > +} > + > +void arinc653_test_process() > +{ > + printf("arinc653_test_process start\n"); > + PROCESS_ID_TYPE PROCESS_ID; > + RETURN_CODE_TYPE RETURN_CODE; > + > + GET_MY_ID ( > + /*out*/ &PROCESS_ID, > + /*out*/ &RETURN_CODE ); > + > + printf("PROCESS_ID after GET_MY_ID: %d\n", (int)PROCESS_ID); > + printf("RETURN_CODE after GET_MY_ID: %d\n", (int)RETURN_CODE); > + printf("arinc653_test_process stop\n\n"); > +} > + > +void arinc653_test_time() > +{ > + printf("arinc653_test_time start\n"); > + RETURN_CODE_TYPE return_code; > + > + PERIODIC_WAIT ( > + /*out*/ &return_code ); > + > + printf("return_code after PERIODIC_WAIT: %d\n", (int)return_code); > + printf("arinc653_test_time stop\n\n"); > +} > + > +void arinc653_test_error() > +{ > + printf("arinc653_test_error start\n"); > + ERROR_STATUS_TYPE ERROR_STATUS; > + RETURN_CODE_TYPE RETURN_CODE; > + > + GET_ERROR_STATUS (&ERROR_STATUS, > + &RETURN_CODE); > + > + printf("ERROR_STATUS.ERROR_CODE after GET_ERROR_STATUS: %d\n", > (int)ERROR_STATUS.ERROR_CODE); > + printf("RETURN_CODE after GET_ERROR_STATUS: %d\n", (int)RETURN_CODE); > + printf("arinc653_test_error stop\n\n"); > } > > +void arinc653_test_blackboard() > +{ > + printf("arinc653_test_blackboard start\n"); > + BLACKBOARD_ID_TYPE BLACKBOARD_ID; > + RETURN_CODE_TYPE RETURN_CODE; > + > + CREATE_BLACKBOARD ( > + /*in */ "RTEMS_arinc_blackboard", > + /*in */ 5, > + /*out*/ &BLACKBOARD_ID, > + /*out*/ &RETURN_CODE ); > + > + printf("BLACKBOARD_ID after CREATE_BLACKBOARD: %d\n", > (int)BLACKBOARD_ID); > + printf("RETURN_CODE after CREATE_BLACKBOARD: %d\n", (int)RETURN_CODE); > + printf("arinc653_test_blackboard stop\n\n"); > +} > + > +void arinc653_test_buffer() > +{ > + printf("arinc653_test_buffer start\n"); > + BUFFER_ID_TYPE BUFFER_ID; > + RETURN_CODE_TYPE RETURN_CODE; > + > + CREATE_BUFFER ( > + /*in */ "RTEMS_arinc_buffer", > + /*in */ 5, > + /*in */ 4, > + /*in */ FIFO, > + /*out*/ &BUFFER_ID, > + /*out*/ &RETURN_CODE ); > + > + printf("BUFFER_ID after CREATE_BUFFER: %d\n", (int)BUFFER_ID); > + printf("RETURN_CODE after CREATE_BUFFER: %d\n", (int)RETURN_CODE); > + printf("arinc653_test_buffer stop\n\n"); > +} > + > +void arinc653_test_event() > +{ > + printf("arinc653_test_event start\n"); > + EVENT_ID_TYPE EVENT_ID; > + RETURN_CODE_TYPE RETURN_CODE; > + > + CREATE_EVENT ( > + /*IN */ "RTEMS_arinc_event", > + /*OUT*/ &EVENT_ID, > + /*OUT*/ &RETURN_CODE ); > + > + printf("EVENT_ID after CREATE_EVENT: %d\n", (int)EVENT_ID); > + printf("RETURN_CODE after CREATE_EVENT: %d\n", (int)RETURN_CODE); > + printf("arinc653_test_event stop\n\n"); > +} > + > +void arinc653_test_semaphore() > +{ > + printf("arinc653_test_semaphore start\n"); > + SEMAPHORE_ID_TYPE SEMAPHORE_ID; > + RETURN_CODE_TYPE RETURN_CODE; > + > + CREATE_SEMAPHORE ( > + /*IN */ "RTEMS_arinc_sem", > + /*IN */ 1, > + /*IN */ 4, > + /*IN */ FIFO, > + /*OUT*/ &SEMAPHORE_ID, > + /*OUT*/ &RETURN_CODE ); > + > + printf("SEMAPHORE_ID after CREATE_SEMAPHORE: %d\n", (int)SEMAPHORE_ID); > + printf("RETURN_CODE after CREATE_SEMAPHORE: %d\n", (int)RETURN_CODE); > + printf("arinc653_test_semaphore stop\n\n"); > +} > + > +void arinc653_test_sampling() > +{ > + printf("arinc653_test_sampling start\n"); > + SAMPLING_PORT_ID_TYPE SAMPLING_PORT_ID; > + RETURN_CODE_TYPE RETURN_CODE; > + > + CREATE_SAMPLING_PORT ( > + /*in */ "RTEMS_arinc_sampling", > + /*in */ 5, > + /*in */ SOURCE, > + /*in */ 5000, > + /*out*/ &SAMPLING_PORT_ID, > + /*out*/ &RETURN_CODE ); > + > + printf("SAMPLING_PORT_ID after CREATE_SAMPLING_PORT: %d\n", > (int)SAMPLING_PORT_ID); > + printf("RETURN_CODE after CREATE_SAMPLING_PORT: %d\n", > (int)RETURN_CODE); > + printf("arinc653_test_sampling stop\n\n"); > +} > + > +void arinc653_test_queueing() > +{ > + printf("arinc653_test_queueing start\n"); > + QUEUING_PORT_ID_TYPE QUEUING_PORT_ID; > + RETURN_CODE_TYPE RETURN_CODE; > + > + CREATE_QUEUING_PORT ( > + /*in */ "RTEMS_arinc_queueing", > + /*in */ 5, > + /*in */ 3, > + /*in */ SOURCE, > + /*in */ FIFO, > + /*out*/ &QUEUING_PORT_ID, > + /*out*/ &RETURN_CODE ); > + > + printf("QUEUING_PORT_ID after CREATE_QUEUING_PORT: %d\n", > (int)QUEUING_PORT_ID); > + printf("RETURN_CODE after CREATE_QUEUING_PORT: %d\n", (int)RETURN_CODE); > + printf("arinc653_test_queueing stop\n\n"); > +} > > /* NOTICE: the clock driver is explicitly disabled */ > #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER > _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel