问题标签 [crosstool-ng]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
403 浏览

linux - execvp: /bin/sh: 使用 crosstool-ng 构建 glibc 2.5 时参数列表太长

我正在尝试将我们的构建服务器从 opensuse 9 升级到 ubuntu 14.04。我们的目标操作系统是内核 2.6.24 和 glibc 2.5 和 gcc 4.2.1 的 uClinux。我们正在使用 crosstool-ng 来构建我们的交叉工具链。构建工具链工作正常,也可以构建内核。但是在 nptl 中构建 glibc 时,构建退出时出现 make Error 1。

我只看到一个重复的错误:

在一些类似这篇这篇的文章中,问题似乎是传递给 execve 系统调用的字符串的最大大小。然而,最重要的是,当我在旧的 opensuse 上运行时 getconf ARG_MAX ,答案是 131072,而在 ubuntu 14 上,答案是 getconf ARG_MAX,它要大得多。并以同样的方式cat /proc/$$/environ | wc -c在opensuse上运行,给出482作为答案,而在ubuntu上的答案是1257。当我将glibc文件夹移动到路径较短的文件夹时,构建工作没有问题。我想知道这是否是真正的问题,是否有解决方案。我用于构建 glibc 的 make 文件是:

这是 make log 的最后一部分:

通过在调试模式下运行 make 并使用 strace,我无法找到有关该错误的更多详细信息:

0 投票
0 回答
64 浏览

gcc - crosstool-ng 的 LD 在编译内核时给出“源对象 a/b/built-in.o 具有 EABI 版本 5,但目标 b/built-in.o 具有 EABI 版本 0”

我刚刚为“arm-unknown-eabi”创建了一个带有 crosstool-ng 的 gcc11 交叉编译器来编译我的内核(用于 msm8974 芯片组的 android),但是在链接的某个时刻,LD 给出了这个关于 EABI 版本的错误,但是目标文件甚至不存在。这些是 crosstool 工具链的组件:

  • binutils-2.34.tar.xz
  • gcc-git-46a58c77.tar.bz2
  • gettext-0.20.1.tar.xz
  • gmp-6.2.0.tar.xz
  • isl-0.22.tar.xz
  • libiconv-1.16.tar.gz
  • mpc-1.1.0.tar.gz
  • mpfr-4.0.2.tar.xz
  • ncurses-6.2.tar.gz
  • newlib-3.3.0.tar.gz

给出错误的完整命令是这样的:

  • /root/x-tools/arm-unknown-eabi/bin/arm-unknown-eabi-ld -EL -r -o drivers/gpu/built-in.o drivers/gpu/drm/built-in.o drivers/ gpu/ion/built-in.o
  • /root/x-tools/arm-unknown-eabi/bin/arm-unknown-eabi-ld:错误:源对象驱动程序/gpu/ion/built-in.o 具有 EABI 版本 5,但目标驱动程序/gpu/built -in.o 有 EABI 版本 0
  • /root/x-tools/arm-unknown-eabi/bin/arm-unknown-eabi-ld: 未能合并文件驱动程序/gpu/ion/built-in.o的目标特定数据

查看这些文件:

  • drivers/gpu/built-in.o:无法打开“drivers/gpu/built-in.o”(没有这样的文件或目录)
  • drivers/gpu/drm/built-in.o:ELF 32 位 LSB 可重定位,ARM,版本 1 (ARM),未剥离
  • drivers/gpu/ion/built-in.o:ELF 32 位 LSB 可重定位,ARM,EABI5 版本 1 (SYSV),未剥离

真正的目标(drivers/gpu/built-in.o)甚至不存在。DRM 之一(不显示为 EABI5)虽然很小(320 字节,我认为它是由 AR 创建的?)。

使用另一个工具链,一切都与这个完全相同的内核代码、Makefile 等配合得很好。我之前使用的是 musl gcc 10。

0 投票
1 回答
4571 浏览

linux - 无法在 Raspberry PI 4B 上运行 U-boot。什么是绝对必需品?

