@@ -31,11 +31,20 @@ set PARAM_FILE ""
3131set PARAM_BACKUP_FILE " "
3232set RC_INPUT_ARGS " "
3333set STORAGE_AVAILABLE no
34+ set STORAGE_CHECK yes
3435set SDCARD_EXT_PATH /fs/microsd/ext_autostart
3536set SDCARD_FORMAT no
3637set STARTUP_TUNE 1
3738set VEHICLE_TYPE none
3839
40+ # Fine-grained feature gates.
41+ set USE_HARDFAULT_LOG no
42+ set USE_EXTERNAL_AIRFRAMES no
43+ set USE_PARAM_BACKUPS no
44+ set USE_PARAM_IMPORT_DEBUG no
45+ set USE_TASK_WATCHDOG no
46+ set USE_ALT_UPDATE_DIRS no
47+
3948# Airframe parameter versioning
4049# Value set to 1 by default but can optionally be overridden in the airframe configuration startup script.
4150# Airframe maintainers can ensure a reset to the airframe defaults during an update by increasing by one.
@@ -48,53 +57,81 @@ set PARAM_DEFAULTS_VER 1
4857ver all
4958
5059#
51- # Try to mount the microSD card.
60+ # Optional early board init: rc.board_early
61+ # Can be used for setting env vars for rcS.
62+ #
63+ set BOARD_RC_EARLY ${R} etc/init.d/rc.board_early
64+ if [ -f $BOARD_RC_EARLY ]
65+ then
66+ . $BOARD_RC_EARLY
67+ fi
68+ unset BOARD_RC_EARLY
69+
70+ #
71+ # Try to mount/check storage (rc.board_early can disable this).
5272#
53- if [ -b " /dev/mmcsd0 " ]
73+ if [ $STORAGE_CHECK = yes ]
5474then
55- if mount -t vfat /dev/mmcsd0 /fs/microsd
75+ #
76+ # Try to mount the microSD card.
77+ #
78+ if [ -b " /dev/mmcsd0" ]
5679 then
57- if [ -f " / fs/microsd/.format " ]
80+ if mount -t vfat /dev/mmcsd0 / fs/microsd
5881 then
59- echo " INFO [init] format /dev/mmcsd0 requested (/fs/microsd/.format)"
60- set SDCARD_FORMAT yes
61- rm /fs/microsd/.format
62- umount /fs/microsd
82+ if [ -f " /fs/microsd/.format" ]
83+ then
84+ echo " INFO [init] format /dev/mmcsd0 requested (/fs/microsd/.format)"
85+ set SDCARD_FORMAT yes
86+ rm /fs/microsd/.format
87+ umount /fs/microsd
6388
64- else
65- set STORAGE_AVAILABLE yes
89+ else
90+ set STORAGE_AVAILABLE yes
91+ fi
6692 fi
67- fi
6893
69- if [ $STORAGE_AVAILABLE = no -o $SDCARD_FORMAT = yes ]
70- then
71- echo " INFO [init] formatting /dev/mmcsd0"
72- set STARTUP_TUNE 15 # tune 15 = SD_ERROR (overridden to SD_INIT if format + mount succeeds)
73-
74- if mkfatfs -F 32 /dev/mmcsd0
94+ if [ $STORAGE_AVAILABLE = no -o $SDCARD_FORMAT = yes ]
7595 then
76- echo " INFO [init] card formatted"
96+ echo " INFO [init] formatting /dev/mmcsd0"
97+ set STARTUP_TUNE 15 # tune 15 = SD_ERROR (overridden to SD_INIT if format + mount succeeds)
7798
78- if mount -t vfat /dev/mmcsd0 /fs/microsd
99+ if mkfatfs -F 32 /dev/mmcsd0
79100 then
80- set STORAGE_AVAILABLE yes
81- set STARTUP_TUNE 14 # tune 14 = SD_INIT
101+ echo " INFO [init] card formatted"
102+
103+ if mount -t vfat /dev/mmcsd0 /fs/microsd
104+ then
105+ set STORAGE_AVAILABLE yes
106+ set STARTUP_TUNE 14 # tune 14 = SD_INIT
107+ else
108+ echo " ERROR [init] card mount failed"
109+ fi
82110 else
83- echo " ERROR [init] card mount failed"
111+ echo " ERROR [init] format failed"
84112 fi
85- else
86- echo " ERROR [init] format failed"
87113 fi
88- fi
89- else
90- # Is there a device mounted for storage
91- if mft query -q -k MTD -s MTD_PARAMETERS -v /mnt/microsd
92- then
93- set STORAGE_AVAILABLE yes
114+ else
115+ # Is there a device mounted for storage
116+ if mft query -q -k MTD -s MTD_PARAMETERS -v /mnt/microsd
117+ then
118+ set STORAGE_AVAILABLE yes
119+ fi
94120 fi
95121fi
96122
97123if [ $STORAGE_AVAILABLE = yes ]
124+ then
125+ set USE_HARDFAULT_LOG yes
126+ set USE_EXTERNAL_AIRFRAMES yes
127+ set USE_PARAM_BACKUPS yes
128+ set USE_PARAM_IMPORT_DEBUG yes
129+ set USE_ALT_UPDATE_DIRS yes
130+ set PARAM_FILE /fs/microsd/params
131+ set PARAM_BACKUP_FILE " /fs/microsd/parameters_backup.bson"
132+ fi
133+
134+ if [ $USE_HARDFAULT_LOG = yes ]
98135then
99136 if hardfault_log check
100137 then
@@ -104,17 +141,22 @@ then
104141 hardfault_log reset
105142 fi
106143 fi
144+ fi
107145
146+ if [ $USE_TASK_WATCHDOG = yes ]
147+ then
148+ task_watchdog start
149+ fi
150+
151+ if [ $USE_ALT_UPDATE_DIRS = yes ]
152+ then
108153 # Check for an update of the ext_autostart folder, and replace the old one with it
109154 if [ -e /fs/microsd/ext_autostart_new ]
110155 then
111156 echo " Updating external autostart files"
112157 rm -r $SDCARD_EXT_PATH
113158 mv /fs/microsd/ext_autostart_new $SDCARD_EXT_PATH
114159 fi
115-
116- set PARAM_FILE /fs/microsd/params
117- set PARAM_BACKUP_FILE " /fs/microsd/parameters_backup.bson"
118160fi
119161
120162#
@@ -155,8 +197,11 @@ else
155197
156198 if [ -d " /fs/microsd" ]
157199 then
158- # try to make a backup copy
159- cp $PARAM_FILE /fs/microsd/param_import_fail.bson
200+ if [ $USE_PARAM_IMPORT_DEBUG = yes ]
201+ then
202+ # save copy of the failed param file for debugging
203+ cp $PARAM_FILE /fs/microsd/param_import_fail.bson
204+ fi
160205
161206 # try importing from backup file
162207 if [ -f $PARAM_BACKUP_FILE ]
@@ -174,11 +219,14 @@ else
174219
175220 param status
176221
177- dmesg >> /fs/microsd/param_import_fail.txt &
222+ if [ $USE_PARAM_IMPORT_DEBUG = yes ]
223+ then
224+ dmesg >> /fs/microsd/param_import_fail.txt &
225+ fi
178226 fi
179227 fi
180228
181- if [ $STORAGE_AVAILABLE = yes ]
229+ if [ $USE_PARAM_BACKUPS = yes ]
182230 then
183231 param select-backup $PARAM_BACKUP_FILE
184232 fi
@@ -234,12 +282,12 @@ else
234282
235283 if [ ${VEHICLE_TYPE} = none ]
236284 then
237- # Run external airframe script on SD card
238- if [ $STORAGE_AVAILABLE = yes ]
285+ # Run external airframe script on SD card or EEPROM-backed storage
286+ if [ $USE_EXTERNAL_AIRFRAMES = yes ]
239287 then
240288 . ${R} etc/init.d/rc.autostart_ext
241289 else
242- echo " ERROR [init] SD not mounted , skipping external airframe "
290+ echo " ERROR [init] no external airframe storage , skipping"
243291 fi
244292 fi
245293
@@ -679,9 +727,16 @@ unset PARAM_BACKUP_FILE
679727unset PARAM_DEFAULTS_VER
680728unset RC_INPUT_ARGS
681729unset STORAGE_AVAILABLE
730+ unset STORAGE_CHECK
682731unset SDCARD_EXT_PATH
683732unset SDCARD_FORMAT
684733unset STARTUP_TUNE
734+ unset USE_HARDFAULT_LOG
735+ unset USE_EXTERNAL_AIRFRAMES
736+ unset USE_PARAM_BACKUPS
737+ unset USE_PARAM_IMPORT_DEBUG
738+ unset USE_TASK_WATCHDOG
739+ unset USE_ALT_UPDATE_DIRS
685740unset VEHICLE_TYPE
686741
687742#
0 commit comments