Compile issue: Failure on Linking (custom hardware adaptation)

Hello all.

I was able to get a lot of answers so far by reading the forums and searching in google.
However this time I am stuck and cannot find a solution myself.

I am trying to port to stm32f407vet6 (also known as stm32F4_ve) Link
It’s a stm32F4Disc alike board, with a W25Q16 memory chip already on board.
My wiring is heavily based on FMU_v3_revC schematics found on GitHub repository.
I’ve cloned the px4fmu_v2 folder and edited accordingly. I am planning on using stm32F103 BluePill board as the px4io_v2 fail-safe co-processor as well as retaining as many default pin assignments as possible on the stm32F4.

Unlike F427/F429, F407 only has SPI1, SPI2, and SPI3. There is no SPI4.
Nor does F407VET6 have UART7/UART8.
In FMU_v3_revC the memory chip fram FM25V01(128Kbit) is on SPI2, but on stm32F4_ve it is w25q16(16Kbit) and it comes wired to SPI1/SPI3 pins PB3/4/5.
Last but not least, stm32f407vet6 comes with 512K (Unlike fmu_v2 1024K/2048K and fmu_v3 2048K)

Files I have altered so far:
Firmware/src/drivers/boards/px4-stm32f407vet6-black/board_config.h
Firmware/src/drivers/boards/px4-stm32f407vet6-black/CMakeLists.txt
Firmware/src/drivers/boards/px4-stm32f407vet6-black/init.c
Firmware/src/drivers/boards/px4-stm32f407vet6-black/spi.c
Firmware/platforms/nuttx/nuttx-configs/px4-stm32f407vet6-black/scripts/ld.script
Firmware/platforms/nuttx/nuttx-configs/px4-stm32f407vet6-black/include/board.h
Firmware/cmake/configs/nuttx_px4-stm32f407vet6-black_default.cmake

I have installed the toolchain with ‘ubuntu_sim_nuttx.sh’ no more than 10days ago. Link
Currently Running: Ubuntu 16.04 LTS 64-Bit

upon invoking “make px4-stm32f407vet6-black_default” I get the following output: Attached Below
I suspect it is a linking issue, but I am not sure and therefore stuck.
It fails at “[349/351] Linking CXX executable px4-stm32f407vet6-black.elf”

Does anyone know what I am doing wrong?

Thanks in advance.

