- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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⼯具链并添加⾃定义指令集。
您可能关注的文档
最近下载
- 【高清可复制】G13—100SQF-标准图集.pdf
- 天津市滨海新区3年(2020-2022)九年级数学上学期期末试题汇编-02填空题.doc VIP
- 投资学(汪昌云第五版)习题及参考答案.pdf VIP
- 第二单元第三章+微生物(复习课件)生物人教版2024七年级上册.pptx VIP
- iso13485内审员培训教材.pptx VIP
- 国家基层糖尿病神经病变诊治指南(2024版) .pptx VIP
- 工程桩基引孔施工方案.docx
- 最新-房室结双径路.ppt VIP
- (正式版)S-H-T 3075-2024 石油化工钢制压力容器材料选用规范.docx VIP
- 北京市不同流域典型降雨时空格局分析与应用.pdf VIP
原创力文档


文档评论(0)