C语言 如何重建GNU Arm嵌入式工具链的newlib和newlib-nano

bn31dyow  于 2023-02-11  发布在  其他
关注(0)|答案(3)|浏览(207)

我从https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads下载了工具链“gcc-arm-none-eabi-6-2017-q2-update-win32-sha1.exe”(Windows),并将其安装在我的Windows 10 PC上。
安装文件夹在“../share/doc/gcc-arm-none-eabi/”中包含一个release.txt文件,其内容如下:
此版本包括以下项目:

  • 新库和新库-纳米:提交文件:sourceware.org/git/newlib-cygwin.git提交0 d 79 b 021 a4 ec 4 e6 b 9aa 1a 9 f6 db 0 e29 a137005 ce 7

此外,“../share/doc/gcc-arm-none-eabi/”中的自述文件包含:

  • C库使用 *

此工具链随两个基于newlib的预构建C库一起发布:一个是标准newlib(libc.a),另一个是newlib-nano(libc_nano.a),用于代码大小。
现在,我希望准确地重建“../arm-none-eabi/lib/thumb”中包含的所有libc. a和libc_nano. a
目前,我可以使用“*gcc-arm-none-eabi-6-2017-q2-update-linux.tar. bz 2 *”在Ubuntu上进行构建

$ # Downloaded newlib-cygwin (with corresponding hash) into folder newlib-cygwin
$ mkdir build
$ cd build
$ ../newlib-cygwin/configure --target=arm-none-eabi --disable-newlib-supplied-syscalls
$ make

如何配置新库以构建gcc-arm-none-eabi-6-2017-q2-update-linux.tar. bz 2中包含的libc. a和libc_nano. a的精确副本?

$ # Downloaded newlib-cygwin (with corresponding hash) into folder newlib-cygwin
$ mkdir build
$ cd build
$ ../newlib-cygwin/configure --target=arm-none-eabi --???
$ make
slhcrj9b

slhcrj9b1#

如果我没理解错的话,更详细的问题是:
“GNU Arm嵌入式工具链”开发人员在构建gcc-arm-none-eabi-6-2017-q2-update-linux.tar. bz 2存档中提供的newlib库时使用了哪些配置选项?
这些是针对newlib的:
--target=arm-none-eabi --enable-newlib-io-long-long --enable-newlib-register-fini --enable-newlib-retargetable-locking --disable-newlib-supplied-syscalls --disable-nls
这些是针对newlib-nano的:
--target=arm-none-eabi --enable-newlib-reent-small --disable-newlib-fvwrite-in-streamio --disable-newlib-fseek-optimization --disable-newlib-wide-orient --enable-newlib-nano-malloc --disable-newlib-unbuf-stream-opt --enable-lite-exit --enable-newlib-global-atexit --enable-newlib-nano-formatted-io --disable-nls
我是怎么得到它的?让我们来看看这个过程:
这些软件包构建在launchpad上,从这里你可以找到所有发生在lanuchpad上的builds。我选择了gcc-arm-none-eabi 6-2017q2-1 from 2017-10-24。在那里我可以找到buildlog。我用| grep "^+ " | grep "configure " | grep 'src/newlib'查看了构建日志,结果是:
+ /<<PKGBUILDDIR>>/src/newlib/configure --target=arm-none-eabi --prefix=/<<PKGBUILDDIR>>/install-native --infodir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-newlib-io-long-long --enable-newlib-register-fini --enable-newlib-retargetable-locking --disable-newlib-supplied-syscalls --disable-nls + /<<PKGBUILDDIR>>/src/newlib/configure --target=arm-none-eabi --prefix=/<<PKGBUILDDIR>>/build-native/target-libs --disable-newlib-supplied-syscalls --enable-newlib-reent-small --disable-newlib-fvwrite-in-streamio --disable-newlib-fseek-optimization --disable-newlib-wide-orient --enable-newlib-nano-malloc --disable-newlib-unbuf-stream-opt --enable-lite-exit --enable-newlib-global-atexit --enable-newlib-nano-formatted-io --disable-nls
我和夏洛克·福尔摩斯推断出第二行是配置为构建为newlib-nano(--enable-newlib-reent-small)的newlib,第一行是配置为构建为完整newlib的newlib。
要回答您的主题问题,以相同的方式重新编译newlib和newlib-nano,请将我上面发布的选项传递给newlib ./configure脚本。

nxowjjhe

nxowjjhe2#

有关如何配置编译器的提示,请参见:

  • $COMPILER_PATH/arm-none-eabi/include/newlib.h
  • $COMPILER_PATH/arm-none-eabi/include/newlib-nano/newlib.h

这里的#define与构建newlib时传递给“configure”的选项非常接近。

li9yvcax

li9yvcax3#

我认为给出ARM自2023年起构建的newlib/newlib-nano的默认配置会很有用(对于GCC 10):
对于新库:

  • -启用新库-io-long-long
  • -启用新库-io-c99格式
  • -启用新库重新检查验证
  • -启用新库寄存器结束
  • -启用新库可重定目标锁定
  • -禁用新库提供的系统调用
  • -禁用-nls
    对于Newlib-nano:
  • -禁用新库提供的系统调用
  • -启用新库重新检查验证
  • -启用新库并返回小
  • -启用新库可重定目标锁定
  • -禁用新库fv写入流io
  • -禁用新库fseek优化
  • -禁用新库宽方向
  • -启用新库-纳米内存分配
  • -禁用新库取消缓冲流选项
  • -启用精简退出
  • -启用新库全局退出
  • -启用新库纳米格式的io
  • -禁用-nls
    参考:https://community.arm.com/support-forums/f/compilers-and-libraries-forum/53310/gcc-arm-none-eabi-what-were-the-newlib-compilation-options

相关问题