OpenRISC—OR1200编译链环境
admin 于 2021年01月02日 发表在 软核OR1200

最近在看《步步惊芯—软核处理器内部设计分析》这本书,此书详细分析了软核OR1200处理器,正好自己也在学习相关知识,遂萌生想法,准备将相关笔记做成一个系列的文章,记录在此。

此书出版于2013年,距今已经过去很多年,书中不少链接已无法使用,因此也做了一些修正。

一. OR1200是什么?

OpenRISC项目包含OpenRISC 1000 和 OpenRISC 2000 两个子项目。

OpenRISC 1000 是一个开放架构,其目标是在中、高性能的网络和嵌入式计算环境中使用。强调通过多种措施改善性能的同时,力求简单、低功耗。主要有以下特点:

  • 免费、开源架构;

  • 32或64位线性地址空间

  • 简单、长度统一的指令,有基本指令集及扩展指令

  • 简单的内存寻址方式

  • 32位通过寄存器,也可以有多组影子寄存器

  • 支持分支延迟

  • 可以采用哈佛结构,即分开的指令、数据缓存,分开的指令、数据MMU,也可以不分开

  • 对异常(Exception)情况进行简单区分

  • 支持快速上下文切换

关于OR1200各个子模块功能,后续会单独详细介绍。

二. OR1200平台GNU工具链

GNU工具链包括:GCC、Glibc、GDB和GNU Binutils。

1. GCC

GCC(GNU Compiler Collection)主要的工具链包括gcc、g++、cpp等。cpp为C预处理器,主要用在编译前的预处理。

2. Glibc

Glibc(GNU libc)是GNU的C标准库,移植GNU工具链不可或缺的部分。主要由两部分组成,第一部分是头文件,第二部分是库的二进制文件,库的二进制文件又包含动态和静态两个版本。有了Glibc就可以使用C语言开发程序。

3. GDB

GDB(GNU symbolic debugger)功能强大的调试工具,可以单步,断点调试;用户可以查看变量、寄存器、内存和堆栈等信息。

4. GNU Binutils

GNU Binutils是一组二进制工具集,用来编译、测试和分析软件。主要工具:as、ld、ar、addr2line、objcopy、objdump、size等。

(1)as(GNU Assembler):GNU汇编器,对GCC输出的文件进行汇编产生目标文件;

(2)ld:链接器,编译程序最后调用ld,把目标文件和归档文件链接在一起,重定位数据并链接符号引用;

(3)ar:用于建立、修改和提取档案文件(archives)。档案文件经常被用作库文件。

(4)addr2line:给定一个地址和可执行程序,addr2line来确定该地址所对应的文件和行号。

(5)objcopy:同于将一种格式的目标文件复制另外一个格式。

(6)objdump:用于列出二进制数文件的各种信息。

(7)size:用于列出目标文件或者档案文件各段的大小。

三. 编译链搭建

1. 下载最新编译链

访问github地址,选择最新的版本 or1k-elf-multicore_gcc5.3.0_binutils2.26_newlib2.3.0-1_gdb7.11.tgz 进行下载。

2. 添加环境变量

将压缩包解压到linux系统(笔者采用Ubuntu16.04 x64)下 /opt 目录,编辑配置文件: 

sudo gedit /etc/bash.bashrc

行尾添加如下内容:

#or1200编译链 20201219
export PATH=$PATH:/opt/or1k-elf/bin/

使配置立即生效:

source /etc/bash.bashrc

3. 检查安装环境

终端中输入or1k-elf- 按下tab,查看是否打印编译链信息。

or1k-elf-工具链.png

四. 安装or1ksim

or1ksim,是一个OpenRISC架构的模拟器。通过模拟器可以验证程序能不能得到预期结果。

1. 下载or1ksim

访问github地址,直接下载 or1ksim 工具到本地。

2. 添加环境变量

将压缩包解压到 /opt 目录,方法同“OR1200平台的GNU工具链操作”,编辑配置文件: 

sudo gedit /etc/bash.bashrc

行尾添加如下内容:

export PATH=$PATH:/opt/or1ksim/bin/

使配置立即生效:

source /etc/bash.bashrc

3. 检查安装环境

输入指令,终端打印输出。

or1k-sim -h

or1k_sim_输出.png

至此,OR1200相关编译环境搭建完成。

下一篇:《OpenRISC—OR1200的编译及ELF文件介绍》

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:OR1200,GNU工具链,or1ksim