mirror of https://github.com/wolfSSL/wolfBoot.git
Fix NRF52 UART DMA and Renode test infrastructure
hal/nrf52.c: - Use static volatile buffer for UARTE DMA source instead of stack variable address. GCC 15.2 with -Os optimized away the store to the stack slot, causing the DMA to read zeros. - Set UART0_ENABLE to 4 (UARTE mode) per NRF52840 datasheet. tools/test-expect-version/test-expect-version.c: - Replace deprecated termio.h and linux/serial.h with sys/ioctl.h for compatibility with newer glibc. tools/renode/docker-test.sh: - Remove unused RENODE_CHECKOUT env var. tools/scripts/renode-test-update.sh: - Add robust UART wait functions with timeouts and liveness checks. - Log Renode output to /tmp/renode.log for diagnostics on failure. - Use run_expect_version helper with configurable timeout.pull/754/head
parent
85f5b493c0
commit
42455508c0
|
|
@ -29,14 +29,16 @@
|
|||
void uart_init(void)
|
||||
{
|
||||
UART0_BAUDRATE = BAUD_115200;
|
||||
UART0_ENABLE = 1;
|
||||
UART0_ENABLE = 4;
|
||||
}
|
||||
|
||||
static volatile uint8_t uart_tx_buf;
|
||||
|
||||
static void uart_write_char(char c)
|
||||
{
|
||||
uart_tx_buf = c;
|
||||
UART0_EVENT_ENDTX = 0;
|
||||
|
||||
UART0_TXD_PTR = (uint32_t)(&c);
|
||||
UART0_TXD_PTR = (uint32_t)&uart_tx_buf;
|
||||
UART0_TXD_MAXCOUNT = 1;
|
||||
UART0_TASK_STARTTX = 1;
|
||||
while(UART0_EVENT_ENDTX == 0)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ if ! docker run \
|
|||
--volume ${HOST_ROOT_DIR}:${DOCKER_WORKSPACE} \
|
||||
--volume ${HOST_TEST_RESULTS_PATH}:${DOCKER_TEST_RESULTS_PATH} \
|
||||
--env SCRIPT=${DOCKER_WORKSPACE}/renode-config.resc \
|
||||
--env RENODE_CHECKOUT=/home/developer/renode \
|
||||
--workdir ${DOCKER_WORKSPACE} \
|
||||
${DOCKER_IMAGE} \
|
||||
/bin/bash -c "tools/scripts/renode-test-update.sh $@ 2>&1 > ${DOCKER_TEST_RESULTS_PATH}/logs.txt"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#!/bin/bash
|
||||
set -u
|
||||
|
||||
export RENODE_UART=/tmp/wolfboot.uart
|
||||
export RENODE_PIDFILE=/tmp/renode.pid
|
||||
|
|
@ -8,6 +9,18 @@ export RENODE_PORT=55155
|
|||
export RENODE_OPTIONS="--pid-file=$RENODE_PIDFILE --disable-xwt -P $RENODE_PORT"
|
||||
export EXPVER=tools/test-expect-version/test-expect-version
|
||||
export TEST_OPTIONS=$@
|
||||
export RENODE_START_TIMEOUT=30
|
||||
export UART_OPEN_TIMEOUT=10
|
||||
export EXPVER_TIMEOUT=75
|
||||
export RENODE_LOG=/tmp/renode.log
|
||||
RENODE_BG_PID=
|
||||
|
||||
show_renode_log() {
|
||||
if [ -f "$RENODE_LOG" ]; then
|
||||
echo "----- Renode log -----"
|
||||
tail -n 80 "$RENODE_LOG"
|
||||
fi
|
||||
}
|
||||
|
||||
quit_renode() {
|
||||
if (which nc); then
|
||||
|
|
@ -15,10 +28,72 @@ quit_renode() {
|
|||
fi
|
||||
}
|
||||
|
||||
renode_is_alive() {
|
||||
if [ -n "${RENODE_BG_PID:-}" ] && kill -0 "$RENODE_BG_PID" 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
if [ -f "$RENODE_PIDFILE" ] && kill -0 "$(cat "$RENODE_PIDFILE")" 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
wait_for_uart_node() {
|
||||
local waited=0
|
||||
|
||||
while [ "$waited" -lt "$RENODE_START_TIMEOUT" ]; do
|
||||
if [ -e "$RENODE_UART" ]; then
|
||||
return 0
|
||||
fi
|
||||
if ! renode_is_alive; then
|
||||
echo "Renode exited before creating UART PTY"
|
||||
show_renode_log
|
||||
return 1
|
||||
fi
|
||||
sleep 1
|
||||
waited=$((waited + 1))
|
||||
done
|
||||
|
||||
rm -f $RENODE_UART
|
||||
echo "Timed out waiting for Renode UART PTY: $RENODE_UART"
|
||||
show_renode_log
|
||||
return 1
|
||||
}
|
||||
|
||||
wait_for_uart_ready() {
|
||||
local waited=0
|
||||
|
||||
while [ "$waited" -lt "$UART_OPEN_TIMEOUT" ]; do
|
||||
if bash -lc 'exec 3<>"$1"' _ "$RENODE_UART" 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
if ! renode_is_alive; then
|
||||
echo "Renode exited before UART became ready"
|
||||
show_renode_log
|
||||
return 1
|
||||
fi
|
||||
sleep 1
|
||||
waited=$((waited + 1))
|
||||
done
|
||||
|
||||
echo "Timed out waiting for Renode UART readiness: $RENODE_UART"
|
||||
show_renode_log
|
||||
return 1
|
||||
}
|
||||
|
||||
run_expect_version() {
|
||||
local expected="$1"
|
||||
local ret
|
||||
|
||||
ret=$(timeout "$EXPVER_TIMEOUT" "$EXPVER" "$RENODE_UART")
|
||||
if [ "$ret" = "$expected" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "Unexpected version from UART: got ${ret}, expected ${expected}"
|
||||
return 1
|
||||
}
|
||||
|
||||
rm -f $RENODE_UART $RENODE_LOG
|
||||
|
||||
make keysclean
|
||||
make keytools
|
||||
|
|
@ -31,13 +106,15 @@ cp wolfboot.elf /tmp/renode-wolfboot.elf || exit 3
|
|||
cp test-app/image_v1_signed.bin /tmp/renode-test-v1.bin || exit 3
|
||||
cp test-app/renode-test-update.bin /tmp || exit 3
|
||||
echo "Launching Renode"
|
||||
renode $RENODE_OPTIONS $RENODE_CONFIG >/dev/null &
|
||||
while ! (test -e $RENODE_UART); do sleep .1; done
|
||||
renode $RENODE_OPTIONS $RENODE_CONFIG >"$RENODE_LOG" 2>&1 &
|
||||
RENODE_BG_PID=$!
|
||||
wait_for_uart_node || { quit_renode; exit 1; }
|
||||
echo "Renode up: uart port activated"
|
||||
wait_for_uart_ready || { quit_renode; exit 1; }
|
||||
sleep 1
|
||||
echo "Renode running: renode has been started."
|
||||
RET=$($EXPVER $RENODE_UART)
|
||||
|
||||
if (test $RET -eq 1); then
|
||||
if run_expect_version 1; then
|
||||
echo "Factory img: OK"
|
||||
else
|
||||
echo "FAILURE"
|
||||
|
|
@ -45,8 +122,7 @@ else
|
|||
exit 1
|
||||
fi
|
||||
|
||||
RET=$($EXPVER $RENODE_UART)
|
||||
if (test $RET -eq 2); then
|
||||
if run_expect_version 2; then
|
||||
echo "Update: OK"
|
||||
else
|
||||
echo "FAILURE"
|
||||
|
|
|
|||
|
|
@ -41,8 +41,7 @@
|
|||
#include <errno.h>
|
||||
|
||||
#ifndef __MACH__
|
||||
#include <termio.h>
|
||||
#include <linux/serial.h>
|
||||
#include <sys/ioctl.h>
|
||||
typedef void (*sighandler_t)(int);
|
||||
sighandler_t sigset(int sig, sighandler_t disp);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue