Skip to content

Commit

Permalink
Added example made of 4 partitions each of 2 threads
Browse files Browse the repository at this point in the history
  • Loading branch information
mziccard committed Aug 5, 2014
1 parent 6db41c4 commit bfe3f7e
Show file tree
Hide file tree
Showing 37 changed files with 874 additions and 0 deletions.
7 changes: 7 additions & 0 deletions examples/arinc653-4parts2/generated-code/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
*.o
*.lo
*.bc
*.elf
*.lds
*.a
.depend
8 changes: 8 additions & 0 deletions examples/arinc653-4parts2/generated-code/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
all:
$(MAKE) -C cpu all

clean:
$(MAKE) -C cpu clean

run:
$(MAKE) -C cpu run&
7 changes: 7 additions & 0 deletions examples/arinc653-4parts2/generated-code/cpu/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
*.o
*.lo
*.bc
*.elf
*.lds
*.ld
.depend
217 changes: 217 additions & 0 deletions examples/arinc653-4parts2/generated-code/cpu/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
export ARCH=patmos
export BSP=prep
export POK_CONFIG_OPTIMIZE_FOR_GENERATED_CODE=1
include $(POK_PATH)/misc/mk/config.mk
include $(POK_PATH)/misc/mk/common-$(ARCH).mk
TARGET=$(shell pwd)/pok.elf
PARTITIONS= part1/part1.elf part2/part2.elf part3/part3.elf part4/part4.elf

HEADERFILE=kernel/deployment.h
$(if $(wildcard $(HEADERFILE)),,$(error "kernel/deployment.h is missing, bye bye."))
#export DEF_VADDR=`grep -i "POK_CONFIG_DEFINE_BASE_VADDR" $(HEADERFILE)`
export DEF_VADDR=$(shell grep -i POK_CONFIG_DEFINE_BASE_VADDR $(HEADERFILE)|grep -v "/")
export PARTITIONS_VADDR=`awk '{if ($$2 == "POK_CONFIG_PARTITIONS_BASE_VADDR") print $$3}' $(HEADERFILE)|sed 's/{//'|sed 's/}//'|sed 's/,/ /g'`

export SKIP_LOADER=$(shell grep -i POK_SKIP_LOADER $(HEADERFILE)|grep -v "/")
export PARTITIONS_ADDR=`awk '{if ($$2 == "POK_CONFIG_PARTITIONS_LOADADDR") print $$3}' $(HEADERFILE)|sed 's/{//'|sed 's/}//'|sed 's/,/ /g'`

KERNEL=kernel/kernel.lo
ifeq ($(ARCH), patmos)
all: partitions-lds partitions sections kernel-lds build-kernel $(TARGET)
else
all: build-lds build-kernel partitions $(TARGET)
endif

ifeq ($(ARCH), patmos)
# In Patmos we only need one linker script
build-lds: partitions-lds
else
build-lds: kernel-lds partitions-lds
endif

ifeq ($(ARCH), patmos)
sections:
$(ECHO) "Extracting loadable sections from partitions"
cat kernel/deployment.h.tmp > kernel/deployment.h
c=1;for v in $(PARTITIONS); do \
$(POK_PATH)/elf2uart/build/elf2uart part$${c}/part$${c}.elf -o part$$c ; \
entry=`cat part$${c}_entry` ; \
rm part$${c}_entry ; \
sed -i "s/PART_ENTRY_$${c}/$${entry}/g" kernel/deployment.h ; \
c=`$(ECHO) $${c}+1 | bc` ; \
done
endif

