From e7dfb375be51e32ed7b867d58276d73544c60e12 Mon Sep 17 00:00:00 2001
From: Daniel Agar <daniel@agar.ca>
Date: Wed, 27 Feb 2019 18:42:54 -0500
Subject: [PATCH] create jlink gdb upload script and use in Jenkins Hardware
 pipeline

---
 .ci/Jenkinsfile-hardware                  | 106 ++--------------------
 platforms/nuttx/CMakeLists.txt            |  23 ++---
 platforms/nuttx/Debug/gdbinit.in          |   5 +
 platforms/nuttx/Debug/jlink.sh            |   3 -
 platforms/nuttx/Debug/jlink_gdb_start.sh  |   7 ++
 platforms/nuttx/Debug/jlink_gdb_upload.sh |  12 +++
 6 files changed, 40 insertions(+), 116 deletions(-)
 delete mode 100755 platforms/nuttx/Debug/jlink.sh
 create mode 100755 platforms/nuttx/Debug/jlink_gdb_start.sh
 create mode 100755 platforms/nuttx/Debug/jlink_gdb_upload.sh

diff --git a/.ci/Jenkinsfile-hardware b/.ci/Jenkinsfile-hardware
index 069d304751..d5791cdd5c 100644
--- a/.ci/Jenkinsfile-hardware
+++ b/.ci/Jenkinsfile-hardware
@@ -169,17 +169,7 @@ pipeline {
                 sh 'export'
                 sh 'find /dev/serial'
                 unstash 'px4_fmu-v2_test'
-                sh '''gdb-multiarch -nx --batch \
-                      -ex "target remote localhost:2331" \
-                      -ex "monitor reset 0" \
-                      -ex "load" \
-                      -ex "compare-sections" \
-                      -ex "monitor reset 0" \
-                      -ex "monitor sleep 1000" \
-                      -ex "monitor go" \
-                      -ex "kill" \
-                      build/px4_fmu-v2_test/px4_fmu-v2_test.elf
-                '''
+                sh 'platforms/nuttx/Debug/jlink_gdb_upload.sh build/px4_fmu-v2_test/px4_fmu-v2_test.elf'
                 sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
                 //sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
               } catch (Exception err) {
@@ -203,51 +193,7 @@ pipeline {
                 sh 'export'
                 sh 'find /dev/serial'
                 unstash 'px4_fmu-v3_default'
-                sh '''gdb-multiarch -nx --batch \
-                      -ex "target remote localhost:2331" \
-                      -ex "monitor reset 0" \
-                      -ex "load" \
-                      -ex "compare-sections" \
-                      -ex "monitor reset 0" \
-                      -ex "monitor sleep 1000" \
-                      -ex "monitor go" \
-                      -ex "kill" \
-                      build/px4_fmu-v3_default/px4_fmu-v3_default.elf
-                '''
-                sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
-                sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
-              } catch (Exception err) {
-                  // always report passed for now
-                  currentBuild.result = 'SUCCESS'
-              }
-            } // script
-          }
-          options {
-            timeout(time: 600, unit: 'SECONDS')
-          }
-        }
-
-        stage('px4_fmu-v3_default (pixhack-v3)') {
-          agent {
-            label 'pixhack-v3'
-          }
-          steps {
-            script {
-              try {
-                sh 'export'
-                sh 'find /dev/serial'
-                unstash 'px4_fmu-v3_default'
-                sh '''gdb-multiarch -nx --batch \
-                      -ex "target remote localhost:2331" \
-                      -ex "monitor reset 0" \
-                      -ex "load" \
-                      -ex "compare-sections" \
-                      -ex "monitor reset 0" \
-                      -ex "monitor sleep 1000" \
-                      -ex "monitor go" \
-                      -ex "kill" \
-                      build/px4_fmu-v3_default/px4_fmu-v3_default.elf
-                '''
+                sh 'platforms/nuttx/Debug/jlink_gdb_upload.sh build/px4_fmu-v3_default/px4_fmu-v3_default.elf'
                 sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
                 sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
               } catch (Exception err) {
@@ -271,17 +217,7 @@ pipeline {
                 sh 'export'
                 sh 'find /dev/serial'
                 unstash 'px4_fmu-v4_default'
-                sh ''' gdb-multiarch -nx --batch \
-                      -ex "target remote localhost:2331" \
-                      -ex "monitor reset 0" \
-                      -ex "load" \
-                      -ex "compare-sections" \
-                      -ex "monitor reset 0" \
-                      -ex "monitor sleep 1000" \
-                      -ex "monitor go" \
-                      -ex "kill" \
-                      build/px4_fmu-v4_default/px4_fmu-v4_default.elf
-                '''
+                sh 'platforms/nuttx/Debug/jlink_gdb_upload.sh build/px4_fmu-v4_default/px4_fmu-v4_default.elf'
                 sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
                 sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
               } catch (Exception err) {
@@ -305,17 +241,7 @@ pipeline {
                 sh 'export'
                 sh 'find /dev/serial'
                 unstash 'px4_fmu-v4pro_default'
-                sh '''gdb-multiarch -nx --batch \
-                      -ex "target remote localhost:2331" \
-                      -ex "monitor reset 0" \
-                      -ex "load" \
-                      -ex "compare-sections" \
-                      -ex "monitor reset 0" \
-                      -ex "monitor sleep 1000" \
-                      -ex "monitor go" \
-                      -ex "kill" \
-                      build/px4_fmu-v4pro_default/px4_fmu-v4pro_default.elf
-                '''
+                sh 'platforms/nuttx/Debug/jlink_gdb_upload.sh build/px4_fmu-v4pro_default/px4_fmu-v4pro_default.elf'
                 sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
                 sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
               } catch (Exception err) {
@@ -339,17 +265,7 @@ pipeline {
                 sh 'export'
                 sh 'find /dev/serial'
                 unstash 'px4_fmu-v5_default'
-                sh '''gdb-multiarch -nx --batch \
-                      -ex "target remote localhost:2331" \
-                      -ex "monitor reset 0" \
-                      -ex "load" \
-                      -ex "compare-sections" \
-                      -ex "monitor reset 0" \
-                      -ex "monitor sleep 1000" \
-                      -ex "monitor go" \
-                      -ex "kill" \
-                      build/px4_fmu-v5_default/px4_fmu-v5_default.elf
-                '''
+                sh './platforms/nuttx/Debug/jlink_gdb_upload.sh  build/px4_fmu-v5_default/px4_fmu-v5_default.elf'
                 sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
                 sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
               } catch (Exception err) {
@@ -373,17 +289,7 @@ pipeline {
                 sh 'export'
                 sh 'find /dev/serial'
                 unstash 'px4_fmu-v5_stackcheck'
-                sh '''gdb-multiarch -nx --batch \
-                      -ex "target remote localhost:2331" \
-                      -ex "monitor reset 0" \
-                      -ex "load" \
-                      -ex "compare-sections" \
-                      -ex "monitor reset 0" \
-                      -ex "monitor sleep 1000" \
-                      -ex "monitor go" \
-                      -ex "kill" \
-                      build/px4_fmu-v5_stackcheck/px4_fmu-v5_stackcheck.elf
-                '''
+                sh './platforms/nuttx/Debug/jlink_gdb_upload.sh build/px4_fmu-v5_stackcheck/px4_fmu-v5_stackcheck.elf'
                 sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
                 sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
               } catch (Exception err) {
diff --git a/platforms/nuttx/CMakeLists.txt b/platforms/nuttx/CMakeLists.txt
index f5f250cba1..4c7da5583a 100644
--- a/platforms/nuttx/CMakeLists.txt
+++ b/platforms/nuttx/CMakeLists.txt
@@ -349,27 +349,24 @@ if(black_magic_probe_path)
 endif()
 
 add_custom_target(jlink_upload
-	COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/Debug/jlink.sh
-	COMMAND ${GDB} --nx --batch
-		-iex 'set auto-load safe-path ${PX4_BINARY_DIR}'
-		-ex 'target remote localhost:2331'
-		-ex 'monitor reset'
-		-ex 'load'
-		-ex 'kill'
-		$<TARGET_FILE:px4>
-	DEPENDS px4 ${PX4_BINARY_DIR}/.gdbinit
+	COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/Debug/jlink_gdb_start.sh
+	COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/Debug/jlink_gdb_upload.sh $<TARGET_FILE:px4>
+	DEPENDS px4
 	WORKING_DIRECTORY ${PX4_BINARY_DIR}
 	USES_TERMINAL
 	)
 
 add_custom_target(jlink_debug
-	COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/Debug/jlink.sh
-	COMMAND ${GDB} --nh
+	COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/Debug/jlink_gdb_start.sh
+	COMMAND ${GDB} -nh
 		-iex 'set auto-load safe-path ${PX4_BINARY_DIR}'
 		-ex 'target remote localhost:2331'
-		-ex 'monitor reset'
+		-ex 'monitor reset 0'
 		-ex 'load'
-		-ex 'monitor reset'
+		-ex 'compare-sections'
+		-ex 'monitor reset 0'
+		-ex 'monitor sleep 1000'
+		-ex 'monitor go'
 		-ex 'continue'
 		$<TARGET_FILE:px4>
 	DEPENDS px4 ${PX4_BINARY_DIR}/.gdbinit
diff --git a/platforms/nuttx/Debug/gdbinit.in b/platforms/nuttx/Debug/gdbinit.in
index 3996e71fd5..fbc62d331e 100644
--- a/platforms/nuttx/Debug/gdbinit.in
+++ b/platforms/nuttx/Debug/gdbinit.in
@@ -1,6 +1,11 @@
 source ${PX4_SOURCE_DIR}/platforms/nuttx/Debug/PX4
+help px4
+
 source ${PX4_SOURCE_DIR}/platforms/nuttx/Debug/NuttX
+help nuttx
+
 source ${PX4_SOURCE_DIR}/platforms/nuttx/Debug/ARMv7M
+help armv7m
 
 set mem inaccessible-by-default off
 
diff --git a/platforms/nuttx/Debug/jlink.sh b/platforms/nuttx/Debug/jlink.sh
deleted file mode 100755
index 3d4873aff9..0000000000
--- a/platforms/nuttx/Debug/jlink.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#! /bin/sh
-
-JLinkGDBServerCLExe -startserver -USB -device Cortex-M4 -if SWD -speed auto > jlink.log &
diff --git a/platforms/nuttx/Debug/jlink_gdb_start.sh b/platforms/nuttx/Debug/jlink_gdb_start.sh
new file mode 100755
index 0000000000..1aeba4cb8b
--- /dev/null
+++ b/platforms/nuttx/Debug/jlink_gdb_start.sh
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+killall JLinkGDBServerCLExe
+
+# TODO: set device from nuttx config
+# eg CONFIG_ARCH_CHIP_STM32F427V or CONFIG_STM32_STM32F427
+JLinkGDBServerCLExe -device STM32F427II -select usb -silent -endian little -if SWD -speed auto -ir -LocalhostOnly 1 -strict -vd -singlerun &
diff --git a/platforms/nuttx/Debug/jlink_gdb_upload.sh b/platforms/nuttx/Debug/jlink_gdb_upload.sh
new file mode 100755
index 0000000000..fe52a00bb8
--- /dev/null
+++ b/platforms/nuttx/Debug/jlink_gdb_upload.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+gdb-multiarch -nx -batch \
+	-ex "target remote localhost:2331" \
+	-ex "monitor reset 0" \
+	-ex "load" \
+	-ex "compare-sections" \
+	-ex "monitor reset 0" \
+	-ex "monitor sleep 1000" \
+	-ex "monitor go" \
+	-ex "kill" \
+	${1}
-- 
GitLab