SyntacoreRISCV工具链使用(四)编译器与链接脚本分析.pdfVIP

SyntacoreRISCV工具链使用(四)编译器与链接脚本分析.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

SyntacoreRISCV⼯具链使⽤(四)编译器与链接脚本分析

Syntacore脚本分析

在第⼀篇博客.中提到下载Syntacore的预编译⼯具链,我们先看看⼯具链提供了哪些⼯具。

$cd$RISCV_TOOLKIT_DIR/riscv-known-elf-gcc/bin/

ls

可以看到

先说明⼀下⼯具的命名规则,以下内容转载⾃博客

riscv64-unknown-linux-gnu-”前缀表⽰该版本的⼯具链是64位架构的Linux版本⼯具链。注意:此Linux不是指当前版本⼯具链⼀

定要运⾏在Linux操作系统的电脑上,此Linux是指该GCC⼯具链会使⽤Linux的Glibc作为C运⾏库,请参见《编译过程简介》了解

Glibc的更多信息。

同理,“riscv32-unknown-linux-gnu-”前缀的版本则是32位架构。

注意:此处的前缀riscv64(还有riscv32的版本)与运⾏在64位或者32位电脑上毫⽆关系,此处的64和32是指如果没有通过-

march和-mabi选项指定RISC-V架构的位宽,默认将会按照64位还是32位的RISC-V架构来编译程序。有关-march和-mabi选项的

含义,请参见第3节。

以“riscv64-unknown-elf-”为前缀的版本,则表⽰该版本为⾮Linux(Non-linux)版本的⼯具链。注意:

此Non-Linux不是指当前版本⼯具链⼀定不能运⾏在Linux操作系统的电脑上,此Non-Linux是指该GCC⼯具链会使⽤newlib作为C

运⾏库,请参见本号上次发表的⽂章《嵌⼊式开发特点》中了解newlib的更多信息。

同上理,此处的前缀riscv64(还有riscv32的版本)与运⾏在64位或者32位电脑上毫⽆关系,此处的64和32是指如果没有通过-

march和-mabi选项指定RISC-V架构的位宽,默认将会按照64位还是32位的RISC-V架构来编译程序。有关-march和-mabi选项的

含义,请参见第3节。

以“riscv-none-embed-”为前缀的版本,则表⽰是最新为裸机(bare-metal)嵌⼊式系统⽽⽣成的交叉编译⼯具链,所谓裸机

(bare-metal)是嵌⼊式领域的⼀个常见形态,表⽰不运⾏操作系统的系统。该版本使⽤新版本的newlib作为C运⾏库,并且⽀持

newlib-nano,能够为嵌⼊式系统⽣成更加优化的代码体积(Code

Size)。开源的蜂鸟E203MCU系统是典型的嵌⼊式系统,因此将使⽤“riscv-none-embed-”为前缀的版本作为RISC-V

GCC交叉⼯具链。注意:

此版本编译器由于使⽤newlib和newlib-nano作为C运⾏库,所以必须对

newlib底层的桩函数进⾏移植,否则⽆法正常使⽤调⽤底层桩函数的C函数(譬如printf会调⽤write桩函数)。

根据上述描述,我们的⼯具使⽤newlib作为C运⾏库,默认64位架构指令集。其中我们⽤到的⼯具有gcc(编译器),objdump(⽣成

dump⽂件⼯具)和objcopy(⽣成hex⽂件⼯具)。

再来分析syntacore开源代码所提供的默认编译脚本。

$cd$SCR1_DIR/sim/test/

ls

可以看到数个⽤于测试的⽂件夹

我们以dhrystone的测试⽤例为例解析默认的脚本⼯具所⼲的事。

$cddhrystone21

$gvimMakefile

以下内容说明需要⽣成的所有中间依赖项

以下内容表⽰⽣成依赖项的过程

我们直接看运⾏的结果来解析脚本如何⽣成我们需要的⽂件。

$cd$SCR1_DIR

$gvimMakefile

如下所⽰,TARGETS只保留dhystone21

退出后,删除build⽂件夹中内容然后make

$rm-rfbuild/

$make

以上是编译脚本,默认使⽤o3优化

以上是链接脚本并⽣成elf⽂件

以上⽣成hex⽂件和dump⽂件。

下⼀篇博客会讲解如何⾃⼰编译⽣成riscvgcc⼯具链并添加⾃定义指令集。

文档评论(0)

187****9531 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档