PX4 on Snapdragon flight

With the make posix_eagle_legacy_driver_default command and the subsequent upload onto Snapdragon, is the PX4 stack running on the apps processor or the DSP? It is stated that PX4 runs on the DSP, but I do not see how this is the case. There do not seem to be any RPCs connecting the two. Specifically, in the case of the DriverFramework library, it seems that the module for this will be built to use the serial ports on the apps processor. I can understand how PX4 runs on the DSP with make qurt_eagle_legacy_driver_default, though, as the qurt toolchain is used for building. However, with the former command, the arm-linux-eabihf toolchain is used for building.

I ask this because I am building a PX4 module for the DSP that I can access (start/stop/…) from the px4 console on the apps processor.

I suppose the command should be make eagle_default according to the dev documents.
posix would install the CPU side staff, while the qurt would deal with the DSP side.
These two can communicate with a mechanism as muorb module based on fastRPC.
This is what I understand.

1 Like

How do we start and stop modules on the DSP side from the px4 prompt? Also, do the DSP modules output their messages to mini-dm?

I’m figuring that problem out right now. For the model that PX4 uses, check out the src/firmware/posix/CMakeLists.txt file. You will see that a cmake_hexagon/linux_app is configured to be made as the main px4 app just before the make <target_platform> upload command is configured. In the src/firmware/qurt directory there is a *.idl file, which defines an interface to perform inter-process communication. (I’m a little sketch on this next part) This is compiled into inter-process communication skeleton, stub, and interface functions. Ignore the skeleton and stub functions except that you are required to link the skeleton shared object library to your dsp-side app. You will reference the interface functions to communicate from the linux side (client) to the dsp side (server). This is what muorb does.

My strategy is to do a similar thing. I will try to link my dsp-side libraries as module_external_libraries, and my linux-side libraries as a regular px4 module (see the DriverFramework/framework module for how that is done with a linux-side library). So far it is close, but has not been successful. I will try to remember to sum up my method when I get it to work.

I guess there is a file named px4.config in /usr/share/data/adsp on the board.
The modules on dsp side are started as command lines here.
Yes. mini-dm does output some particular commands, like PX4_WARN.

Wow, great answer. I was doing something way way more complicated. Good to know that this functionality does in fact exist already.