furrtek / portapack-havoc

Custom firmware for the HackRF SDR + PortaPack H1 addon
GNU General Public License v2.0
814 stars 221 forks source link

Build issue #78

Closed ncoop23 closed 4 years ago

ncoop23 commented 7 years ago

So I am working to build the firmware and needed to do a couple steps to install the compiler

apt-get install gcc-arm-none-eabi
apt-get install dfu-util

cmake .. works fine

After this I am having an issue where I am unable to build when I run make firmware. The issue is described below:

On line 117 of ui_scanner.hpp: "array must be initialized with a brace-enclosed initializer"

Did I install the wrong toolchain or something?

rogueops commented 7 years ago

This the one you used?

https://launchpad.net/gcc-arm-embedded/+download

furrtek commented 7 years ago

It seems to be a GCC bug. As @gh0stshell wrote, try using a newer version.

ncoop23 commented 7 years ago

I'm in Kali and it's not wanting to take the PP. I tried updating arm-none-eabi and no luck still. The full error:

I'm on: 15:5.4.1+svn241155-1 of gcc-arm-none-eabi

Building the ARM toolchain from source now. It's taking awhile.

on make firmware


[ 38%] Building CXX object firmware/application/CMakeFiles/application.elf.dir/ui_navigation.cpp.obj
In file included from /root/portapack-havoc/firmware/application/ui_navigation.cpp:53:0:
/root/portapack-havoc/firmware/application/ui_scanner.hpp:117:42: error: array must be initialized with a brace-enclosed initializer
  std::array<Color, 240> spectrum_row { 0 };
                                          ^
firmware/application/CMakeFiles/application.elf.dir/build.make:3488: recipe for target 'firmware/application/CMakeFiles/application.elf.dir/ui_navigation.cpp.obj' failed
make[3]: *** [firmware/application/CMakeFiles/application.elf.dir/ui_navigation.cpp.obj] Error 1
CMakeFiles/Makefile2:215: recipe for target 'firmware/application/CMakeFiles/application.elf.dir/all' failed
make[2]: *** [firmware/application/CMakeFiles/application.elf.dir/all] Error 2
CMakeFiles/Makefile2:137: recipe for target 'firmware/CMakeFiles/firmware.dir/rule' failed
make[1]: *** [firmware/CMakeFiles/firmware.dir/rule] Error 2
Makefile:131: recipe for target 'firmware' failed
make: *** [firmware] Error 2
root@kali:~/portapack-havoc/build# 

It seems like I need to turn off option strict and option explicit or something. I come from .NET so this is kind of new to me. I would be happy to update the wiki with the process.

ncoop23 commented 7 years ago

From what I'm reading it seems like it is being picky and wanting something like:

std::array<Color, 240> spectrum_row = { 0 }

as per: http://en.cppreference.com/w/cpp/container/array

furrtek commented 7 years ago

I had it build with 6.3.1 20170620 (6-2017-q2-update). I changed the line to respect C++11 init.

Byte1122 commented 7 years ago

My building of firmware is still failing. Can maybe build it for me? Honestly I have difficulty to install 6.3.1 6-2017-q2-update.

ImDroided commented 7 years ago

Here is my copy from earlier today. I hold no responsibility for this file. I flashed it to my portapack and it worked. portapack-h1-havoc.zip

ncoop23 commented 7 years ago

Yeah, basically you need to make a ubuntu vm just to get this latest version of the build chain from the ppa as the kali repo doesn't have the same version in it.

rogueops commented 7 years ago

Ubuntu has the same one until you use that PPA, when building mine at first I installed what was provided, until furrtek sent me the correct one to use it would fail, gcc-arm-embedded works while default one provided in the default Ubuntu and Kali repo gcc-arm-none-eabi fails

ncoop23 commented 7 years ago

I guess it's up to the admin on what coding standard they want to use. My vote is for something like C11 that is widely supported without having to jump through hoops and think that might encourage more developers to make stuff for this but I'm just some random guy trying to make this thing work right and add some features to it for HAM radio use.

Byte1122 commented 7 years ago

@ImDroided Thanks! I already figured out. For building it, just start a fresh Ubuntu 16.04 in your vm and than;

sudo apt-get remove gcc-arm-none-eabi binutils sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa sudo apt-get update sudo apt-get install gcc-arm-embedded

Than: apt-get install dfu-util

Than: apt-get install cmake

Now you can build and make firmware

Byte1122 commented 7 years ago

maybe an offtopic question, but I have a question about;

Give it some time. Put your HackRF in DFU mode (keep the reset button pressed and click on the DFU button). Then, upload the DFU update program with dfu-util: from the firmware/ directory, run:

dfu-util --device 1fc9:000c --download hackrf_one_usb_ram.dfu --reset

I never found a hackrf_one_usb_ram.dfu I used from the firmware directory the hackrf_one_usb.dfu after that I flashed it with hackrf_spiflash -w portapack-h1-havoc.bin

The portapack-havoc seems to work fine....

fantuz commented 6 years ago

Hello @Redouan29, me too I was wondering...

I only dfind that: ./firmware/hackrf_one_usb.dfu within HAVOC project. But can only find ./firmware/build/hackrf_usb/hackrf_usb.dfu within the original HACKRF project.

Sizes are comparable, haven't inspected further so far.

To avoid misconceptions, I own the HACKRF "final built" rather than the HACKRF-one kickstarter....

How is the compatibility of the different models taken in account, exactly ? Dumb question but just curious..