Skip to content

Commit bbd344e

Browse files
committed
rcS: fine-grained storage settings
1 parent 0ffa4e7 commit bbd344e

File tree

4 files changed

+115
-43
lines changed

4 files changed

+115
-43
lines changed

ROMFS/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ endif()
193193
# board custom init files
194194
set(OPTIONAL_BOARD_RC)
195195
list(APPEND OPTIONAL_BOARD_RC
196+
rc.board_early
196197
rc.board_defaults
197198
rc.board_sensors
198199
rc.board_extras

ROMFS/px4fmu_common/init.d/rcS

Lines changed: 95 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,20 @@ set PARAM_FILE ""
3131
set PARAM_BACKUP_FILE ""
3232
set RC_INPUT_ARGS ""
3333
set STORAGE_AVAILABLE no
34+
set STORAGE_CHECK yes
3435
set SDCARD_EXT_PATH /fs/microsd/ext_autostart
3536
set SDCARD_FORMAT no
3637
set STARTUP_TUNE 1
3738
set 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
4857
ver 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 ]
5474
then
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
95121
fi
96122

97123
if [ $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 ]
98135
then
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"
118160
fi
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
679727
unset PARAM_DEFAULTS_VER
680728
unset RC_INPUT_ARGS
681729
unset STORAGE_AVAILABLE
730+
unset STORAGE_CHECK
682731
unset SDCARD_EXT_PATH
683732
unset SDCARD_FORMAT
684733
unset 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
685740
unset VEHICLE_TYPE
686741

687742
#

boards/auterion/fmu-v6s/init/rc.board_defaults

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,5 @@ nshterm /dev/ttyS3 &
3434
# Start the time_persistor to cyclically store the RTC in FRAM
3535
time_persistor start
3636

37-
# Start the task_watchdog as we do not have the logger watchdog
38-
task_watchdog start
39-
4037
# Start the ESC telemetry
4138
dshot telemetry -d /dev/ttyS5 -x
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/sh
2+
#
3+
# Board early init.
4+
#
5+
# On FRAM boards STORAGE_AVAILABLE=yes will set the USE_* flags. Additional
6+
# enable required for task watchdog as this is not a generally used feature.
7+
# On EEPROM boards: Only airframes and params are needed.
8+
#
9+
10+
if mft query -q -k MTD -s MTD_PARAMETERS -v /mnt/microsd
11+
then
12+
# Start the task_watchdog as we do not have the logger watchdog
13+
set USE_TASK_WATCHDOG yes
14+
else
15+
set PARAM_FILE /fs/microsd/params
16+
set STORAGE_CHECK no
17+
set USE_EXTERNAL_AIRFRAMES yes
18+
set USE_ALT_UPDATE_DIRS yes
19+
fi

0 commit comments

Comments
 (0)