From 12415e2b24a2dcd61c1f208e58534657460dbd27 Mon Sep 17 00:00:00 2001 From: Gurjant Kalsi Date: Wed, 2 Dec 2015 18:34:20 -0800 Subject: [PATCH] [qemu][cortex-m4] Support qemu-m4 target. --- .gitignore | 1 + project/qemu-m4-test.mk | 8 +++ project/target/qemu-m4.mk | 4 ++ scripts/do-qemum4 | 57 +++++++++++++++++++++ scripts/toolpaths.default | 8 +++ target/qemu-m4/include/target/debugconfig.h | 29 +++++++++++ target/qemu-m4/init.c | 48 +++++++++++++++++ target/qemu-m4/rules.mk | 22 ++++++++ 8 files changed, 177 insertions(+) create mode 100644 project/qemu-m4-test.mk create mode 100644 project/target/qemu-m4.mk create mode 100755 scripts/do-qemum4 create mode 100644 scripts/toolpaths.default create mode 100644 target/qemu-m4/include/target/debugconfig.h create mode 100644 target/qemu-m4/init.c create mode 100644 target/qemu-m4/rules.mk diff --git a/.gitignore b/.gitignore index 8c34ad60..43bfeb81 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ t tagit blk.bin *.dSYM +scripts/toolpaths.local \ No newline at end of file diff --git a/project/qemu-m4-test.mk b/project/qemu-m4-test.mk new file mode 100644 index 00000000..417405c3 --- /dev/null +++ b/project/qemu-m4-test.mk @@ -0,0 +1,8 @@ +# main project for qemu-m4 +MODULES += \ + app/shell + +include project/virtual/test.mk +include project/virtual/fs.mk +include project/virtual/minip.mk +include project/target/qemu-m4.mk diff --git a/project/target/qemu-m4.mk b/project/target/qemu-m4.mk new file mode 100644 index 00000000..a1a8258a --- /dev/null +++ b/project/target/qemu-m4.mk @@ -0,0 +1,4 @@ +# main project for qemu-m4 +TARGET := qemu-m4 + +WITH_LINKER_GC := 0 diff --git a/scripts/do-qemum4 b/scripts/do-qemum4 new file mode 100755 index 00000000..91793ec9 --- /dev/null +++ b/scripts/do-qemum4 @@ -0,0 +1,57 @@ +#!/bin/bash +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +DEFAULT_TOOLPATH="$DIR/toolpaths.default" +if [ -e "$DEFAULT_TOOLPATH" ] +then + source $DEFAULT_TOOLPATH +fi + +function HELP { + echo "help:" + echo "-c cmpctmalloc instead of dlmalloc" + echo "-M miniheap instead of dlmalloc" + echo "-h for help" + echo "all arguments after -- are passed to qemu directly" + exit 1 +} + +DO_CMPCTMALLOC=0 +DO_MINIHEAP=0 +MEMSIZE=8 + +while getopts bdhm:cMnt6 FLAG; do + case $FLAG in + c) DO_CMPCTMALLOC=1;; + M) DO_MINIHEAP=1;; + M) DO_MINIHEAP=1;; + h) HELP;; + \?) + echo unrecognized option + HELP + esac +done + +shift $((OPTIND-1)) + +if [ -z "$QEMUM4" ]; then + echo "QEMUM4 is not defined. Set QEMUM4='path/to/qemu-m4' inside scripts/toolpaths.local" + exit 1 +fi + +PROJECT="qemu-m4-test" + +ARGS=" -serial tcp::12345,server,nowait " # Logs +ARGS+=" -serial tcp::12344,server,nowait " # Debug +ARGS+=" -serial stdio" # Console +ARGS+=" -machine pebble-s4-bb -cpu cortex-m4" +ARGS+=" -pflash build-${PROJECT}/lk.bin " + +if [ $DO_CMPCTMALLOC == 1 ]; then + MAKE_VARS=LK_HEAP_IMPLEMENTATION=cmpctmalloc +elif [ $DO_MINIHEAP == 1 ]; then + MAKE_VARS=LK_HEAP_IMPLEMENTATION=miniheap +fi + +make $MAKE_VARS $PROJECT -j4 && +echo $QEMUM4 $ARGS $@ && +$QEMUM4 $ARGS $@ diff --git a/scripts/toolpaths.default b/scripts/toolpaths.default new file mode 100644 index 00000000..ad9570ce --- /dev/null +++ b/scripts/toolpaths.default @@ -0,0 +1,8 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +LOCAL_TOOLPATH="$DIR/toolpaths.local" +if [ -e "$LOCAL_TOOLPATH" ] +then + source $LOCAL_TOOLPATH +fi diff --git a/target/qemu-m4/include/target/debugconfig.h b/target/qemu-m4/include/target/debugconfig.h new file mode 100644 index 00000000..4a2b79d1 --- /dev/null +++ b/target/qemu-m4/include/target/debugconfig.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2012 Travis Geiselbrecht + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef __TARGET_DEBUGCONFIG_H +#define __TARGET_DEBUGCONFIG_H + +// UART 3 is the console +#define DEBUG_UART 3 + +#endif diff --git a/target/qemu-m4/init.c b/target/qemu-m4/init.c new file mode 100644 index 00000000..dcff892d --- /dev/null +++ b/target/qemu-m4/init.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2012 Travis Geiselbrecht + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void target_early_init(void) +{ + stm32_debug_early_init(); +} + +void target_init(void) +{ + TRACE_ENTRY; + + stm32_debug_init(); + + TRACE_EXIT; +} \ No newline at end of file diff --git a/target/qemu-m4/rules.mk b/target/qemu-m4/rules.mk new file mode 100644 index 00000000..705e25b7 --- /dev/null +++ b/target/qemu-m4/rules.mk @@ -0,0 +1,22 @@ +LOCAL_DIR := $(GET_LOCAL_DIR) + +MODULE := $(LOCAL_DIR) + +STM32_CHIP := stm32f407 + +PLATFORM := stm32f4xx + +GLOBAL_DEFINES += \ + ENABLE_UART2=1 \ + ENABLE_UART3=1 \ + HSE_VALUE=8000000 \ + PLL_M_VALUE=8 \ + PLL_N_VALUE=336 \ + PLL_P_VALUE=2 \ + PKTBUF_POOL_SIZE=16 + +MODULE_SRCS += \ + $(LOCAL_DIR)/init.c + +include make/module.mk +