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

我尝试安装gcc-arm-embedded的一部分,即arm-none-eabi-gdb。我添加了PPA:
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa

并执行:
sudo apt install gcc-arm-embedded 

它回应说:
Err:8 http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu focal Release
  404  Not Found [IP: 91.189.95.83 80]

据我所了解,gcc-arm-embedded在Ubuntu 20上没有适用的版本。因此,我已经在“软件和更新”中将此PPA的发布版本更改为bionic,以避免出现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.

我无法找到安装所需版本的libisl的方法,因为apt只提供了两个版本 - libisl22和libisl-dev,而安装程序都不接受。
我需要关于如何安装arm-none-eabi-gdb的建议。谢谢!

不是真的。我发现在Launchpad上有一个适用于Focal版本的链接:https://launchpad.net/ubuntu/focal/+source/gcc-arm-none-eabi 但是我不知道为什么PPA没有提供访问权限。 - Aleksander Khoroshko
2虽然他们有针对焦点的软件包,但他们在dists文件夹中缺少文件和发布文件。发布文件包含了当请求时要获取的池中deb文件的路径。他们也没有将软件包上传到archives池中。您可以考虑联系PPA维护者解决此问题。 - Kulfy
1@Kulfy 谢谢你的努力!结果发现 PPA 维护者决定弃用这个 PPA(在他们的网站上有说明),所以现在唯一的安装方式是非 PPA 方式。我在下面给出了详细的指导。 - Aleksander Khoroshko
4个回答

原来ARM决定让我们的生活更轻松(讽刺),通过废弃PPA的使用 - 他们在launchpad上的页面现在有一个公告:“...所有新的二进制和源代码包将不再在Launchpad上发布...”。
所以,要使用他们最新的arm-none-eabi-gdb,您必须手动安装gcc-arm-embedded。
从您的系统中删除arm-none-eabi-gcc:
sudo apt remove gcc-arm-none-eabi

下载最新版本(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
sudo ln -s /usr/share/gcc-arm-none-eabi-YOUR-VERSION/bin/arm-none-eabi-objcopy /usr/bin/arm-none-eabi-objcopy

安装依赖项。在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

检查是否有效:

arm-none-eabi-gcc --version
arm-none-eabi-g++ --version
arm-none-eabi-gdb --version
arm-none-eabi-size --version

1@AleksanderKhoroshko 哇,我们一直在不知情地使用旧工具。谢谢你!ARM把旧东西留在那里有点邪恶...嗯。好的,我刚刚发起了一个标志,表示您的问题应该重新打开,因为列出的备选项与此特定问题无关。 - SusanW
1我尝试了这个包 "gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2",不需要手动创建符号链接,对于"Check if it works: "的结果是正常的。 - MianQi
我如何使用Ubuntu的AUR? - lmat - Reinstate Monica
4不必使用libncurses的符号链接,您可以直接安装它sudo apt install libncurses5 - debuti
3我建议将bin文件夹中的所有内容进行符号链接 -- sudo ln -s /usr/share/gcc-arm-none-eabi-your-version/bin/* /usr/bin/ - CivMeierFan

我已经将脚本这里由@kmhallen提供包装成了一个半自动的Debian软件包构建器,你可以在这里找到它:https://gitlab.com/alelec/arm-none-eabi-gcc-deb/-/releases
安装这样的软件包意味着你可以跳过繁琐的手动符号链接步骤,直接将工具放在路径上。同样重要的是,你可以卸载/升级到更新的软件包(假设我记得制作更多的软件包)。

工具链现在只在他们的网站上提供: 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"

或者,这里有一个脚本可以生成一个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."

检查一下是否有效:
arm-none-eabi-gcc --version

1运作完美无缺。 - M.Hefny
这种方法适用于Ubuntu 20.04LTS。在卸载Ubuntu版本之前,我必须先对gcc-arm-none-eabi和binutils-arm-none-eabi这两个软件包进行自动清除。否则,由于与其他文件的冲突,创建的.deb文件将无法安装。 - undefined

Aleksander的回答解决了我99%的问题,但是在运行make命令后,出现了一个错误:arm-none-eabi-objcopy : command not found。所以我不得不再创建一个符号链接来生成文件。
sudo ln -s /usr/share/gcc-arm-none-eabi-your-version/bin/arm-none-eabi-objcopy /usr/bin/arm-none-eabi-objcopy
我尝试将这个作为评论添加到答案中,但是我没有足够的积分来这样做。

1欢迎来到Ask Ubuntu!我已经将您的建议添加到您所提及的答案中。请不要在答案中留下评论。相反,您可以发布不需要问题作者澄清的答案,或者如果您有建议,可以编辑帖子以纳入您的建议。 - Nonny Moose