rossos@abcxyz:~/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware$ make px4-stm32f407vet6-black_default
– PX4 VERSION: v1.8.0-1439-g09563c9
– CONFIG: nuttx_px4-stm32f407vet6-black_default
– Build Type: MinSizeRel
– The ASM compiler identification is GNU
– Found assembler: /home/rossos/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc
– Found PythonInterp: /usr/bin/python (found version “2.7.12”)
– Found PY_jinja2: /usr/lib/python2.7/dist-packages/jinja2
– C compiler: arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
– C++ compiler: arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
– PX4 ECL: Very lightweight Estimation & Control Library v0.9.0-590-g2354c30
– Building and including px4io-v2
– NuttX: px4-stm32f407vet6-black nsh cortex-m4
– ROMFS: px4fmu_common
– Configuring done
– Generating done
– Build files have been written to: /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default
ninja: Entering directory /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default' [7/351] git submodule platforms/nuttx/NuttX/nuttx [8/351] git submodule src/lib/ecl [10/351] git submodule src/drivers/gps/devices [11/351] Building px4io-v2 ninja: Entering directory /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4io-v2_default’
ninja: no work to do.
[13/351] git submodule platforms/nuttx/NuttX/apps
[349/351] Linking CXX executable px4-stm32f407vet6-black.elf
FAILED: : && /home/rossos/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-g++ -fno-common -ffunction-sections -fdata-sections -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fno-common -ffunction-sections -fdata-sections -g -fno-exceptions -fno-rtti -std=gnu++11 -fno-threadsafe-statics -DCONFIG_WCHAR_BUILTIN -D__CUSTOM_FILE_IO__ -fcheck-new -Wall -Wextra -Werror -Warray-bounds -Wdisabled-optimization -Wdouble-promotion -Wfatal-errors -Wfloat-equal -Wformat-security -Winit-self -Wlogical-op -Wmissing-declarations -Wpointer-arith -Wshadow -Wuninitialized -Wunknown-pragmas -Wunused-variable -Wno-implicit-fallthrough -Wno-missing-field-initializers -Wno-missing-include-dirs -Wno-unused-parameter -Wunused-but-set-variable -Wformat=1 -Wno-overloaded-virtual -Wreorder -Wno-format-truncation -fvisibility=hidden -include visibility.h -fno-strict-aliasing -fomit-frame-pointer -fno-math-errno -funsafe-math-optimizations -ffunction-sections -fdata-sections -fno-strength-reduce -fno-builtin-printf -Os -DNDEBUG -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nodefaultlibs -nostdlib -Wl,–warn-common,–gc-sections platforms/nuttx/CMakeFiles/px4-stm32f407vet6-black.elf.dir///src/platforms/empty.c.obj -o px4-stm32f407vet6-black.elf -L/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/external/Install/lib -nodefaultlibs -nostdlib -fno-exceptions -fno-rtti -Wl,–script=/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/NuttX/nuttx/configs/px4-stm32f407vet6-black/scripts/ld.script -Wl,-Map=nuttx_px4-stm32f407vet6-black_default.map -Wl,–warn-common -Wl,–gc-sections -Wl,–start-group NuttX/apps/libapps.a NuttX/nuttx/arch/arm/src/libarch.a NuttX/nuttx/binfmt/libbinfmt.a NuttX/nuttx/libc/libc.a NuttX/nuttx/configs/libconfigs.a NuttX/nuttx/libxx/libcxx.a NuttX/nuttx/drivers/libdrivers.a NuttX/nuttx/fs/libfs.a NuttX/nuttx/mm/libmm.a NuttX/nuttx/sched/libsched.a -Wl,–end-group -lm src/modules/uORB/libmodules__uORB.a src/drivers/barometer/bmp280/libdrivers__bmp280.a src/drivers/gps/libdrivers__gps.a src/drivers/imu/l3gd20/libdrivers__l3gd20.a src/drivers/imu/mpu9250/libdrivers__mpu9250.a src/drivers/magnetometer/hmc5883/libdrivers__hmc5883.a src/drivers/mkblctrl/libdrivers__mkblctrl.a src/drivers/pwm_input/libdrivers__pwm_input.a src/drivers/px4flow/libdrivers__px4flow.a src/drivers/px4fmu/libdrivers__px4fmu.a src/drivers/px4io/libdrivers__px4io.a src/drivers/rgbled/libdrivers__rgbled.a src/drivers/stm32/adc/libdrivers__adc.a src/drivers/stm32/tone_alarm/libdrivers__tone_alarm.a src/drivers/vmount/libdrivers__vmount.a src/modules/sensors/libmodules__sensors.a src/modules/uORB/libmodules__uORB.a ROMFS/libromfs.a src/lib/pwm_limit/libpwm_limit.a src/lib/mixer/libmixer.a src/lib/led/libled.a src/lib/circuit_breaker/libcircuit_breaker.a src/lib/tunes/libtunes.a src/lib/ecl/geo/libecl_geo.a src/platforms/common/libplatforms__common.a platforms/nuttx/src/px4_layer/libpx4_layer.a src/lib/airspeed/libairspeed.a src/lib/battery/libbattery.a src/lib/conversion/libconversion.a src/lib/ecl/validation/libecl_validation.a src/lib/mathlib/libmathlib.a NuttX/nuttx/arch/arm/src/libarch.a src/drivers/boards/px4-stm32f407vet6-black/libdrivers_board.a src/drivers/stm32/libdrivers_arch.a src/drivers/boards/common/libdrivers_boards_common.a src/drivers/boards/common/stm32/libdrivers_boards_common_arch.a src/modules/systemlib/libsystemlib.a src/lib/drivers/device/libdrivers__device.a src/lib/drivers/led/libdrivers__led.a src/lib/parameters/libparameters.a src/lib/cdev/libcdev.a src/lib/parameters/flashparams/libflashparams.a NuttX/nuttx/arch/arm/src/libarch.a src/drivers/boards/px4-stm32f407vet6-black/libdrivers_board.a src/drivers/stm32/libdrivers_arch.a src/drivers/boards/common/libdrivers_boards_common.a src/drivers/boards/common/stm32/libdrivers_boards_common_arch.a src/modules/systemlib/libsystemlib.a src/lib/drivers/device/libdrivers__device.a src/lib/drivers/led/libdrivers__led.a src/lib/parameters/libparameters.a src/lib/cdev/libcdev.a src/lib/parameters/flashparams/libflashparams.a NuttX/apps/libapps.a src/lib/perf/libperf.a src/lib/parameters/tinybson/libtinybson.a NuttX/nuttx/libxx/libcxx.a NuttX/nuttx/libc/libc.a NuttX/nuttx/drivers/libdrivers.a NuttX/nuttx/fs/libfs.a NuttX/nuttx/mm/libmm.a NuttX/nuttx/sched/libsched.a -lm -lgcc msg/libuorb_msgs.a && :
src/modules/sensors/libmodules__sensors.a(sensors.cpp.obj): In function Sensors::~Sensors()': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/sensors.cpp:139: undefined reference to DriverFramework::DevHandle::~DevHandle()’
src/modules/sensors/libmodules__sensors.a(sensors.cpp.obj): In function Sensors::Sensors(bool)': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/sensors.cpp:262: undefined reference to vtable for DriverFramework::DevHandle’
src/modules/sensors/libmodules__sensors.a(sensors.cpp.obj): In function Sensors::adc_init()': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/sensors.cpp:288: undefined reference to DriverFramework::DevMgr::getHandle(char const*, DriverFramework::DevHandle&)’
src/modules/sensors/libmodules__sensors.a(sensors.cpp.obj): In function Sensors::adc_poll()': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/sensors.cpp:429: undefined reference to DriverFramework::DevHandle::read(void*, unsigned int)’
src/modules/sensors/libmodules__sensors.a(voted_sensors_update.cpp.obj): In function sensors::VotedSensorsUpdate::apply_mag_calibration(DriverFramework::DevHandle&, mag_calibration_s const*, int)': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:1060: undefined reference to DriverFramework::DevHandle::ioctl(unsigned long, unsigned long)’
src/modules/sensors/libmodules__sensors.a(voted_sensors_update.cpp.obj): In function sensors::VotedSensorsUpdate::parameters_update()': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:238: undefined reference to DriverFramework::DevMgr::getHandle(char const*, DriverFramework::DevHandle&)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:237: undefined reference to DriverFramework::DevHandle::~DevHandle()' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:326: undefined reference to DriverFramework::DevMgr::getHandle(char const*, DriverFramework::DevHandle&)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:325: undefined reference to DriverFramework::DevHandle::~DevHandle()' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:400: undefined reference to vtable for DriverFramework::DevHandle’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:432: undefined reference to DriverFramework::DevMgr::getHandle(char const*, DriverFramework::DevHandle&)' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:439: undefined reference to DriverFramework::DevHandle::ioctl(unsigned long, unsigned long)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:445: undefined reference to DriverFramework::DevMgr::releaseHandle(DriverFramework::DevHandle&)' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:426: undefined reference to DriverFramework::DevHandle::~DevHandle()’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:244: undefined reference to DriverFramework::DevHandle::ioctl(unsigned long, unsigned long)' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:1028: undefined reference to DriverFramework::DevHandle::ioctl(unsigned long, unsigned long)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:248: undefined reference to vtable for DriverFramework::DevHandle' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:332: undefined reference to DriverFramework::DevHandle::ioctl(unsigned long, unsigned long)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:1042: undefined reference to DriverFramework::DevHandle::ioctl(unsigned long, unsigned long)' src/lib/parameters/libparameters.a(parameters.cpp.obj): In function param_export’:
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/lib/parameters/parameters.cpp:1030: undefined reference to px4_shutdown_lock' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/lib/parameters/parameters.cpp:1128: undefined reference to px4_shutdown_unlock’
NuttX/nuttx/arch/arm/src/libarch.a(stm32_spi.o):(.rodata.g_sp2iops+0x4): undefined reference to stm32_spi2select' NuttX/nuttx/arch/arm/src/libarch.a(stm32_spi.o):(.rodata.g_sp2iops+0x14): undefined reference to stm32_spi2status’
NuttX/nuttx/arch/arm/src/libarch.a(stm32_spi.o):(.rodata.g_sp4iops+0x4): undefined reference to stm32_spi4select' NuttX/nuttx/arch/arm/src/libarch.a(stm32_spi.o):(.rodata.g_sp4iops+0x14): undefined reference to stm32_spi4status’
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Makefile:176: recipe for target ‘px4-stm32f407vet6-black_default’ failed
make: *** [px4-stm32f407vet6-black_default] Error 1