kernel-lds:
# Handle Patmos linker script
ifeq ($(ARCH), patmos)
$(ECHO) "Patmos compilation: creating kernel linker script"
$(ECHO) "" > $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds
c=1;last_text=44000;for v in $(PARTITIONS); do \
text_address=`$(ECHO) $${last_text} | bc`; \
data_address=`$(ECHO) $${text_address}+20000 | bc`; \
last_text=`$(ECHO) $${data_address}+1000 | bc`; \
cat part$${c}_sec1 | hexdump -v -e '"BYTE(0x" 1/1 "%02X" ")\n"' > part$${c}_sec1.ld ; \
cat part$${c}_sec2 | hexdump -v -e '"BYTE(0x" 1/1 "%02X" ")\n"' > part$${c}_sec2.ld ; \
rm part$${c}_sec0 ; \
rm part$${c}_sec1 ; \
rm part$${c}_sec2 ; \
text_address_string=". = SEGMENT_START(\".text$${c}\", 0x$${text_address});" ; \
text_segment=".text$${c} : {" ; \
data_address_string=". = SEGMENT_START(\".data$${c}\", 0x$${data_address});" ; \
data_segment=".data$${c} : {" ; \
$(ECHO) $${text_address_string} >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds ; \
$(ECHO) $${text_segment} >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds ; \
cat part$${c}_sec1.ld >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds ; \
$(ECHO) "}" >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds ; \
$(ECHO) $${data_address_string} >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds ; \
$(ECHO) $${data_segment} >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds ; \
cat part$${c}_sec2.ld >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds ; \
$(ECHO) "}" >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds ; \
rm part$${c}_sec1.ld ; \
rm part$${c}_sec2.ld ; \
c=`$(ECHO) $${c}+1 | bc` ; \
done
cat $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_preamble.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_partitions.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_postscript.lds > $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel.lds ;
else
# Handle kernel linker script
ifeq ($(shell grep -i POK_NEEDS_QEMU_SETUP $(HEADERFILE)|grep -v "/"),)
$(ECHO) "PRAORTIS SIM setup $(ARCH)"
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/PROARTIS_sim/kernel_template.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_template.lds
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/PROARTIS_sim/kernel_postscript.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_postscript.lds
sed s/placeholder/0xFC000000/ $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_template.lds > $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel.lds
else
$(ECHO) "QEMU setup"
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/QEMU/kernel_template.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_template.lds
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/QEMU/kernel_postscript.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_postscript.lds
sed s/placeholder/0xFFF00000/ $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_template.lds > $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel.lds
endif
ifeq ($(shell grep -i POK_SKIP_LOADER $(HEADERFILE)|grep -v "/"),)
$(ECHO) "Using DEFAULT Base physical addresses"
# cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_template.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds
# sed s/placeholder/0xFC000000/ $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds > $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel.lds
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel.lds ./kernel/kernel.lds ; \
# rm -f $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds
else
$(ECHO) "Base physical addresses"
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_preamble.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds
c=1;for v in $(PARTITIONS_ADDR); do \
$(ECHO) "Base address" $$v "-" $$c ": in kernel.lds" ; \
$(ECHO) " . = $$v; " >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds; \
$(ECHO) " .part$$c : " >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds; \
$(ECHO) " { " >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds; \
$(ECHO) " part$$c.elf(.text) " >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds; \
$(ECHO) " } " >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds; \
$(ECHO) " " >> $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds; \
c=`$(ECHO) $${c}+1 | bc` ; \
done
cat $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_postscript.lds > $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel.lds ; \
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel.lds ./kernel/kernel.lds ; \
rm -f $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/kernel_t.lds
endif
endif
partitions-lds:
ifeq ($(ARCH), patmos)
$(ECHO) "Creating partition linker scripts"
c=1;last_text=44000;for v in $(PARTITIONS); do \
text_address=`$(ECHO) $${last_text} | bc`; \
data_address=`$(ECHO) $${text_address}+20000 | bc`; \
last_text=`$(ECHO) $${data_address}+1000 | bc`; \
$(ECHO) "Base text address 0x" $$text_address ": in ./part"$$c"/partition_"$$c".lds" ; \
$(ECHO) "Base data address 0x" $$data_address ": in ./part"$$c"/partition_"$$c".lds" ; \
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/partition_template.lds ./part$$c/partition_$${c}_t.lds ; \
sed s/TEXT_ADDRESS/0x$$text_address/ ./part$$c/partition_$${c}_t.lds > ./part$$c/partition_$${c}_t2.lds; \
sed s/DATA_ADDRESS/0x$$data_address/ ./part$$c/partition_$${c}_t2.lds > ./part$$c/partition.lds; \
rm -f ./part$$c/partition_$${c}_t.lds; \
rm -f ./part$$c/partition_$${c}_t2.lds; \
c=`$(ECHO) $${c}+1 | bc` ; \
done
else
# Handle partitions linker scripts
ifeq ($(shell grep -i POK_SKIP_LOADER $(HEADERFILE)|grep -v "/"),)
$(eval PARTITION_LDS=partition_template.lds)
else
$(eval PARTITION_LDS=partition_no_loader.lds)
$(ECHO) "Skipping POK loader"
endif
#ifeq ($(shell grep -r "POK_CONFIG_DEFINE_BASE_VADDR" $(HEADERFILE)),)
ifeq ($(shell grep -i POK_CONFIG_DEFINE_BASE_VADDR $(HEADERFILE)|grep -v "/"),)
$(ECHO) "Using DEFAULT Base virtual addresses"
c=1;for v in $(PARTITIONS); do \
$(ECHO) "Base vaddress 0x1000 -" $$c ": in ./part"$$c"/partition_"$$c".lds" ; \
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/$(PARTITION_LDS) $(eval) ./part$$c/partition_$$c_t.lds ; \
sed s/placeholder/0x1000/ ./part$$c/partition_$$c_t.lds > ./part$$c/partition_$$c.lds;\
rm -f ./part$$c/partition_t.lds ; \
c=`$(ECHO) $${c}+1 | bc` ; \
done
else
c=1;for v in $(PARTITIONS_VADDR); do \
$(ECHO) "Base vaddress" $$v "-" $$c ": in ./part"$$c"/partition_"$$c".lds" ; \
cp $(POK_PATH)/misc/ldscripts/$(ARCH)/$(BSP)/$(PARTITION_LDS) $(eval) ./part$$c/partition_$$c_t.lds ; \
sed s/placeholder/$$v/ ./part$$c/partition_$$c_t.lds > ./part$$c/partition_$$c.lds;\
rm -f ./part$$c/partition_.lds ; \
c=`$(ECHO) $${c}+1 | bc` ; \
done
endif
endif

