1
0
mirror of https://github.com/livingcomputermuseum/UniBone.git synced 2026-02-19 13:56:22 +00:00
Files
livingcomputermuseum.UniBone/10.01_base/2_src/shared/update_pru_config.sh
Joerg Hoppe 2530d9cbb5 Initial
2019-04-05 11:30:26 +02:00

114 lines
3.7 KiB
Bash

#!/bin/bash
#
# update_pru_config.sh
# Adds several addresses from PRU linker map to
# the code C-array generated by hexpru --array
# get entry point address from PRU linker map and append to C-array with PRU code
# $1 = PRU number
# $2 = raw hexpru--array file
# $3 = clpru linker map
# $4 = hexpru array output
cmdline="$0 $*"
prunum=$1
rawarray=$2
configfile_c=$3.c
configfile_h=$3.h
linkermap=$4
rm -f $configfile_h
rm -f $configfile_c
# prefixes in array file
echo "/*** Following code generated by \"$cmdline\" ***/" >>$configfile_h
echo >>$configfile_h
echo "/*** Following code generated by \"$cmdline\" ***/" >>$configfile_c
echo >>$configfile_c
echo "#define _PRU${prunum}_CONFIG_C_" >>$configfile_c
echo "#include <stdint.h>" >>$configfile_c
echo >>$configfile_c
echo "// under c++ linker error with "const" attribute ?!" >>$configfile_c
echo "#define const" >>$configfile_c
echo >>$configfile_c
echo "// BEGIN original hexpru --array output " >>$configfile_c
cat $rawarray >>$configfile_c
echo "// END original hexpru --array output " >>$configfile_c
echo >>$configfile_c
echo >>$configfile_c
echo "Opening header file"
echo "#ifndef _PRU${prunum}_CONFIG_H_" >>$configfile_h
echo "#define _PRU${prunum}_CONFIG_H_" >>$configfile_h
echo >>$configfile_h
echo "#include <stdint.h>" >>$configfile_h
echo >>$configfile_h
echo >>$configfile_c
echo "Generate sizeof() for code image"
echo "// sizeof() for code image" >>$configfile_c
echo "unsigned pru${prunum}_sizeof_code(void) { " >>$configfile_c
echo " return sizeof(pru${prunum}_image_0) ;" >>$configfile_c
echo "}" >>$configfile_c
echo >>$configfile_c
echo "#ifndef _PRU${prunum}_CONFIG_C_" >>$configfile_h
echo "// under c++ linker error with "const" attribute ?!" >>$configfile_c
echo "// extern const uint32_t pru${prunum}_image_0[] ;" >>$configfile_h
echo "extern uint32_t pru${prunum}_image_0[] ;" >>$configfile_h
echo "#endif" >>$configfile_h
echo >>$configfile_h
echo "unsigned pru${prunum}_sizeof_code(void) ;" >>$configfile_h
echo >>$configfile_h
echo 'Search entry address from linker map line: ENTRY POINT SYMBOL: "_c_int00_noinit_noargs" address: 00000000'
set -- `grep "ENTRY POINT" < $linkermap`
echo "// code entry point $4 from linker map file:" >>$configfile_h
echo "#define PRU${prunum}_ENTRY_ADDR 0x$6" >>$configfile_h
echo >>$configfile_h
# do not scan for mailbox start, locate always to "0" / 0x10000
#
# echo 'Get mailbox page & offset in PRU internal shared 12 KB RAM'
# set -- `gawk '
# /GLOBAL SYMBOLS:/ { table_found=1 }
# table_found && /mailbox/ { mailbox_addr = strtonum("0x" $2)}
# END {printf "0x%x", mailbox_addr - 0x10000 }
# ' $linkermap`
echo "// Mailbox page & offset in PRU internal shared 12 KB RAM" >>$configfile_h
echo "// Accessible by both PRUs, must be located in shared RAM" >>$configfile_h
echo "// offset 0 == addr 0x10000 in linker cmd files for PRU0 AND PRU1 projects." >>$configfile_h
echo "// For use with prussdrv_map_prumem()" >>$configfile_h
echo "#ifndef PRU_MAILBOX_RAM_ID" >>$configfile_h
echo " #define PRU_MAILBOX_RAM_ID PRUSS0_SHARED_DATARAM" >>$configfile_h
echo " #define PRU_MAILBOX_RAM_OFFSET 0" >>$configfile_h
echo "#endif" >>$configfile_h
echo >>$configfile_h
echo "// Device register page & offset in PRU0 8KB RAM mapped into PRU1 space" >>$configfile_h
echo "// offset 0 == addr 0x2000 in linker cmd files for PRU1 projects." >>$configfile_h
echo "// For use with prussdrv_map_prumem()" >>$configfile_h
echo "#ifndef PRU_DEVICEREGISTER_RAM_ID" >>$configfile_h
echo " #define PRU_DEVICEREGISTER_RAM_ID PRUSS0_PRU0_DATARAM" >>$configfile_h
echo " #define PRU_DEVICEREGISTER_RAM_OFFSET 0" >>$configfile_h
echo "#endif" >>$configfile_h
echo >>$configfile_h
echo "#endif" >>$configfile_h