Can you check the config file: cmake/configs/nuttx_px4-stm32f407vet6-black_default.cmake and compare it to cmake/configs/nuttx_px4fmu-v2_default.cmake, or post it here?

I have originally taken the cmake/configs/nuttx_px4fmu-v2_default.cmake file and edited it into cmake/configs/nuttx_px4-stm32f407vet6-black_default.cmake

I’ve uploaded the file to GitHub here:
https://github.com/RossosHEX/PX4/blob/master/Firmware/cmake/configs/nuttx_px4-stm32f407vet6-black_default.cmake

Right ok, and you have commented out many of the modules. Therefore, I would suggest that you search for the functions which are marked undefined and add the folders/modules in which they are defined. Sometimes it might be in src/lib.

I do not quite understand your suggestion.
As I have cloned the github repository locally and making/editing files locally in the said cloned location, it was my assumption that all the folders/modules are present.
Are you implying that I should delete the physical folders in src/lib which I have commented out in the cmake file?

PS. I have uploaded all the files I have created/edited in my GitHub repository

When I’m diffing your config file versus nuttx_px4fmu-v2_default.cmake I can see that you commented out a couple of the modules. To resolve the linking errors I would suggest to add all of them back in and see if that fixes it and then comment them out again one by one to see what causes which linker error.

