Daniel Agar
7 years ago
17 changed files with 264 additions and 112 deletions
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
pipeline { |
||||
agent none |
||||
stages { |
||||
|
||||
stage('Build') { |
||||
agent { |
||||
docker { |
||||
image 'px4io/px4-dev-nuttx:2018-08-05' |
||||
args '-e CCACHE_BASEDIR=$WORKSPACE -v ${CCACHE_DIR}:${CCACHE_DIR}:rw' |
||||
} |
||||
} |
||||
steps { |
||||
sh 'export' |
||||
sh 'make distclean' |
||||
sh 'ccache -z' |
||||
sh 'git fetch --tags' |
||||
sh 'make nuttx_px4fmu-v2_test' |
||||
sh 'make sizes' |
||||
sh 'ccache -s' |
||||
stash includes: 'build/nuttx_px4fmu-v2_test/nuttx_px4fmu-v2_test.elf', name: 'px4fmu-v2_test' |
||||
stash includes: 'Tools/HIL/monitor_firmware_upload.py, Tools/HIL/run_tests.py', name: 'scripts' |
||||
sh 'make distclean' |
||||
} |
||||
} // stage Build |
||||
|
||||
stage('Flash and Run') { |
||||
agent { |
||||
label 'px4fmu-v2' |
||||
} |
||||
steps { |
||||
script { |
||||
try { |
||||
sh 'export' |
||||
sh 'find /dev/serial' |
||||
unstash 'px4fmu-v2_test' |
||||
sh ''' gdb -nx --batch \ |
||||
-ex "target extended-remote `find /dev/serial -name *Black_Magic_Probe_*-if00`" \ |
||||
-ex "monitor version" \ |
||||
-ex "monitor connect_srst enable" \ |
||||
-ex "monitor swdp_scan" \ |
||||
-ex "attach 1" \ |
||||
-ex "load" \ |
||||
-ex "kill" \ |
||||
build/nuttx_px4fmu-v2_test/nuttx_px4fmu-v2_test.elf |
||||
''' |
||||
unstash 'scripts' |
||||
sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *Black_Magic_Probe_*-if02` --baudrate 57600' |
||||
sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *Black_Magic_Probe_*-if02`' |
||||
} catch (Exception err) { |
||||
// always report passed for now |
||||
currentBuild.result = 'SUCCESS' |
||||
} |
||||
} // script |
||||
} |
||||
options { |
||||
timeout(time: 300, unit: 'SECONDS') |
||||
} |
||||
|
||||
} // stage Flash |
||||
|
||||
} // stages |
||||
environment { |
||||
CCACHE_DIR = '/tmp/ccache' |
||||
CI = true |
||||
} |
||||
options { |
||||
buildDiscarder(logRotator(numToKeepStr: '10', artifactDaysToKeepStr: '30')) |
||||
timeout(time: 60, unit: 'MINUTES') |
||||
} |
||||
} |
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
#! /usr/bin/python |
||||
|
||||
import serial, time |
||||
import subprocess |
||||
from subprocess import call, Popen |
||||
from argparse import ArgumentParser |
||||
import re |
||||
|
||||
def monitor_firmware_upload(port, baudrate): |
||||
databits = serial.EIGHTBITS |
||||
stopbits = serial.STOPBITS_ONE |
||||
parity = serial.PARITY_NONE |
||||
ser = serial.Serial(port, baudrate, databits, parity, stopbits, 100) |
||||
|
||||
finished = 0 |
||||
|
||||
while finished == 0: |
||||
serial_line = ser.readline() |
||||
print(serial_line.replace('\n','')) |
||||
|
||||
if "NuttShell (NSH)" in serial_line: |
||||
finished = 1 |
||||
time.sleep(0.05) |
||||
ser.close() |
||||
|
||||
def main(): |
||||
parser = ArgumentParser(description=__doc__) |
||||
parser.add_argument('--device', "-d", nargs='?', default = None, help='') |
||||
parser.add_argument("--baudrate", "-b", dest="baudrate", type=int, help="Mavlink port baud rate (default=57600)", default=57600) |
||||
args = parser.parse_args() |
||||
|
||||
monitor_firmware_upload(args.device, args.baudrate) |
||||
|
||||
if __name__ == "__main__": |
||||
main() |
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
#! /usr/bin/python |
||||
|
||||
import serial, time |
||||
import subprocess |
||||
from subprocess import call, Popen |
||||
from argparse import ArgumentParser |
||||
import re |
||||
|
||||
def do_tests(port, baudrate): |
||||
databits = serial.EIGHTBITS |
||||
stopbits = serial.STOPBITS_ONE |
||||
parity = serial.PARITY_NONE |
||||
ser = serial.Serial(port, baudrate, databits, parity, stopbits, 100) |
||||
ser.write('\n\n') |
||||
|
||||
finished = 0 |
||||
while finished == 0: |
||||
serial_line = ser.readline() |
||||
print(serial_line.replace('\n','')) |
||||
|
||||
if "nsh>" in serial_line: |
||||
finished = 1 |
||||
time.sleep(0.05) |
||||
|
||||
ser.write('tests perf\n') |
||||
|
||||
finished = 0 |
||||
while finished == 0: |
||||
serial_line = ser.readline() |
||||
print(serial_line.replace('\n','')) |
||||
|
||||
if "perf PASSED" in serial_line: |
||||
finished = 1 |
||||
ser.close() |
||||
|
||||
time.sleep(0.05) |
||||
|
||||
ser.close() |
||||
|
||||
def main(): |
||||
parser = ArgumentParser(description=__doc__) |
||||
parser.add_argument('--device', "-d", nargs='?', default = None, help='') |
||||
parser.add_argument("--baudrate", "-b", dest="baudrate", type=int, help="Mavlink port baud rate (default=57600)", default=57600) |
||||
args = parser.parse_args() |
||||
|
||||
do_tests(args.device, args.baudrate) |
||||
|
||||
if __name__ == "__main__": |
||||
main() |
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
#! /bin/sh |
||||
|
||||
JLinkGDBServerCLExe -startserver -USB -device Cortex-M4 -if SWD -speed auto > jlink.log & |
@ -1,22 +0,0 @@
@@ -1,22 +0,0 @@
|
||||
# program a bootable device load on a mavstation |
||||
# To run type openocd -f mavprogram.cfg |
||||
|
||||
source [find interface/olimex-arm-usb-ocd-h.cfg] |
||||
source [find px4fmu-board.cfg] |
||||
|
||||
init |
||||
halt |
||||
|
||||
# Find the flash inside this CPU |
||||
flash probe 0 |
||||
|
||||
# erase it (128 pages) then program and exit |
||||
|
||||
#flash erase_sector 0 0 127 |
||||
# stm32f1x mass_erase 0 |
||||
|
||||
# It seems that Pat's image has a start address offset of 0x1000 but the vectors need to be at zero, so fixbin.sh moves things around |
||||
#flash write_bank 0 fixed.bin 0 |
||||
#flash write_image firmware.elf |
||||
#shutdown |
||||
|
@ -1,21 +0,0 @@
@@ -1,21 +0,0 @@
|
||||
target remote :3333 |
||||
|
||||
# Don't let GDB get confused while stepping |
||||
define hook-step |
||||
mon cortex_m maskisr on |
||||
end |
||||
define hookpost-step |
||||
mon cortex_m maskisr off |
||||
end |
||||
|
||||
mon init |
||||
mon stm32_init |
||||
# mon reset halt |
||||
mon poll |
||||
mon cortex_m maskisr auto |
||||
set mem inaccessible-by-default off |
||||
set print pretty |
||||
source platforms/nuttx/Debug/PX4 |
||||
|
||||
echo PX4 resumed, press ctrl-c to interrupt\n |
||||
continue |
@ -1,37 +0,0 @@
@@ -1,37 +0,0 @@
|
||||
# The latest defaults in OpenOCD 0.7.0 are actually prettymuch correct for the px4fmu |
||||
|
||||
# increase working area to 32KB for faster flash programming |
||||
set WORKAREASIZE 0x8000 |
||||
|
||||
source [find target/stm32f4x.cfg] |
||||
|
||||
# needed for px4 |
||||
reset_config trst_only |
||||
|
||||
proc stm32_reset {} { |
||||
reset halt |
||||
# FIXME - needed to init periphs on reset |
||||
# 0x40023800 RCC base |
||||
# 0x24 RCC_APB2 0x75933 |
||||
# RCC_APB2 0 |
||||
} |
||||
|
||||
# perform init that is required on each connection to the target |
||||
proc stm32_init {} { |
||||
|
||||
# force jtag to not shutdown during sleep |
||||
#uint32_t cr = getreg32(STM32_DBGMCU_CR); |
||||
#cr |= DBGMCU_CR_STANDBY | DBGMCU_CR_STOP | DBGMCU_CR_SLEEP; |
||||
#putreg32(cr, STM32_DBGMCU_CR); |
||||
mww 0xe0042004 00000007 |
||||
} |
||||
|
||||
# if srst is not fitted use SYSRESETREQ to |
||||
# perform a soft reset |
||||
cortex_m reset_config sysresetreq |
||||
|
||||
# Let GDB directly program elf binaries |
||||
gdb_memory_map enable |
||||
|
||||
# doesn't work yet |
||||
gdb_flash_program disable |
@ -1,5 +0,0 @@
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash |
||||
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" |
||||
|
||||
openocd -f interface/olimex-arm-usb-ocd-h.cfg -f $DIR/px4fmu-board.cfg |
Loading…
Reference in new issue