Before we start I want to share the issue that I found following the default NuttX compilation approach (it means I forgot to update bootloader, gnss, etc).

I did the default NuttX configure/make/flash/serial console, but got this error message when NuttX was starting:

cxd56_farapiinitialize: Mismatched version: loader(17646) != Self(20585)
cxd56_farapiinitialize: Please update loader and gnssfw firmwares!!

It was happening because I missed an important step: update the board bootloader, dnnrt, gnns, etc.

So, you can void this issues that I was facing, just doing it:

Download the binaries zip file from here:

https://developer.sony.com/file/download/download-spresense-firmware-v2-4-000

… and save it inside your nuttxspace/nuttx folder/directory.

Open the Linux terminal and enter inside nuttxspace/nuttx:

$ cd ~/nuttxspace/nuttx

Extract the file:

$ unzip spresense-binaries-v2.4.0.zip

Flash all the files:

$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 dnnrt-mp.espk
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install binaries/dnnrt-mp.espk
|0%-----------------------------50%------------------------------100%|
######################################################################

109808 bytes loaded.
Package validation is OK.
Saving package to "dnnrt-mp"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot


$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 gnssfw.espk 
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install binaries/gnssfw.espk
|0%-----------------------------50%------------------------------100%|
######################################################################

454512 bytes loaded.
Package validation is OK.
Saving package to "gnssfw"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot


$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 loader.espk 
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install binaries/loader.espk
|0%-----------------------------50%------------------------------100%|
######################################################################

129968 bytes loaded.
Package validation is OK.
Saving package to "loader"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot


$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 sysutil.spk 
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install binaries/sysutil.spk
|0%-----------------------------50%------------------------------100%|
######################################################################

174080 bytes loaded.
Package validation is OK.
Saving package to "sysutil"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot

Now you can configure and compile NuttX for Spresense:

$ ./tools/configure.sh spresense:nsh
$ make -j

It will create the file nuttx.spk then flash it this way:

$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 nuttx.spk 
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install nuttx.spk
|0%-----------------------------50%------------------------------100%|
######################################################################

97680 bytes loaded.
Package validation is OK.
Saving package to "nuttx"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot

Now just run minicom (or your preferred serial console terminal) and you will get:

NuttShell (NSH) NuttX-12.0.0
nsh> uname -a
NuttX 12.0.0 c9b917bcee Mar 24 2023 17:52:28 arm spresense
nsh>