RISC-V GCC编译器的构建过程相当复杂,需要经历多个阶段。首先,我们需要构建一个简易的编译器,它虽然不需要C库的头文件,但必须依赖启动文件。这个简易编译器,我们称之为pass1,同时它也是C库的引导程序。一旦我们有了这个引导程序,就可以进一步编译出完整的编译器,即pass2。在这个过程中,编译器会采用不同的...
目前RISC-V GCC工具链认为,在实际的情形中,一个程序的大小一般不会超过4GB的大小,因此在程序内部的寻址空间不能超过4GB的空间。而在64位的架构中,地址空间的大小远远的大于4GB的空间,因此针对RV64架构而言,RISC-V GCC工具链定义了(–mcmodel=)选项用于指定寻址范围的模式,使得编译器在编译阶段能够按照相应的策略编...
4.修改`binutils`让riscv gcc认识到这条指令 4.1 利用riscv-opcodes生成对应的宏 4.2 修改`binutils` 4.3 编译与测试 5.两种办法分析 1.概述 在riscv的处理器开发过程中,各家处理器往往都会涉及到自定义指令功能的添加。在处理器设计上,添加一些特定功能的指令是十分正常的,一般处理办法本文会讲述,让其识别客户...
Submodule'qemu'(https://git.qemu.org/git/qemu.git) registered for path 'qemu'Submodule'riscv-binutils'(https://github.com/riscv-collab/riscv-binutils-gdb.git) registered for path 'riscv-binutils'Submodule'riscv-dejagnu'(https://github.com/riscv-collab/riscv-dejagnu.git) registered for pa...
下载RISC-V GCC工具链源码包,可以从RISC-V官方网站或GitHub仓库获取。 解压源码包并进入目录。 配置编译选项,可以通过执行./configure命令进行配置,例如指定安装目录、优化等级等。 编译安装,执行make命令进行编译,然后执行make install命令进行安装。 二、RISC-V GCC工具链配置 安装完成后,需要将RISC-V GCC工具链添加...
我们在用RISC-V GCC做嵌入式开发的时候,免不了要和启动文件和链接文件等打交道,本篇文章记录了一些链接脚本相关的学习笔记。 1.基础概念 链接脚本的主要作用是描述输入文件中的段应当如何映射到输出文件中,并控制输出文件的内存布局。多数链接脚本都执行类似功能。但是,如果需要,链接脚本也可以使用下面所描述的命令指...
本文为RISC-V嵌入式开发入门篇1:RISC-V GCC工具链的介绍。 本文的目的是对RISC-V GCC工具链进行简单的中文科普与介绍。 注:本文力求通俗易懂,主要面向初学者,对RISC-V GCC工具链有所了解的读者可以忽略此文。 1 RISC-V GCC工具链种类 在本号上次发表的文章《编译过程简介》中已经介绍了通用的GCC工具链,RISC...
risc-v GCC内嵌汇编 1 背景 有时候需要对比不同指令的性能,这时候如果会手撸汇编是最方便的,但汇编掌握起来太麻烦,我们可以使用内嵌汇编,在C代码中直接内嵌汇编语句,大大方便了程序的设计。 2 内嵌汇编语法 asmvolatile("Instruction_l;\ Instruction 2;\ ...
WCH刚刚发布了MRS社区版的V1.60版本,自带了GCC12,之前一直使用GCC8。由于之前实测RISC-V比ARM的代码密度差不少,所以这里主要关注尺寸优化。 使用同样一个dhrystone测试工程,芯片为CH32V203C8T6,全部-Os尺寸优化 修改RISC-V Toolchains Paths: GCC8为${eclipse_home}\toolchain\RISC-V Embedded GCC\bin ...
1 入口 ENTRY 关键字,确定程序入口在_start处 2 内存布局 内存分配,FLASH只读可执行,起始地址为0x00000000.大小为448K,448K也可以写成16进制;RAM读写可执行,起始地址为0x20003800,大小为18K。 3输出段 .init输出段,提供了两个符号_sinit和_einit,_sinit为FLASH起始地址,紧接着4字节对齐之后放的是输入段.ini...