我看到了一些关于这个主题的帖子,但没有什么能真正帮助我的事业,所以在这里重申我的问题。 

我想构建自己的工具链、U-boot 和主线 Linux 内核,以便移植到特定的处理器上。由于我目前拥有 Raspberry Pi 4B,因此我决定使用它来逐步测试我的二进制文件。

到目前为止,我执行了以下操作:

  1. 使用 Crosstool-ng (v1.24.0) 构建了一个 64 位工具链 - 得到 \x-tools\aarch64-rpi3-linux-gnu
  2. 克隆 U-boot 并构建 v2020.07 版本,从而生成 u-boot.bin + 其他文件(使用 rpi_4_defconfig 和 rpi_arm64_defconfig 构建)
  3. 克隆 Linux 内核(v5.4.65 和 v5.8.9),在 Raspberry Pi 存储库的 arch/arm64/configs 中添加 bcm2711_defconfig 并构建 Linux 内核 - 生成 vmlinux、Image、Image.gz、System.map、bcm2711-rpi-4 -b.dtb + 其他文件
  4. 在我的 32-GB SD 卡上创建了两个分区 boot (FAT32)、rootfs (Ext4)
  5. 复制u-boot.bin、Kernel images、start4.elf、fixup4.dat到boot分区
  6. 在 config.txt//config.txt 中有这个

在下面取消注释以使用您的自定义命名内核

内核=u-boot.bin

串行控制台输出!

enable_uart=1 7. 尝试使用 HDMI 线将 RPi 连接到显示器

我所看到的:设备似乎打开了,我看到一些绿色 LED 快速闪烁,然后只有红色 LED 保持稳定。监视器收到信号,表明它变亮了,但屏幕是空白的。我期待一个带有 UART > 或其他东西的命令提示符,但什么也没出现。 

问题:

  1. 有人可以评论我身边缺少的东西吗?
  2. 获得自己的 U-Boot、自己的 Linux 内核和在 Raspberry Pi 4B 上运行的根 FS 的绝对最低要求是什么?(关于.elf、fix*.dat等,+config.txt、cmdline.txt上的设置?)
0 投票
1 回答
169 浏览

embedded-linux - 如何让 uclibc 在 crosstool-ng 配置菜单中可见?

我正在尝试构建一个 crosstool-ng 工具链,并且我正在关注bootlin training。在这次培训中,似乎选择的C库是UCLIBC库。但是,在我从 github 存储库下载预构建的工具链并启动 menuconfig 之后,我注意到唯一可以选择的 2 个库是 newlib 和 none。虽然我在 crosstool-ng 目录中有 uclib,但我在菜单中看不到它。知道如何使用 ct-ng 工具链获得 Uclibc 吗?谢谢。

0 投票
0 回答
85 浏览

gcc - 交叉复制到嵌入式 Linux ARM 设备时,使用最新的 GCC 以较旧版本的 libstdc++ 为目标

我们需要为 ARM 嵌入式 linux 目标找到满足以下条件的交叉编译工具链:

  • 内核 3.17
  • GLIBC 2.18
  • 编译一些第三方代码需要最新版本的 GCC

这些要求使我使用 crosstool-ng 生成自定义交叉编译工具链。我选择了最小内核版本,最小 glibc 版本,它似乎运行良好,直到我尝试编译包含 C++ 的代码。

因为新的 GCC 使用的 libstdc++ 比目标上可用的更新,所以可执行文件不会运行,我们会收到如下错误:

该代码使用旧版本的 GCC 编译得很好。

查看 crosstool-ng 的配置选项,我没有找到任何可以让我更改最小 libstdc++ 版本的东西,比如 glibc。

有没有办法在不降级 GCC 的情况下针对较旧的 libstdc++ 版本?我可以使用目标中的头文件和 libstdc++.so 文件来替换 GCC 在交叉编译时使用的文件吗?

0 投票
0 回答
91 浏览

c - 为什么 GCC 不总是发出原子内置函数?

