# Compile issue: Failure on Linking (custom hardware adaptation)

**URL:** <https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085>\
**Category:** Uncategorized\
**Created:** [October 12, 2018, 11:46am UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085 "2018-10-12T11:46:09Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rossos](https://discuss.px4.io/user_avatar/discuss.px4.io/rossos/32/3500_2.png) [@Rossos](https://discuss.px4.io/u/Rossos)\
**Post date:** [October 12, 2018, 11:46am UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085/1 "2018-10-12T11:46:09Z")

</div>

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](https://wiki.stm32duino.com/index.php?title=STM32F407)  
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](https://dev.px4.io/en/setup/dev_env_linux.html)  
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
`

---

<div class="post-metadata">

**Author:** ![JulianOes](https://discuss.px4.io/user_avatar/discuss.px4.io/julianoes/32/30_2.png) [@JulianOes](https://discuss.px4.io/u/JulianOes)\
**Post date:** [October 12, 2018, 1:50pm UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085/2 "2018-10-12T13:50:15Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![Rossos](https://discuss.px4.io/user_avatar/discuss.px4.io/rossos/32/3500_2.png) [@Rossos](https://discuss.px4.io/u/Rossos)\
**Post date:** [October 12, 2018, 2:20pm UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085/3 "2018-10-12T14:20:30Z")

</div>

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](https://github.com/RossosHEX/PX4/blob/master/Firmware/cmake/configs/nuttx_px4-stm32f407vet6-black_default.cmake)

---

<div class="post-metadata">

**Author:** ![JulianOes](https://discuss.px4.io/user_avatar/discuss.px4.io/julianoes/32/30_2.png) [@JulianOes](https://discuss.px4.io/u/JulianOes)\
**Post date:** [October 12, 2018, 2:27pm UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085/4 "2018-10-12T14:27:25Z")

</div>

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`.

---

<div class="post-metadata">

**Author:** ![Rossos](https://discuss.px4.io/user_avatar/discuss.px4.io/rossos/32/3500_2.png) [@Rossos](https://discuss.px4.io/u/Rossos)\
**Post date:** [October 12, 2018, 3:09pm UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085/5 "2018-10-12T15:09:02Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![JulianOes](https://discuss.px4.io/user_avatar/discuss.px4.io/julianoes/32/30_2.png) [@JulianOes](https://discuss.px4.io/u/JulianOes)\
**Post date:** [October 12, 2018, 6:43pm UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085/6 "2018-10-12T18:43:25Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Rossos](https://discuss.px4.io/user_avatar/discuss.px4.io/rossos/32/3500_2.png) [@Rossos](https://discuss.px4.io/u/Rossos)\
**Post date:** [October 12, 2018, 7:12pm UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085/7 "2018-10-12T19:12:00Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Rossos](https://discuss.px4.io/user_avatar/discuss.px4.io/rossos/32/3500_2.png) [@Rossos](https://discuss.px4.io/u/Rossos)\
**Post date:** [October 20, 2018, 12:39pm UTC](https://discuss.px4.io/t/compile-issue-failure-on-linking-custom-hardware-adaptation/8085/8 "2018-10-20T12:39:28Z")

</div>

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 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  
[/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](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](https://github.com/RossosHEX/PX4/tree/master/Firmware)
