aboutsummaryrefslogtreecommitdiff
path: root/ROMFS
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2012-08-04 15:12:36 -0700
committerpx4dev <px4@purgatory.org>2012-08-04 15:12:36 -0700
commit8a365179eafdf3aea98e60ab9f5882b200d4c759 (patch)
tree4f38d6d4cd80bd0b6e22e2bb534c3f117ce44e56 /ROMFS
downloadpx4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.tar.gz
px4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.tar.bz2
px4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.zip
Fresh import of the PX4 firmware sources.
Diffstat (limited to 'ROMFS')
-rw-r--r--ROMFS/.gitignore1
-rw-r--r--ROMFS/Makefile102
-rw-r--r--ROMFS/scripts/rc.PX4IO74
-rw-r--r--ROMFS/scripts/rc.PX4IOAR69
-rw-r--r--ROMFS/scripts/rc.jig10
-rw-r--r--ROMFS/scripts/rc.logging10
-rw-r--r--ROMFS/scripts/rc.sensors28
-rw-r--r--ROMFS/scripts/rc.standalone67
-rwxr-xr-xROMFS/scripts/rcS120
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