diff options
Diffstat (limited to 'ROMFS')
-rw-r--r-- | ROMFS/.gitignore | 1 | ||||
-rw-r--r-- | ROMFS/Makefile | 102 | ||||
-rw-r--r-- | ROMFS/scripts/rc.PX4IO | 74 | ||||
-rw-r--r-- | ROMFS/scripts/rc.PX4IOAR | 69 | ||||
-rw-r--r-- | ROMFS/scripts/rc.jig | 10 | ||||
-rw-r--r-- | ROMFS/scripts/rc.logging | 10 | ||||
-rw-r--r-- | ROMFS/scripts/rc.sensors | 28 | ||||
-rw-r--r-- | ROMFS/scripts/rc.standalone | 67 | ||||
-rwxr-xr-x | ROMFS/scripts/rcS | 120 |
9 files changed, 481 insertions, 0 deletions
diff --git a/ROMFS/.gitignore b/ROMFS/.gitignore new file mode 100644 index 000000000..30d3d7fe5 --- /dev/null +++ b/ROMFS/.gitignore @@ -0,0 +1 @@ +/img diff --git a/ROMFS/Makefile b/ROMFS/Makefile new file mode 100644 index 000000000..cc5a3ccd3 --- /dev/null +++ b/ROMFS/Makefile @@ -0,0 +1,102 @@ +# +# Makefile to generate a PX4FMU ROMFS image. +# +# In normal use, 'make install' will generate a new ROMFS header and place it +# into the px4fmu configuration in the appropriate location. +# + +# +# Directories of interest +# +SRCROOT ?= $(dir $(lastword $(MAKEFILE_LIST))) +BUILDROOT ?= $(SRCROOT)/img +ROMFS_HEADER ?= $(SRCROOT)/../nuttx/configs/px4fmu/include/nsh_romfsimg.h + +# +# List of files to install in the ROMFS, specified as <source>~<destination> +# +ROMFS_FSSPEC := $(SRCROOT)/scripts/rcS~init.d/rcS \ + $(SRCROOT)/scripts/rc.sensors~init.d/rc.sensors \ + $(SRCROOT)/scripts/rc.logging~init.d/rc.logging \ + $(SRCROOT)/scripts/rc.standalone~init.d/rc.standalone \ + $(SRCROOT)/scripts/rc.PX4IO~init.d/rc.PX4IO \ + $(SRCROOT)/scripts/rc.PX4IOAR~init.d/rc.PX4IOAR + +# +# Add the PX4IO firmware to the spec if someone has dropped it into the +# source directory, or otherwise specified its location. +# +# Normally this is only something you'd do when working on PX4IO; most +# users will upgrade with firmware off the microSD card. +# +PX4IO_FIRMWARE ?= $(SRCROOT)/px4io.bin +ifneq ($(wildcard $(PX4IO_FIRMWARE)),) +ROMFS_FSSPEC += $(PX4IO_FIRMWARE)~px4io.bin +endif + +################################################################################ +# No user-serviceable parts below +################################################################################ + +# +# Just the source files from the ROMFS spec, so that we can fail cleanly if they don't +# exist +# +ROMFS_SRCFILES = $(foreach spec,$(ROMFS_FSSPEC),$(firstword $(subst ~, ,$(spec)))) + +# +# Just the destination directories from the ROMFS spec +# +ROMFS_DIRS = $(sort $(dir $(foreach spec,$(ROMFS_FSSPEC),$(lastword $(subst ~, ,$(spec)))))) + + +# +# Intermediate products +# +ROMFS_IMG = $(BUILDROOT)/romfs.img +ROMFS_WORKDIR = $(BUILDROOT)/romfs + +# +# Convenience target for rebuilding the ROMFS header +# +all: $(ROMFS_HEADER) + +$(ROMFS_HEADER): $(ROMFS_IMG) $(dir $(ROMFS_HEADER)) + @echo Generating the ROMFS header... + @(cd $(dir $(ROMFS_IMG)) && xxd -i $(notdir $(ROMFS_IMG))) > $@ + +$(ROMFS_IMG): $(ROMFS_WORKDIR) + @echo Generating the ROMFS image... + @genromfs -f $@ -d $(ROMFS_WORKDIR) -V "NSHInitVol" + +$(ROMFS_WORKDIR): $(ROMFS_SRCFILES) + @echo Rebuilding the ROMFS work area... + @rm -rf $(ROMFS_WORKDIR) + @mkdir -p $(ROMFS_WORKDIR) + @for dir in $(ROMFS_DIRS) ; do mkdir -p $(ROMFS_WORKDIR)/$$dir; done + @for spec in $(ROMFS_FSSPEC) ; do \ + echo $$spec | sed -e 's%^.*~% %' ;\ + `echo "cp $$spec" | sed -e 's%~% $(ROMFS_WORKDIR)/%'` ;\ + done + +$(BUILDROOT): + @mkdir -p $(BUILDROOT) + +clean: + @rm -rf $(BUILDROOT) + +distclean: clean + @rm -f $(PX4IO_FIRMWARE) $(ROMFS_HEADER) + +.PHONY: all install clean distclean + +# +# Hacks and fixups +# +SYSTYPE = $(shell uname) + +ifeq ($(SYSTYPE),Darwin) +# PATH inherited by Eclipse may not include toolchain install location +export PATH := $(PATH):/usr/local/bin +endif + diff --git a/ROMFS/scripts/rc.PX4IO b/ROMFS/scripts/rc.PX4IO new file mode 100644 index 000000000..e2f4fca84 --- /dev/null +++ b/ROMFS/scripts/rc.PX4IO @@ -0,0 +1,74 @@ +#!nsh +# +# Flight startup script for PX4FMU with PX4IO carrier board. +# + +echo "[init] doing PX4IO startup..." + +# +# Start the ORB +# +uorb start + +# +# Start the sensors. +# +sh /etc/init.d/rc.sensors + +# +# Start MAVLink +# +mavlink -d /dev/ttyS0 -b 57600 & + +# +# Start the commander. +# +# XXX this should be '<command> start'. +# +commander & + +# +# Start the attitude estimator +# +# XXX this should be '<command> start'. +# +attitude_estimator_bm & +#position_estimator & + +# +# Configure PX4FMU for operation with PX4IO +# +# XXX arguments? +# +px4fmu start + +# +# Start the fixed-wing controller +# +# XXX this should be '<command> start'. +# +fixedwing_control & + +# +# Fire up the PX4IO interface. +# +px4io start + +# +# Start looking for a GPS. +# +# XXX this should not need to be backgrounded +# +gps -d /dev/ttyS3 -m all & + +# +# Start logging to microSD if we can +# +sh /etc/init.d/rc.logging + +# +# startup is done; we don't want the shell because we +# use the same UART for telemetry (dumb). +# +echo "[init] startup done, exiting." +exit diff --git a/ROMFS/scripts/rc.PX4IOAR b/ROMFS/scripts/rc.PX4IOAR new file mode 100644 index 000000000..d626ca213 --- /dev/null +++ b/ROMFS/scripts/rc.PX4IOAR @@ -0,0 +1,69 @@ +#!nsh +# +# Flight startup script for PX4FMU on PX4IOAR carrier board. +# + +echo "[init] doing PX4IOAR startup..." + +# +# Start the ORB +# +uorb start + +# +# Start the sensors. +# +sh /etc/init.d/rc.sensors + +# +# Start MAVLink +# +mavlink -d /dev/ttyS0 -b 57600 & + +# +# Start the commander. +# +# XXX this should be '<command> start'. +# +commander & + +# +# Start the attitude estimator +# +# XXX this should be '<command> start'. +# +attitude_estimator_bm & +#position_estimator & + +# +# Configure PX4FMU for operation with PX4IOAR +# +# XXX arguments? +# +px4fmu start + +# +# Fire up the AR.Drone controller. +# +# XXX this should be '<command> start'. +# +ardrone_control -d /dev/ttyS1 -m attitude & + +# +# Start looking for a GPS. +# +# XXX this should not need to be backgrounded +# +gps -d /dev/ttyS3 -m all & + +# +# Start logging to microSD if we can +# +sh /etc/init.d/rc.logging + +# +# startup is done; we don't want the shell because we +# use the same UART for telemetry (dumb). +# +echo "[init] startup done, exiting." +exit diff --git a/ROMFS/scripts/rc.jig b/ROMFS/scripts/rc.jig new file mode 100644 index 000000000..e2b5d8f30 --- /dev/null +++ b/ROMFS/scripts/rc.jig @@ -0,0 +1,10 @@ +#!nsh +# +# Test jig startup script +# + +echo "[testing] doing production test.." + +tests jig + +echo "[testing] testing done" diff --git a/ROMFS/scripts/rc.logging b/ROMFS/scripts/rc.logging new file mode 100644 index 000000000..cbc303dab --- /dev/null +++ b/ROMFS/scripts/rc.logging @@ -0,0 +1,10 @@ +#!nsh +# +# Initialise logging services. +# + +if [ -d /fs/microsd ] +then + # XXX this should be '<command> start'. + # sdlog & +fi diff --git a/ROMFS/scripts/rc.sensors b/ROMFS/scripts/rc.sensors new file mode 100644 index 000000000..7515c1947 --- /dev/null +++ b/ROMFS/scripts/rc.sensors @@ -0,0 +1,28 @@ +#!nsh +# +# Standard startup script for PX4FMU onboard sensor drivers. +# + +# +# Start sensor drivers here. +# + +#ms5611 start + +# +# Start the sensor collection task. +# +# XXX should be 'sensors start' +# +sensors & + +# +# Test sensor functionality +# +# XXX integrate with 'sensors start' ? +# +#if sensors quicktest +#then +# echo "[init] sensor initialisation FAILED." +# reboot +#fi diff --git a/ROMFS/scripts/rc.standalone b/ROMFS/scripts/rc.standalone new file mode 100644 index 000000000..72153ef18 --- /dev/null +++ b/ROMFS/scripts/rc.standalone @@ -0,0 +1,67 @@ +#!nsh +# +# Flight startup script for PX4FMU standalone configuration. +# + +echo "[init] doing standalone PX4FMU startup..." + +# +# Start the ORB +# +#uorb start + +# +# Start the sensors. +# +#sh /etc/init.d/rc.sensors + +# +# Start MAVLink +# +# mavlink -d /dev/ttyS0 -b 57600 & + +# +# Start the commander. +# +# XXX this should be 'commander start'. +# +#commander & + +# +# Start the attitude estimator +# +# XXX this should be '<command> start'. +# +#attitude_estimator_bm & +#position_estimator & + +# +# Start the fixed-wing controller. +# +# XXX should this be looking for configuration to decide +# whether the board is configured for fixed-wing use? +# +# XXX this should be 'fixedwing_control start'. +# +#fixedwing_control & + +# +# Configure FMU for standalone mode +# +# XXX arguments? +# +#px4fmu start + +# +# Start looking for a GPS. +# +# XXX this should not need to be backgrounded +# +#gps -d /dev/ttyS3 -m all & + +# +# Start logging to microSD if we can +# +sh /etc/init.d/rc.logging + +echo "[init] startup done" diff --git a/ROMFS/scripts/rcS b/ROMFS/scripts/rcS new file mode 100755 index 000000000..9b9a2fd61 --- /dev/null +++ b/ROMFS/scripts/rcS @@ -0,0 +1,120 @@ +#!nsh +# +# PX4FMU startup script. +# +# This script is responsible for: +# +# - mounting the microSD card (if present) +# - running the user startup script from the microSD card (if present) +# - detecting the configuration of the system and picking a suitable +# startup script to continue with +# +# Note: DO NOT add configuration-specific commands to this script; +# add them to the per-configuration scripts instead. +# + +# +# Default to auto-start mode. An init script on the microSD card +# can change this to prevent automatic startup of the flight script. +# +set MODE autostart +set USB_ALLOWED yes +set USB no + +# +# Try to mount the microSD card. +# +echo "[init] looking for microSD..." +if mount -t vfat /dev/mmcsd0 /fs/microsd +then + echo "[init] card mounted at /fs/microsd" +else + echo "[init] no microSD card found" +fi + +# +# Look for an init script on the microSD card. +# +# To prevent automatic startup in the current flight mode, +# the script should set MODE to some other value. +# +if [ -f /fs/microsd/etc/rc ] +then + echo "[init] reading /fs/microsd/etc/rc" + sh /fs/microsd/etc/rc +fi + +# +# Check for USB host +# +if [ $USB_ALLOWED == yes ] +then + if sercon + then + echo "[init] USB interface connected" + fi +fi + +# +# If we are still in flight mode, work out what airframe +# configuration we have and start up accordingly. +# +if [ $MODE != autostart ] +then + echo "[init] automatic startup cancelled by user script" +else + echo "[init] detecting attached hardware..." + + # + # Assume that we are PX4FMU in standalone mode + # + set BOARD PX4FMU + + # + # Are we attached to a PX4IOAR (AR.Drone carrier board)? + # + if boardinfo -t 7 + then + set BOARD PX4IOAR + if [ -f /etc/init.d/rc.PX4IOAR ] + then + echo "[init] reading /etc/init.d/rc.PX4IOAR" + sh /etc/init.d/rc.PX4IOAR + fi + else + echo "[init] PX4IOAR not detected" + fi + + # + # Are we attached to a PX4IO? + # + if boardinfo -t 6 + then + set BOARD PX4IO + if [ -f /etc/init.d/rc.PX4IO ] + then + echo "[init] reading /etc/init.d/rc.PX4IO" + sh /etc/init.d/rc.PX4IO + fi + else + echo "[init] PX4IO not detected" + fi + + # + # Looks like we are stand-alone + # + if [ $BOARD == PX4FMU ] + then + echo "[init] no expansion board detected" + if [ -f /etc/init.d/rc.standalone ] + then + echo "[init] reading /etc/init.d/rc.standalone" + sh /etc/init.d/rc.standalone + fi + fi + + # + # We may not reach here if the airframe-specific script exits the shell. + # + echo "[init] startup done." +fi |