build-kernel:
$(CD) kernel && $(MAKE)

partitions:
$(CD) part1 && $(MAKE)
$(CD) part2 && $(MAKE)
$(CD) part3 && $(MAKE)
$(CD) part4 && $(MAKE)

clean: common-clean
$(CD) kernel && $(MAKE) clean
$(CD) part1 && $(MAKE) clean
$(CD) part2 && $(MAKE) clean
$(CD) part3 && $(MAKE) clean
$(CD) part4 && $(MAKE) clean

distclean: clean
$(CD) kernel && $(MAKE) distclean
$(CD) part1 && $(MAKE) distclean
$(CD) part2 && $(MAKE) distclean
$(CD) part3 && $(MAKE) distclean
$(CD) part4 && $(MAKE) distclean

include $(POK_PATH)/misc/mk/rules-common.mk
include $(POK_PATH)/misc/mk/rules-main.mk
include $(POK_PATH)/misc/mk/install-rules.mk

INSTRUMENTATION_PATH=$(POK_PATH)/kernel/core
#kernel/core
#libpok/arinc653
INSTRUMENTATION_FILE=sched
#sampling
CINS=/usr/local/bin/cins
XSTUTILS=/usr/local/bin/xstutils
ROOT_FUNCTION=pok_elect_partition
#pok_elect_partition
#READ_SAMPLING_MESSAGE
#WRITE_SAMPLING_MESSAGE

