以下内容摘自《步步惊芯——软核处理器内部设计分析》一书
主要是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)是一个功能很强大的调试工具,可以让用户调