Ok I understand now what you mean.

My reasoning for commenting out a lot of modules was for two reasons:

  1. Because I thought the less things there are to compile the better the chances would be for it compile successfully.
  2. The board I want to run this on has only 512KB of flash memory on the chip.

I’ll take it from the top, I’ll restore the cmake file to the fmu_v2 state, and edit the board declaration in ls.script back to 2048kb.

Thanks for your input so far, much appreciated.
I’ll get back to you with the results as soon as get something.

I have tried messing with the enabling and disabling modules in the *.cmake file
but nothing good came out of it.
I still get linking issues.

[details=make px4-stm32f407vet6-black_default]
$ make px4-stm32f407vet6-black_default
– PX4 VERSION: v1.8.0-1545-gcc64661
– CONFIG: nuttx_px4-stm32f407vet6-black_default
– Build Type: MinSizeRel
– The ASM compiler identification is GNU
– Found assembler: /home/rossos/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc
– Found PythonInterp: /usr/bin/python (found version “2.7.12”)
– Found PY_jinja2: /usr/lib/python2.7/dist-packages/jinja2
– C compiler: arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
– C++ compiler: arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
– PX4 ECL: Very lightweight Estimation & Control Library v0.9.0-603-g10a0fef
– Building and including px4io-v2
– NuttX: px4-stm32f407vet6-black nsh cortex-m4
– ROMFS: px4fmu_common
– Configuring done
– Generating done
– Build files have been written to: /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default
ninja: Entering directory /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default' [7/345] git submodule platforms/nuttx/NuttX/nuttx [8/345] git submodule src/lib/ecl [10/345] git submodule src/drivers/gps/devices [11/345] Building px4io-v2 ninja: Entering directory/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4io-v2_default’
ninja: no work to do.
[13/345] git submodule platforms/nuttx/NuttX/apps
[343/345] Linking CXX executable px4-stm32f407vet6-black.elf
FAILED: : && /home/rossos/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-g++ -fno-common -ffunction-sections -fdata-sections -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fno-common -ffunction-sections -fdata-sections -g -fno-exceptions -fno-rtti -std=gnu++11 -fno-threadsafe-statics -DCONFIG_WCHAR_BUILTIN -D__CUSTOM_FILE_IO__ -fcheck-new -Wall -Wextra -Werror -Warray-bounds -Wdisabled-optimization -Wdouble-promotion -Wfatal-errors -Wfloat-equal -Wformat-security -Winit-self -Wlogical-op -Wmissing-declarations -Wpointer-arith -Wshadow -Wuninitialized -Wunknown-pragmas -Wunused-variable -Wno-implicit-fallthrough -Wno-missing-field-initializers -Wno-missing-include-dirs -Wno-unused-parameter -Wunused-but-set-variable -Wformat=1 -Wno-overloaded-virtual -Wreorder -Wno-format-truncation -fvisibility=hidden -include visibility.h -fno-strict-aliasing -fomit-frame-pointer -fno-math-errno -funsafe-math-optimizations -ffunction-sections -fdata-sections -fno-strength-reduce -fno-builtin-printf -Os -DNDEBUG -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nodefaultlibs -nostdlib -Wl,–warn-common,–gc-sections platforms/nuttx/CMakeFiles/px4-stm32f407vet6-black.elf.dir///src/platforms/empty.c.obj -o px4-stm32f407vet6-black.elf -L/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/external/Install/lib -nodefaultlibs -nostdlib -fno-exceptions -fno-rtti -Wl,–script=/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/NuttX/nuttx/configs/px4-stm32f407vet6-black/scripts/ld.script -Wl,-Map=nuttx_px4-stm32f407vet6-black_default.map -Wl,–warn-common -Wl,–gc-sections -Wl,–start-group NuttX/apps/libapps.a NuttX/nuttx/arch/arm/src/libarch.a NuttX/nuttx/binfmt/libbinfmt.a NuttX/nuttx/libc/libc.a NuttX/nuttx/configs/libconfigs.a NuttX/nuttx/libxx/libcxx.a NuttX/nuttx/drivers/libdrivers.a NuttX/nuttx/fs/libfs.a NuttX/nuttx/mm/libmm.a NuttX/nuttx/sched/libsched.a -Wl,–end-group -lm src/modules/uORB/libmodules__uORB.a src/drivers/barometer/bmp280/libdrivers__bmp280.a src/drivers/gps/libdrivers__gps.a src/drivers/imu/l3gd20/libdrivers__l3gd20.a src/drivers/imu/mpu9250/libdrivers__mpu9250.a src/drivers/magnetometer/hmc5883/libdrivers__hmc5883.a src/drivers/mkblctrl/libdrivers__mkblctrl.a src/drivers/pwm_input/libdrivers__pwm_input.a src/drivers/px4flow/libdrivers__px4flow.a src/drivers/px4fmu/libdrivers__px4fmu.a src/drivers/px4io/libdrivers__px4io.a src/drivers/stm32/adc/libdrivers__adc.a src/drivers/stm32/tone_alarm/libdrivers__tone_alarm.a src/drivers/vmount/libdrivers__vmount.a src/modules/sensors/libmodules__sensors.a src/modules/uORB/libmodules__uORB.a ROMFS/libromfs.a src/lib/pwm_limit/libpwm_limit.a src/lib/mixer/libmixer.a src/lib/circuit_breaker/libcircuit_breaker.a src/lib/tunes/libtunes.a src/lib/ecl/geo/libecl_geo.a src/platforms/common/libplatforms__common.a platforms/nuttx/src/px4_layer/libpx4_layer.a src/lib/airspeed/libairspeed.a src/lib/battery/libbattery.a src/lib/conversion/libconversion.a src/lib/ecl/validation/libecl_validation.a src/lib/mathlib/libmathlib.a NuttX/nuttx/arch/arm/src/libarch.a src/drivers/boards/px4-stm32f407vet6-black/libdrivers_board.a src/drivers/stm32/libdrivers_arch.a src/drivers/boards/common/libdrivers_boards_common.a src/drivers/boards/common/stm32/libdrivers_boards_common_arch.a src/modules/systemlib/libsystemlib.a src/lib/drivers/device/libdrivers__device.a src/lib/drivers/led/libdrivers__led.a src/lib/parameters/libparameters.a src/lib/cdev/libcdev.a src/lib/parameters/flashparams/libflashparams.a NuttX/nuttx/arch/arm/src/libarch.a src/drivers/boards/px4-stm32f407vet6-black/libdrivers_board.a src/drivers/stm32/libdrivers_arch.a src/drivers/boards/common/libdrivers_boards_common.a src/drivers/boards/common/stm32/libdrivers_boards_common_arch.a src/modules/systemlib/libsystemlib.a src/lib/drivers/device/libdrivers__device.a src/lib/drivers/led/libdrivers__led.a src/lib/parameters/libparameters.a src/lib/cdev/libcdev.a src/lib/parameters/flashparams/libflashparams.a NuttX/apps/libapps.a src/lib/perf/libperf.a src/lib/parameters/tinybson/libtinybson.a NuttX/nuttx/libxx/libcxx.a NuttX/nuttx/libc/libc.a NuttX/nuttx/drivers/libdrivers.a NuttX/nuttx/fs/libfs.a NuttX/nuttx/mm/libmm.a NuttX/nuttx/sched/libsched.a -lm -lgcc msg/libuorb_msgs.a && :
src/modules/sensors/libmodules__sensors.a(sensors.cpp.obj): In function Sensors::~Sensors()': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/sensors.cpp:139: undefined reference toDriverFramework::DevHandle::~DevHandle()’
src/modules/sensors/libmodules__sensors.a(sensors.cpp.obj): In function Sensors::Sensors(bool)': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/sensors.cpp:262: undefined reference tovtable for DriverFramework::DevHandle’
src/modules/sensors/libmodules__sensors.a(sensors.cpp.obj): In function Sensors::adc_init()': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/sensors.cpp:288: undefined reference toDriverFramework::DevMgr::getHandle(char const*, DriverFramework::DevHandle&)’
src/modules/sensors/libmodules__sensors.a(sensors.cpp.obj): In function Sensors::adc_poll()': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/sensors.cpp:429: undefined reference toDriverFramework::DevHandle::read(void*, unsigned int)’
src/modules/sensors/libmodules__sensors.a(voted_sensors_update.cpp.obj): In function sensors::VotedSensorsUpdate::apply_mag_calibration(DriverFramework::DevHandle&, mag_calibration_s const*, int)': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:1060: undefined reference toDriverFramework::DevHandle::ioctl(unsigned long, unsigned long)’
src/modules/sensors/libmodules__sensors.a(voted_sensors_update.cpp.obj): In function sensors::VotedSensorsUpdate::parameters_update()': /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:238: undefined reference toDriverFramework::DevMgr::getHandle(char const*, DriverFramework::DevHandle&)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:237: undefined reference to DriverFramework::DevHandle::~DevHandle()' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:326: undefined reference toDriverFramework::DevMgr::getHandle(char const*, DriverFramework::DevHandle&)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:325: undefined reference to DriverFramework::DevHandle::~DevHandle()' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:400: undefined reference tovtable for DriverFramework::DevHandle’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:432: undefined reference to DriverFramework::DevMgr::getHandle(char const*, DriverFramework::DevHandle&)' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:439: undefined reference toDriverFramework::DevHandle::ioctl(unsigned long, unsigned long)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:445: undefined reference to DriverFramework::DevMgr::releaseHandle(DriverFramework::DevHandle&)' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:426: undefined reference toDriverFramework::DevHandle::~DevHandle()’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:244: undefined reference to DriverFramework::DevHandle::ioctl(unsigned long, unsigned long)' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:1028: undefined reference toDriverFramework::DevHandle::ioctl(unsigned long, unsigned long)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:248: undefined reference to vtable for DriverFramework::DevHandle' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/modules/sensors/voted_sensors_update.cpp:332: undefined reference toDriverFramework::DevHandle::ioctl(unsigned long, unsigned long)’
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/modules/sensors/voted_sensors_update.cpp:1042: undefined reference to DriverFramework::DevHandle::ioctl(unsigned long, unsigned long)' src/lib/parameters/libparameters.a(parameters.cpp.obj): In functionparam_export’:
/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/…/…/src/lib/parameters/parameters.cpp:1030: undefined reference to px4_shutdown_lock' /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f407vet6-black_default/../../src/lib/parameters/parameters.cpp:1128: undefined reference topx4_shutdown_unlock’
NuttX/nuttx/arch/arm/src/libarch.a(stm32_spi.o):(.rodata.g_sp2iops+0x4): undefined reference to stm32_spi2select' NuttX/nuttx/arch/arm/src/libarch.a(stm32_spi.o):(.rodata.g_sp2iops+0x14): undefined reference tostm32_spi2status’
NuttX/nuttx/arch/arm/src/libarch.a(stm32_spi.o):(.rodata.g_sp4iops+0x4): undefined reference to stm32_spi4select' NuttX/nuttx/arch/arm/src/libarch.a(stm32_spi.o):(.rodata.g_sp4iops+0x14): undefined reference tostm32_spi4status’
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Makefile:176: recipe for target ‘px4-stm32f407vet6-black_default’ failed
make: *** [px4-stm32f407vet6-black_default] Error 1
[/details][/details]