使用 crosstool-ng,我为 mips-unknown-linux-uclibc 构建了一个 GCC 10.2 交叉工具链。它对我正在编译的遗留应用程序完美无缺。我最近尝试使用使用 crosstool-ng 构建的类似 GCC 交叉工具链为运行 RTOS 的嵌入式设备编译相同的应用程序。主要区别在于我将其配置为使用 newlib 而不是 uclibc 并将其设置为裸机而不是 linux。工具链大部分都有效,但链接时出现以下错误:

快速浏览一下 libgcc.a 会发现这些符号存在于 mips-unknown-linux-uclibc 工具链中

而且不在 mips-unknown-elf 工具链中

当 linux 不是目标时,为什么 GCC 编译器构建不发出同步内置命令?我该如何配置它才能做到这一点?我目前的技巧是创建我自己的程序集实现,这些实现与 GCC 在 mips-unknown-linux-uclibc 工具链中发出的那些实现相同,但宁愿理解为什么它们一开始就没有发出。

0 投票
1 回答
334 浏览

c++ - 无法在基于 GNU 的 Linux 发行版(例如 Debian)的 Alpine 上构建交叉编译器?

我试图使用crosstool-ng并让它构建一个交叉编译器来针对基于 gnu 的 linux 发行版,因为 alpine 带有 musl-libc 我猜交叉工具不能直接使用 gnu 中使用的类型声明。

更准确地说,在构建工具链时安装 linux 头文件时,/usr/include/linux/types.h不包含一些类型声明,这些声明会出错:

我想这是因为 musl-libc 中不包含这些声明。虽然我能够使用来自包管理器的mxelibgcc libstdc++构建一个 mingw-w64 交叉编译器,但我想这不是主要问题,因为 mingw-w64 工作得很好。

我在他们的回购中添加了一个问题,但到目前为止还没有解决方案。

有没有什么我错过的东西正在成为针对 gnu linux 的障碍?

编辑:用于重现问题的示例构建脚本是:

0 投票
1 回答
400 浏览

esp8266 - 构建 esp-open-sdk - crosstool-NG 找不到 expat-2.1.0

我正在使用esp-open-sdk为 ESP8266EX 编译工具链,但 出现错误:

我查看了 crosstool-NG/build.log,它显然在任何类型的 tarball(zip、tar、tar.gz 等)中都找不到 expat-2.1.0

我能够从另一个站点(fedora)下载 expat-2.1.0.tar.gz,但我不知道如何告诉构建项目在磁盘上找到它。

0 投票
0 回答
36 浏览

linux - /linux/usr/include/asm-generic/socket.h:123:5:警告:“__BITS_PER_LONG”未定义,计算结果为 0 [-Wundef]

我只能尝试为 uClibc-ng 和 x86_64 构建自己的 gnu 工具链,为此我尝试了各种工具:buildroot、crosstool-ng。我什至尝试过自己滚动。在使用阶段 1 gcc 编译器 (10.2.0) 编译 uClibc-ng (rel 1.0.36) 期间,我尝试使用每个工具,我得到很多错误/linux/usr/include/asm-generic/socket.h:123:5: warning: "__BITS_PER_LONG" is not defined, evaluates to 0 [-Wundef]linux 头文件来自 5.9.1。我尝试了不同版本的编译器和 uClibc-ng,但错误没有改变。有人有什么建议吗?

我也愿意获得一个预先构建的工具链,但是 uClibc-ng 有很多选择,事实证明很难找到一个符合我需求的。

0 投票
0 回答
110 浏览

build - 构建工具链时 Crosstool-ng 构建错误。检索“libelf-0.8.13”[错误] libelf:下载失败

我正在尝试使用 crosstool-ng 构建工具链。但是,我在执行构建操作时收到此错误。

根据我的阅读,这是因为下载 libelf-0.8.13 的链接不再存在。因此,在 libelf.in 文件中,我已将链接更改为存在 libelf-0.8.13 以供下载的链接,但我仍然遇到相同的错误。

我可以通过取消选中 menuconfig 中的调试选项来覆盖它,我已经使用它成功构建了一个工具链,但是,我认为缺少 libelf 会导致稍后在使用工具链时出现问题。