3

Context

I recently installed Ubuntu 18.04, Linux foobar-VirtualBox 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux on a VM. I want to cross-compile applications for Cortex-M4F CPUs with hard floating points, therefore I have installed the package gcc-arm-none-eabi version 15:6.3.1+svn253039-1build1 as well as libnewlib-arme-none-eabi at version 2.4.0.20160527-3.

Problem

There is a linker error due to a conflict between my object files using hard floats and the libs using soft floats. Some research indicates that this is a known Ubuntu 18.04 issue :

Note that I do provide the correct compiler and linker flags, and this project correctly builds with the Windows cross-toolchain from GNU ARM Embedded. I think it'd be pointless to paste here the complete error. If someone thinks it'd be required I'd be glad to edit this question.

What I already tried

From my basic understanding, I have two solutions to get a functional gcc ARM toolchain:

  1. Downgrade gcc-arm-none-eabi to return to a working version
  2. Remove gcc-arm-none-eabi and install instead gcc-arm-embedded from the team gcc ARM embedded's PPA (Install gcc-arm-embedded from the PPA)

Downgrading gcc-arm-none-eabi, but to what ?

In order to downgrade gcc-arm-none-eabi I have to find a previous version in my package manager. I first updated the package list with sudo apt update, then I typed:

sudo apt show gcc-arm-none-eabi

Package: gcc-arm-none-eabi Version: 15:6.3.1+svn253039-1build1 Priority: extra Section: universe/devel Origin: Ubuntu Maintainer: Ubuntu Developers Original-Maintainer: Agustin Henze Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 307 MB Depends: libc6 (>= 2.15), libgcc1 (>= 1:3.0), libgmp10, libisl15 (>= 0.15), libmpc3, libmpfr6 (>= 3.1.3), libstdc++6 (>= 5), zlib1g (>= 1:1.1.4), binutils-arm-none-eabi Recommends: libnewlib-arm-none-eabi Homepage: http://gcc.gnu.org/ Download-Size: 24.3 MB APT-Sources: http://ch.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages Description: GCC cross compiler for ARM Cortex-A/R/M processors Bare metal compiler for embedded ARM chips using Cortex-M, Cortex-R and Cortex-A processors. This package is based on the GNU ARM toolchain provided by ARM.

There, I don't see any previous version. I think they should be listed here, but I don't see it. I can't downgrade if I can't provide the exact previous version I want to downgrade to.

Using gcc-arm-embedded instead of gcc-arm-none-eabi

I followed the instructions given in the link above, which led me to these commands:

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

[...] Ign:4 http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu bionic InRelease
Get:5 http://security.ubuntu.com/ubuntu bionic-security InRelease [83.2 kB]
Err:6 http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu bionic Release
404 Not Found [IP: 91.189.95.83 80] Reading package lists... Done
E: The repository 'http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu bionic Release' does not have a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details.

sudo apt-install gcc-arm-embedded

Reading package lists... Done Building dependency tree
Reading state information... Done E: Unable to locate package gcc-arm-embedded

Basically it seems I have issues accessing the PPA. I tried the apt switch --allow-unauthenticated but it didn't change the commands output.

Question

Is there a way to make one of those two solutions work, or is there another way to get a functional gcc toolchain on Ubuntu 18.04 to build hard-float application for Cortex-M4F CPU ?

(I've posted recently a SO question on this issue, at this time I thought it was a toolchain issue not so related with the Unix world. If I get an answer here I'll close it and redirect to this Q/A)

3

You can download a functional toolchain from developer.arm.com and install it manually after removing your existing gcc-arm-none-eabi package.

Go to that website, click the "Download" button and get: gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2. Save it in your home directory.

Make sure you've uninstalled the old Ubuntu packages.

sudo apt remove binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi

Untar the new package in your home directory:

tar -xjvf gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2

Add the new toolchain to your path:

export PATH=$PATH:/home/(your user)/gcc-arm-none-eabi-7-2018-q2-update/bin/

At this point you should have a working ARM compiler and toolchain. (For the Unix newbies: if you close the terminal and open a new one, you'll have to re-run the export PATH statement so the compiler will get picked up again.)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.