RISC-V GCC:-specs=nano.specs 的作用

RISC-V GCC:-specs=nano.specs 的作用

nona.specs 将 -lc 替换成 -lc_nano,使有精简版的C库替代标准C库,可以减少最终程序映像的大小。

https://blog.csdn.net/zoomdy/article/details/100727279
zoomdy at 163 dot com

-specs 的作用

首先看 gcc 的文档:

-specs=file
Process file after the compiler reads in the standard specs file, in order to override the defaults which the gcc driver program uses when determining what switches to pass to cc1, cc1plus, as, ld, etc. More than one -specs=file can be specified on the command line, and they are processed in order, from left to right. See Spec Files, for information about the format of the file.

原来咱们执行的 gcc 并不是真正的编译器,而是 driver ,即驱动器,gcc 驱动器根据命令行的参数再调用真正的编译器(cc1,cc1plus)、汇编器(as)、链接器(ld)。gcc 驱动器调用 cc1、as、ld 时遵循一定的规则,这个规则就叫做 specs,gcc 有一套自带的 specs ,就是帮助中所说的 standard specs filestandard specs file 可以通过命令打印:

riscv-none-embed-gcc -dumpspecs

如果命令行中没有指定 -specs=file 参数,那么 gcc 就使用自带的 specs,如果指定了 -specs=file 参数,那么在处理完自带的 specs 后,继续处理参数给出的 specs 文件,而且可以通过多个 -specs=file 参数指定多个 specs 文件,gcc 会按出现的次序依次处理。后面的 specs 文件可以覆盖、修改、删除前面的 specs 中的规则。这里的规则是指 gcc 以什么样的参数调用 cc1、as、ld 。

cc1 是真正的 C 编译器,cc1plus 是 C++ 编译器。

nona.specs 的作用

可以翻看一下 nano.specs 的文件内容,文件位于 <gcc-install-dir>/riscv-none-embed/lib/ 目录下:

%rename link                nano_link
%rename link_gcc_c_sequence                nano_link_gcc_c_sequence
%rename cpp		nano_cpp

*cpp:
-isystem =/include/newlib-nano %(nano_cpp)

*nano_libc:
-lc_nano

*nano_libgloss:
%{specs=nosys.specs:-lnosys}

*link_gcc_c_sequence:
%(nano_link_gcc_c_sequence) --start-group %G %(nano_libc) %(nano_libgloss) --end-group

*link:
%(nano_link) %:replace-outfile(-lc -lc_nano) %:replace-outfile(-lg -lg_nano)  %:replace-outfile(-lrdimon -lrdimon_nano) %:replace-outfile(-lstdc++ -lstdc++_nano) %:replace-outfile(-lsupc++ -lsupc++_nano)

*lib:
%{!shared:%{g*:-lg_nano} %{!p:%{!pg:-lc_nano}}%{p:-lc_p}%{pg:-lc_p}}

specs 文件的格式请参考 Spec Files

