您的位置:首页 > 其它

or1200开发环境的安装

2014-03-20 13:54 169 查看
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书

主要是GNU开发工具链的安装,有了GNU工具链提供的工具,我们可以在Linux环境下将汇编、C代码编译成OR1200平台的可执行代码,这就是交叉编译的过程。有了OR1200的可执行代码,就能够在OR1200模拟器OR1KSim中运行该可执行代码,观察其是否如预期那样执行。

在介绍GNU开发工具链之前简单说明交叉编译的概念,在嵌入式开发中,开发平台与运行平台往往是不同的,这是因为运行平台上一般都资源有限,不能够安装编译开发环境,因此需要在其他性能更好的平台上安装编译环境,比如我们常在x86的平台上开发OR1200、ARM的应用程序,但是x86与OR1200、ARM是不同的处理器体系结构,也就是处理器的指令集不同,那么就需要x86上的编译器编译得到能够在OR1200、ARM架构下执行的目标代码,这就是交叉编译。图2.1显示x86平台与OR1200平台上“寄存器相与”指令对应不同的二进制编码。



图2.1 x86平台与OR1200处理器“寄存器相与”指令的二进制编码是不一样的

因此我们在x86上开发程序的时候就需要针对不同的目标平台使用不同的编译工具,从而得到可以在目标平台上执行的二进制代码。在这方面GNU工具链是一个很好的选择。GNU工具链 (GNU Toolchain) 是一组用于开发应用程序和操作系统的编程工具的集合,这些工具构成了一个完整的系统,最重要的是其支持多种目标平台,其中就包括本书要介绍的OR1200。

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

1、GCC

GCC(GNU Compiler Collection)主要的工具包括cpp、g++、gcc、gcov、gprof等。其中cpp是C预处理器,主要用于在编译C、C++或Objective-C源代码之前对它们进行预处理,由编译器自动调用。g++和gcc可以认为分别是C++和C编译器。

2、Glibc

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

3、GDB

GDB(GNU symbolic debugger)是一个功能很强大的调试工具,可以让用户调试一个程序,包括让程序在希望的地方停下,此时,用户可以查看变量,寄存器,内存及堆栈,而且可以修改变量及内存值。

4、GNU Binutils

GNU Binutils(Binary Utilities) 是一组二进制工具集,用来编译、测试和分析软件。其中主要的两个工具是as和ld。as是GNU汇编器,通常也称为GAS(GNU Assembler),ld是GNU链接器,as对GCC的输出文件进行汇编产生目标文件,然后由ld链接目标文件、重定位数据,从而产生可执行文件。此外,GNUBinutils还包括其它一些工具,如下:

(1)addr2line:用于将程序中的地址对应到文件名和相应的行号。给定一个地址和一个可执行文件,addr2line使用可执行文件中的调试信息来确定该地址所对应的文件和行号。

(2)ar:用于建立、修改和提取档案文件 (archives)。档案文件经常被用作库文件,保存程序常用的函数过程。

(3)c++filt:C++和Java中都有重载函数的特性,编译器要区分重载函数,就需要对函数标识符进行编码转换成一个汇编级别的标签 (label),这个过程称为名字改编 (name mangling) 或名字修饰 (name decoration)。而c++filt所执行的就是这个过程的逆过程。

(4)dlltool:用于创建Windows动态链接库。

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

(6)gold:是一种比ld更快,但只针对ELF文件格式的链接器。

(7)nm:用于列出二进制文件 (包括库文件和可执行文件) 中的符号,这些符号可以是函数、全局变量、静态变量等等。

(8)objcopy:用于将一种格式的目标文件复制成另外一种格式。

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

(10)ranlib:用于为档案文件生成索引信息,这样可以提高档案文件的访问速度。

(11)readelf:类似于objdump,但是它只能处理ELF格式的文件,并且没有使用GNU BFD库。

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

(13)strings:用于列出目标文件中的可打印字符串。

(14)strip:用于移除目标文件中的符号,以减少程序文件的大小,这对于嵌入式系统比较有用。