instrument:
$(ECHO) Preprocessing...
$(RM) -rf $(POK_PATH)/instrumentation/instr
$(RM) -rf $(POK_PATH)/instrumentation/xsc
$(RM) -rf $(POK_PATH)/instrumentation/*.exf
$(RM) -rf $(POK_PATH)/instrumentation/*.p
$(MKDIR) $(POK_PATH)/instrumentation/instr
$(MKDIR) $(POK_PATH)/instrumentation/xsc
#if [ -f $(INSTRUMENTATION_PATH)/$(INSTRUMENTATION_FILE)_ORIGINAL.c ]; then $(MV) -f $(INSTRUMENTATION_PATH)/$(INSTRUMENTATION_FILE)_ORIGINAL.c $(INSTRUMENTATION_PATH)/$(INSTRUMENTATION_FILE).c; fi
$(CC_ppc) -E -ansi $(INSTRUMENTATION_PATH)/$(INSTRUMENTATION_FILE).c -o $(POK_PATH)/instrumentation/$(INSTRUMENTATION_FILE).p -I$(POK_PATH)/kernel/include -I$(POK_PATH)/instrumentation -I$(POK_PATH)/libpok/include -include ./kernel/deployment.h
$(ECHO) Done
$(CINS) --cext GNU -v -c $(POK_PATH)/instrumentation/rvs_instrumentation.h $(POK_PATH)/instrumentation/$(INSTRUMENTATION_FILE).p -d $(POK_PATH)/instrumentation/instr/ --xsc-dir $(POK_PATH)/instrumentation/xsc/ --exf $(POK_PATH)/instrumentation/app.exf --nbits 12 -u -D --discover-fptr
$(XSTUTILS) $(POK_PATH)/instrumentation/xsc/*.xsc -r $(ROOT_FUNCTION) -o $(POK_PATH)/instrumentation/xsc/$(ROOT_FUNCTION).rvd -v --debug-report
$(RM) -rf ./rvs_dbgreport_files
$(RM) -rf ./rvs_dbgreport.txt
$(CD) $(POK_PATH)/instrumentation/instr && for f in *.p; do mv $$f `echo $$f | sed 's/\(.*\.\)p/\1c/'`; done
#$(MV) -f $(INSTRUMENTATION_PATH)/$(INSTRUMENTATION_FILE).c $(INSTRUMENTATION_PATH)/$(INSTRUMENTATION_FILE)_ORIGINAL.c
#$(CP) $(POK_PATH)/instrumentation/instr/$(INSTRUMENTATION_FILE).c $(INSTRUMENTATION_PATH)/$(INSTRUMENTATION_FILE).c
#$(CC_ppc) -c $(POK_PATH)/instrumentation/rvs.c -o $(POK_PATH)/instrumentation/rvs.o
#$(CC_ppc) -c -I/home/proartis/proartis/POK/instrumentation /home/proartis/proartis/POK/instrumentation/rapita.cpp -o /home/proartis/proartis/POK/instrumentation/rapita.o
#$(MAKE)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
*.o
*.lo
*.bc
*.elf
*.lds
*.a
.depend
10 changes: 10 additions & 0 deletions examples/arinc653-4parts2/generated-code/cpu/kernel/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export DEPLOYMENT_HEADER=$(shell pwd)/deployment.h
include $(POK_PATH)/misc/mk/config.mk
LO_TARGET = kernel.lo
LO_OBJS = deployment.o
LO_DEPS = pok.lo
all: kernel copy-kernel $(LO_TARGET)
clean: common-clean
include $(POK_PATH)/misc/mk/common-$(ARCH).mk
include $(POK_PATH)/misc/mk/rules-common.mk
include $(POK_PATH)/misc/mk/rules-kernel.mk
Empty file.
70 changes: 70 additions & 0 deletions examples/arinc653-4parts2/generated-code/cpu/kernel/deployment.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#ifndef __XML_GENERATED_DEPLOYMENT_H_
#define __XML_GENERATED_DEPLOYMENT_H_

#include <core/schedvalues.h>

#define POK_NEEDS_CONSOLE 1

#define POK_NEEDS_THREADS 1

#define POK_NEEDS_PARTITIONS 1

#define POK_NEEDS_SCHED 1

#define POK_CONFIG_NB_PARTITIONS 4

#define POK_CONFIG_NB_THREADS 14

#define POK_CONFIG_PARTITIONS_NTHREADS {3, 3, 3, 3}

#define POK_NEEDS_SCHED_O1 1

#define POK_CONFIG_PRIORITY_LEVELS 30

#define POK_CONFIG_PARTITIONS_SIZE {120000, 120000, 120000, 120000}

#define POK_CONFIG_DEFINE_BASE_VADDR 1

#define POK_CONFIG_PARTITIONS_BASE_VADDR {0x1000,0x4000,0x7000,0x10000}

#define POK_CONFIG_PARTITIONS_LOADADDR {0x9f000,0xc0000,0xE1000, 0x100000}

#define POK_CONFIG_PARTITIONS_SCHEDULER {POK_SCHED_O1, POK_SCHED_O1, POK_SCHED_O1, POK_SCHED_O1}

#define POK_CONFIG_SCHEDULING_SLOTS {10,10,10,10}

#define POK_CONFIG_SCHEDULING_SLOTS_ALLOCATION {0,1,2,3}

#define POK_CONFIG_SCHEDULING_NBSLOTS 4

#define POK_CONFIG_SCHEDULING_MAJOR_FRAME 40

#define POK_USER_STACK_SIZE 8196

#define POK_BUS_FREQ_MHZ 74

#define POK_FREQ_DIV 1

#define POK_FREQ_SHIFT 0

#define POK_DISABLE_LOADER_DATA_INIT 1

#define POK_PREFILL_PTE 1

#define POK_NEEDS_ARINC653 1

#define IDLE_STACK_SIZE 2048

#define POK_CONFIG_NB_ASYNCH_EVENTS 0

#define POK_CONFIG_PARTITIONS_NB_ASYNCH_EVENTS {0, 0, 0, 0}

#ifdef POK_ARCH_PATMOS

#define POK_PARTITION_ENTRIES {0x444c4, 0x654c4, 0x864c4, 0x1074c4}

#endif



#endif
Loading

0 comments on commit bfe3f7e

Please sign in to comment.