Furthermore I tried re-making all the config files based on stm32F4Discovery files
Results are even more depressing. The base copy of stm32F4Discovery compiled just fine with just the renaming of the folders and the *.cmake file. As I was adding features I wanted, some variables mismatches starting popping up. Eventually it just stopped compiling in early stages after I tried using
$ ./configure.sh stm32f4ve/nsh
It gave me an error saying “HEAD” was missing.

make px4-stm32f4ve_default $ make px4-stm32f4ve_default -- PX4 VERSION: v1.8.0-1545-gcc64661 -- CONFIG: nuttx_px4-stm32f4ve_default -- Build Type: MinSizeRel -- The ASM compiler identification is GNU -- Found assembler: /home/rossos/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc -- Found PythonInterp: /usr/bin/python (found version "2.7.12") -- Found PY_jinja2: /usr/lib/python2.7/dist-packages/jinja2 -- C compiler: arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] -- C++ compiler: arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] -- PX4 ECL: Very lightweight Estimation & Control Library v0.9.0-603-g10a0fef -- Building and including px4io-v2 -- NuttX: px4-stm32f4ve nsh cortex-m4 -- ROMFS: px4fmu_common -- Configuring done -- Generating done -- Build files have been written to: /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f4ve_default ninja: Entering directory `/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f4ve_default' [7/302] git submodule platforms/nuttx/NuttX/nuttx [8/302] git submodule src/lib/ecl [10/302] Building px4io-v2 ninja: Entering directory `/home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4io-v2_default' ninja: no work to do. [12/302] git submodule platforms/nuttx/NuttX/apps [16/302] Generating nuttx/include/nuttx/version.h, nuttx/include/nuttx/config.h FAILED: cd /home/rossos/projectspace/stm32f407vgt6-discoveryF4/pixhawk_toolchain/src/Firmware/build/nuttx_px4-stm32f4ve_default/NuttX/nuttx && make --quiet --no-print-directory context >nuttx_build.log make[1]: *** [include/arch/board] Error 1 [16/302] Generating uORB topic headers ninja: build stopped: subcommand failed. Makefile:176: recipe for target 'px4-stm32f4ve_default' failed make: *** [px4-stm32f4ve_default] Error 1

I’ve never worked with NuttX before, this is my first encounter.
What I understood so far is that I have to actually configure the defconfig file with a NuttX tool

make menuconfig
and
./configure.sh board_name/nsh

However the folder structure does not match with a generic NuttX environment and I am currently lost.

My px4-stm32f407vet6-black was modified from px4fmu-v2
And my px4-stm32f4ve was modified from px4-stm32f4discovery

When compiling px4-stm32f407vet6-black it never asked for *.prototype image.
But when compiling px4-stm32f4ve it did explicitly asked me for “px4-stm32f4ve.prototype” file.

It is clear to me I am missing some fundamental understanding of the platform in general.

As much information as there is provided at https://dev.px4.io/en/setup/building_px4.html , I still got myself lost.

I feel that I am missing something very crucial and essential, I just can’t pinpoint it.

All the files I’ve edited or created can be found here: https://github.com/RossosHEX/PX4/tree/master/Firmware