GNU工具链可谓博大精深,功能全面,诸位读者不要惊慌,本书不是一本介绍GNU工具链的书,只是使用到了其中一点工具(实际只有as、ld,因为测试代码都是用汇编写的),所以不懂GNU工具链没有关系,笔者会在使用到其中工具的时候做一个简单介绍,这就足够了。

针对目标平台OR1200的GNU工具链,有三种安装方法:

方法一:下载源文件,在Linux环境下自行编译

方法二:下载编译好的针对OR1200处理器的GNU工具链,可在Linux环境下安装使用

方法三:下载一个Ubuntu的虚拟机文件,里面安装好了针对OR1200处理器的GNU工具链

方法一笔者试过,容易出问题,而且比较耗时,当然对GNU工具链有着强烈兴趣的朋友可以尝试。方法二笔者没用过。方法三简单直接,速度快,不易出错,而且基本都是Windows下的操作,适合新手,所以建议使用方法三,本书也只介绍方法三。

在浏览器中输入地址:ftp://openrisc.opencores.org/virtualbox-image/,FTP的用户名和密码都是openrisc,登录后会出现如图2.2所示界面。



图2.2 Ubuntu虚拟机镜像下载

下载最新的那个文件就可以了,笔者使用的是2011-12-15版。下载完成后解压该文件,大约4GB左右。此时还需要下载VisualBox以打开该文件。VisualBox是一款开源的虚拟机软件,本书使用的是4.1.22版。下载完成后安装VisualBox,安装完成后打开VisualBox,界面如图2.3所示。



图2.3 VisualBox主界面

点击“新建”出现“新建虚拟机”向导,点击“下一步”,出现如下界面:



图2.4 新建虚拟机设置一

此处操作系统选择Linux,版本选择Ubuntu,点击下一步,设置内存大小,如图2.5所示。



图2.5 新建虚拟机设置二

内存大小依据个人情况设置,本人设置的是512M,已经够用了,毕竟我们需要编译的程序都是十分简单的,点击下一步,选择“使用现有的虚拟硬盘”,然后选择解压后的虚拟机文件。



图2.6 新建虚拟机设置三

点击“下一步”,VisualBox会将用户刚才的设置都列出来,确认无误后,点击“创建”,这样虚拟机就创建好了。启动虚拟机,显示如图2.7所示。



图2.7 Ubuntu虚拟机桌面

双击左边的“终端”图标,就可以打开终端,在终端中输入or32-elf-,然后按两次Tab键,会列出虚拟机中已安装的针对OR1200平台的所有编译工具,如图2.8所示。



图2.8 Ubuntu中已安装的编译工具

可见之前介绍过的GNU工具链中的GCC、as、ld、gdb等都包括在内。这样GNU工具链就安装完成了。Ubuntu虚拟机提供的功能远不止GNU工具链,还包括OR1K模拟器、用于硬件调试的OR_DEBUG_PROXY、OpenRISC平台参考SoC设计ORPSoCv2,其中在本书的研究过程中需要使用到OR1K模拟器——OR1KSim,2.2.5节会介绍其使用方法。

最后,因为宿主机是Windows平台,而且在后面仿真时使用的ModelSim也是Windows平台的,为了方便文件的传递,这里需要设置虚拟机与宿主机的文件共享。打开VisualBox中虚拟机的设置界面,选择“共享文件夹”,如图2.9所示。



图2.9 虚拟机与宿主机共享文件夹设置步骤一

点击界面右边的添加文件夹按钮,出现如图2.10所示界面:



图2.10 虚拟机与宿主机共享文件夹设置步骤二

在其中选择共享文件夹的路径,设置名称,参考如上设置,然后启动虚拟机,打开终端,输入命令:

sudo mount –t vboxsf UbuntuShareFolder /mnt/sharefolder


该命令的作用是将共享文件夹挂载在/mnt/sharefolder目录下,sudo表示以Root用户身份执行该命令,终端会提示输入密码,Ubuntu虚拟机默认Root用户的密码是openrisc。这样就实现了虚拟机与宿主机的文件共享,对虚拟机而言共享文件放在/mnt/sharefolder路径下,对宿主机而言共享文件放在图2.10所示的E盘UbuntuShareFolder文件夹下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: