如何在 Ubuntu 20.04 LTS (Focal Fossa) 上安装 arm-none-eabi-gdb

Ale*_*hko 11 apt gcc arm

我尝试安装 arm-none-eabi-gdb 作为 gcc-arm-embedded 的一部分。我添加了 PPA:

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
Run Code Online (Sandbox Code Playgroud)

并执行:

sudo apt install gcc-arm-embedded 
Run Code Online (Sandbox Code Playgroud)

它的回应是:

Err:8 http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu focal Release
  404  Not Found [IP: 91.189.95.83 80]
Run Code Online (Sandbox Code Playgroud)

据我了解 - gcc-arm-embedded 没有适用于 Ubuntu 20 的版本。所以我在软件和更新中将这个 PPA 的发布版本更改为仿生,这样我就可以避免错误 404。

尽管 ubuntu 20 具有 libisl22,但现在我在尝试安装 gcc-arm-embedded 时仍有未满足的依赖项:

The following packages have unmet dependencies:
 gcc-arm-embedded : Depends: libisl15 (>= 0.15) but it is not installable
E: Unable to correct problems, you have held broken packages.
Run Code Online (Sandbox Code Playgroud)

我无法找到安装请求的 libisl 版本的方法,因为 apt 仅提供两个版本 - libisl22 和 libisl-dev,安装程序不接受这两个版本。

我需要有关如何安装 arm-none-eabi-gdb 的建议。谢谢!

Ale*_*hko 18

事实证明,ARM 决定通过弃用 PPA 来让我们的生活更轻松(讽刺)——他们在启动板页面现在有一个公告:“……所有新的二进制文件和源代码包从今以后都不会在启动板上发布…… ”。

因此,要使用他们最新的 arm-none-eabi-gdb,您必须手动安装 gcc-arm-embedded。

从系统中删除 arm-none-eabi-gcc:

sudo apt remove gcc-arm-none-eabi
Run Code Online (Sandbox Code Playgroud)

从他们的网站下载最新版本 (Linux x86_64 Tarball) ,检查其 MD5。将其解压到某个目录中。我用过 /usr/share/ :

sudo tar xjf gcc-arm-none-eabi-your-version.bz2 -C /usr/share/

创建链接以便二进制文件可在系统范围内访问:

sudo ln -s /usr/share/gcc-arm-none-eabi-your-version/bin/arm-none-eabi-gcc /usr/bin/arm-none-eabi-gcc 
sudo ln -s /usr/share/gcc-arm-none-eabi-your-version/bin/arm-none-eabi-g++ /usr/bin/arm-none-eabi-g++
sudo ln -s /usr/share/gcc-arm-none-eabi-your-version/bin/arm-none-eabi-gdb /usr/bin/arm-none-eabi-gdb
sudo ln -s /usr/share/gcc-arm-none-eabi-your-version/bin/arm-none-eabi-size /usr/bin/arm-none-eabi-size
Run Code Online (Sandbox Code Playgroud)

安装依赖项。readme.txt 中列出的 ARM 的“完整安装说明”不会告诉您什么是依赖项 - 您必须通过反复试验来弄清楚。在我的系统中,我必须手动创建符号链接以强制它工作:

sudo apt install libncurses-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
Run Code Online (Sandbox Code Playgroud)

检查它是否有效:

arm-none-eabi-gcc --version
arm-none-eabi-g++ --version
arm-none-eabi-gdb --version
arm-none-eabi-size --version
Run Code Online (Sandbox Code Playgroud)

  • 我建议对 bin 文件夹中的所有内容进行符号链接 -- `sudo ln -s /usr/share/gcc-arm-none-eabi-your-version/bin/* /usr/bin/` (3认同)
  • 你可以直接安装它,而不是 libncurses 的符号链接`sudo apt install libncurses5` (2认同)

小智 8

我已将@kmhallen 的脚本包装到半自动 debian 软件包构建器中: https: //gitlab.com/alelec/arm-none-eabi-gcc-deb/-/releases

安装这样的包意味着您可以跳过繁琐的手动符号链接以将工具放在路径上,同样重要的是您可以卸载/升级到更新的包(假设我记得制作更多包)


小智 5

该工具链现在仅在其网站上提供: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

解压后,将文件夹路径添加bin到系统路径中:

cd /opt
wget "https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2"
tar -jxf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
rm gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
export PATH="/opt/gcc-arm-none-eabi-10.3-2021.10/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

或者,这里有一个用于生成 Debian 软件包并将其安装到/usr目录的脚本。这样你就不必一直导出路径,并且可以使用以下命令将其删除sudo apt purge gcc-arm-none-eabi

#!/bin/bash

VER=15:10.3-2021.10-9
URL=https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
echo "Creating gcc-arm-none-eabi debian package version $VER"

echo "Entering temporary directory..."
cd /tmp

echo "Downloading..."
curl -fSL -A "Mozilla/4.0" -o gcc-arm-none-eabi.tar "$URL"

echo "Extracting..."
tar -xf gcc-arm-none-eabi.tar
rm gcc-arm-none-eabi.tar

echo "Generating debian package..."
mkdir gcc-arm-none-eabi
mkdir gcc-arm-none-eabi/DEBIAN
mkdir gcc-arm-none-eabi/usr
echo "Package: gcc-arm-none-eabi"          >  gcc-arm-none-eabi/DEBIAN/control
echo "Version: $VER"                       >> gcc-arm-none-eabi/DEBIAN/control
echo "Architecture: amd64"                 >> gcc-arm-none-eabi/DEBIAN/control
echo "Maintainer: maintainer"              >> gcc-arm-none-eabi/DEBIAN/control
echo "Description: Arm Embedded toolchain" >> gcc-arm-none-eabi/DEBIAN/control
mv gcc-arm-none-eabi-*/* gcc-arm-none-eabi/usr/
dpkg-deb --build --root-owner-group gcc-arm-none-eabi

echo "Installing..."
sudo apt install ./gcc-arm-none-eabi.deb -y --allow-downgrades

echo "Removing temporary files..."
rm -r gcc-arm-none-eabi*

echo "Done."
Run Code Online (Sandbox Code Playgroud)

检查是否有效:

arm-none-eabi-gcc --version
Run Code Online (Sandbox Code Playgroud)


小智 5

Aleksander 的答案解决了我 99% 的问题,但是在运行 make 后,我收到一个错误 arm-none-eabi-objcopy :找不到命令。所以我必须再创建一个符号链接来生成文件。

sudo ln -s /usr/share/gcc-arm-none-eabi-your-version/bin/arm-none-eabi-objcopy /usr/bin/arm-none-eabi-objcopy

我尝试将此作为评论添加到答案中,但我没有足够的积分来做到这一点。