Direction for Novice on Custom Firmware

Hello, I’m new here but am hoping to learn a lot in a relatively short amount of time. I am helping on a VTOL model aircraft with 8 lift fans and 2 forward propulsion fans. I have read about and downloaded/installed QGroundControl v3.1.3 on my Win7 PC and have started and succeeded in loading the Standard VTOL firmware onto a Pixhawk to try to get some familiarity with this part. Ultimately, after learning how, I will want to be able to either modify existing firmware (i.e. like the Standard VTOL firmware) or create firmware to allow me to create a custom version to use with a model my colleague is putting together (he knows the hardware and has built and flown drones before, but I’m more of a theoretical type that has some general experience doing computer models, simple coding/nothing extensive, etc.).

I am quite a noob at Pixhawk/QGroundControl though and am asking for some guidance on how to do this kind of code development. Can you please tell me the process by which I could start this? I’m thinking of starting simple at first; take an existing VTOL firmware from whatever code it starts from, making a very minor tweak to it to make it “custom”, then compiling (or whatever is done to enable it for QGroundControl), and then upload the “custom” firmware into QGroundControl and then the PixHawk. I just need some step-by-step instructions (and preferably a good example to go by) with more specifics on the more basic steps that what’s shown in on how to accomplish this as simply as possible. Most of what I’ve found out there seems to assume one already has experience with this and so doesn’t show these more basic steps. Can you please help? I apologize if its already available somewhere and I haven’t found it yet.


1 Like

Unhelpful comment of the day here, but–do you have any Linux experience? I am also a noob but doing what you described on Ubuntu was criminally easy (for the most part). This here says Windows isn’t officially supported: …which was enough to scare me into using the old Linux box. Linux instructions are clear and extensive and it looks like you might have to follow them using Windows anyway… Good luck! -Anna

Thanks Anna. I appreciate the idea. I don’t have Linux unfortunately and haven’t used it anyway, so I guess I’m stuck with trying it in Windows for now.

I wonder how similar or not the instructions in Linux are to what they would be in Windows though. Could you at least point me to the Linux instructions so I can at least get a concept of the approach it might take in Windows? Also, maybe someone else has done it in Windows and might share their instructions?


I am currently trying to write a new firmware for a blimp but have no idea how to start. Could you give me some hints or refer me to a tutorial? This link gave me a broad idea but does not offer an example to actually help me start.
I also looked at, but am not sure whether its useful or not. Thanks!


Ok, so I got a second PC and installed Ubuntu 17.04 on it for this purpose (is 17.04 ok?). I’m a beginner at Ubuntu, so please help. Note, this is for using a Pixhawk; I want to be able to make my own firmware for an 8 vert prop, 2 horiz prop UAV.

I started up the Terminal and started with stepping through the steps here:
by copying and pasting in each step, but am having some problems in some steps below. Can you please tell me what to change below (maybe correct the command line naming/wording on these command lines that didn’t work, or tell me what must be done prior to them?) to get what I need so this will work and enable me to do a build?

Here is each line I wrote followed by … and my notes on what happened:

  1. sudo usermod -a -G dialout $USER …this showed no messages, I have no idea if it worked.

  2. sudo add-apt-repository ppa:george-edison55/cmake-3.x -y …this appeared to work

  3. sudo apt-get update …seemed to work except it "failed to find the “Packages” file on, and some index files did not download

  4. sudo apt-get install python-argparse git-core wget zip
    python-empy qtcreator cmake build-essential genromfs -y …started ok but it
    selected ‘libpython2.7-stdlib’ instead of ‘python-argparse’. It also was unable to
    locate package ‘python-empy’. I didn’t notice this and proceeded to the next

  5. sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8-jdk openjdk-8-jre clang-3.5 lldb-3.5 -y …this failed to fine packages ‘clang-3.5’ and ‘lidb-3.5’, so on a hunch I retyped it but used ‘clang-4.0’ and ‘lidb-4.0’ and that seemed to work fine.

  6. sudo apt-get install python-pip …seemed to work fine

  7. sudo -H pip install pandas jinja2 …seemed to work fine

I then proceeded with the NuttX based hardware instructions since this is for a Pixhawk.

  1. sudo apt-get remove modemmanager …seemed to work fine.

  2. sudo apt-get install python-serial openocd
    flex bison libncurses5-dev autoconf texinfo build-essential
    libftdi-dev libtool zlib1g-dev
    python-empy -y …it read the package list, but failed to find the packages ‘flex’, ‘libftdi-dev’, and ‘python-empy’ … it seemed to work fine I guess (lots of lines in there)

  3. sudo apt-get remove gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi gcc-arm-embedded …failed to locate package ‘gcc.arm-embedded’

  4. sudo add-apt-repository --remove ppa:team-gcc-arm-embedded/ppa … gave me a lecture about PPA being an alternative to toolchain, steps to install toolchain from this PPA, and some notes about questions and bugs.