17 changed files with 264 additions and 112 deletions
@ -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 @@ |
|||||||
|
#! /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 @@ |
|||||||
|
#! /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 @@ |
|||||||
|
#! /bin/sh |
||||||
|
|
||||||
|
JLinkGDBServerCLExe -startserver -USB -device Cortex-M4 -if SWD -speed auto > jlink.log & |
@ -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 @@ |
|||||||
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 @@ |
|||||||
# 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 @@ |
|||||||
#!/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