nona.specs 将 -lc 替换成 -lc_nano,即:使有精简版的C库替代标准C库。精简的C库有些特性是被排除掉的,比如 printf* 系列函数不支持浮点数的格式化,因为做了精简,因此最终生成的程序映像要比使用标准C库要小一些。如果没有用到这部分特性,就可以通过 -specs=nano.specs 节约有限的代码空间,如果使用了该参数后发现有些C库函数行为不符合预期,比如 sprintf 没有格式化浮点数,那么将这个参数去掉。

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《计算机组成与设计:RISC-V版本,硬件与软件的互动》是一本关于计算机体系结构的教材。它涵盖了计算机硬件和软件之间的相互作用。 首先,这本教材深入介绍了计算机组成的基本概念和原理。它讲解了计算机硬件的各个组成部分,如中央处理器、存储器、输入输出设备等,并详细解释了它们之间的工作原理和互动方式。读者可以通过这些内容全面了解计算机硬件的工作方式。 此外,该教材还重点介绍了RISC-V指令集架构。RISC-V是一种现代的、开放的指令集架构,具有简洁、规范和可定制的特点。本书详细描述了RISC-V指令集的设计和实现,并解释了它与计算机硬件的紧密关系。读者可以通过学习RISC-V指令集,了解指令的执行过程,理解计算机在硬件层面上如何处理指令和数据。 在硬件和软件的交互方面,这本教材强调了它们之间的密切联系。它介绍了硬件和软件之间的界面和通信方式,如总线、中断和输入输出等。通过学习这些内容,读者将了解到计算机硬件和软件是如何相互配合工作的。它还讨论了如何进行硬件和软件的调试和优化,以提高计算机的性能和可靠性。 总的来说,《计算机组成与设计:RISC-V版本,硬件与软件的互动》这本书从计算机硬件和软件的角度全面介绍了计算机的组成和互动方式。通过学习这本教材,读者可以深入了解计算机系统的工作原理,并掌握如何设计和优化计算机系统的能力。 ### 回答2: 《计算机组织与设计:RISC-V版》是一本关于计算机硬件和软件互联的重要教材。这本书的主要内容包括计算机组织与结构、指令级并行、存储系统、互连技术、输入输出系统等。该书以RISC-V指令集架构为基础,详细介绍了计算机的硬件结构和设计原理,并与软件编程环境相结合。这种硬件软件相互补充的设计使得计算机能够高效、稳定地运行。 该书的特点之一是使用清晰的语言和具体的实例解释计算机硬件和软件之间的关系。通过逐步引入不同的主题和概念,读者可以深入了解计算机硬件组成的基本原理,并了解它们与软件编程之间的互动关系。此外,书中提供了大量的实践案例和练习题,使读者能够巩固所学的知识,并自主进行实践和思考。 在讲解硬件设计方面,该书详细讨论了计算机的基本组成部分,如处理器、存储器、输入输出设备以及互连技术等。它深入探讨了各个组件的工作原理和设计方法,包括流水线、缓存、并发控制等。此外,该书还介绍了指令级并行的相关技术,如流水线、超标量、动态调度等,使读者能够了解如何通过优化硬件设计来提高计算机的性能。 在软件编程方面,该书介绍了RISC-V指令集的特点和使用方法。它详细讲解了指令的结构和功能,以及如何使用汇编语言进行编程。此外,该书还介绍了操作系统、编译器和调试工具等软件开发环境的基本原理和使用方法,使读者能够理解软件和硬件之间的交互关系,以及如何进行有效的软件开发。 总之,《计算机组织与设计:RISC-V版》通过深入浅出的讲解和大量实例的引导,将计算机硬件和软件的复杂性简化为易于理解和学习的内容。它为读者提供了全面而深入的知识,使他们能够了解计算机系统的工作原理、优化硬件设计和进行高效软件编程。这本书是学习计算机组成与设计的重要参考资料,对于想要深入了解计算机硬件和软件的读者来说是一本不可或缺的教材。 ### 回答3: 《计算机组织与设计RISC-V版:硬件软件接口》介绍了计算机硬件和软件的互动关系。它涵盖了计算机系统中硬件和软件之间的接口,以及它们是如何相互作用的。 该书首先介绍了计算机体系结构的基本知识,包括指令集架构、计算机组成和设计原则等。接着,它深入探讨了RISC-V架构,该架构是一种现代的指令集架构,被广泛用于教育和学术研究。 书中还详细讨论了硬件和软件之间的接口,包括指令集、寄存器、内存和输入输出等。通过深入的解释和实例演示,读者可以了解硬件和软件之间的通信和协作方式。 此外,该书还介绍了一些高级主题,如流水线和并行处理。这些主题涉及到优化计算机性能的技术和策略,使读者能够更好地理解复杂的计算机系统结构。 《计算机组织与设计RISC-V版:硬件软件接口》适用于计算机科学、计算机工程和相关专业的学生。它是一本全面介绍计算机系统结构和设计原理的权威教材,旨在帮助读者深入理解计算机硬件和软件之间的互动关系。读者可以通过阅读本书,获得一种全面的计算机系统知识,为日后的学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值