交叉编译调试环境建立在宿主机(也就是你的电脑)上。对于的开发板叫目标板。要全然手工的建立针对某特定的目标板的交叉编译环境是一个很麻烦的过程。有些人会问,为什么须要建立特定的环境,从网上下载一个通用的不即可了?既然很麻烦,有没有简单的方法,假设有简单的方法,是不是手工的就不要学习了?以下给大家具体介绍。
linux内核被设计成必须使用GNU的gcc来编译,而不是不论什么一种c编译器都能够。gcc对c进行了不要的扩展,这使得他更适合开发操作系统内核。linux内核和编译器的关系很密切,甚至不同版本号的内核须要使用不同版本号的gcc编译器。比方。假设目标板採用的某一个是ARM核的处理器。则须要使用某个版本号的arm-linux-gcc。
不仅是linux内核,linux应用程序编译时,也须要使用交叉gcc编译器。它依赖于宿主机的操作系统。因此。针对嵌入式平台建立交叉编译系统,一般是在pc上建立目标代码来为目标板平台的编译工具链(toolchains)。它能够编译和处理linux内核及应用程序。一般来说,须要下面几个工具的源代码:binutils。gcc。glibc-linuxthreads和linux内核源代码等。
鉴于手工配置这些工具链非常麻烦。非常多嵌入式开发板的生产商都提供了建立交叉编译环境的脚本或者提供了已经配置好交叉编译环境的linux虚拟机文件,仅仅须要执行这样一个脚本或者是使用现有的虚拟机文件就完毕了整个环境的搭建。此外,通过crosstool(一个专门建立编译工具链的脚本的工具),能够在非常大程序上简化工作量。
以下对这些工具链的内容及相关软件进行具体介绍:
(1)binutils
一组编译开发工具。包含连接器,汇编器以及其它用于目标文件和档案的工具。
(2)gcc
gcc(GNU Compiler Collection)是linux下的高级语言编译器,它不但可以支持c/c++语言的编译,并且可以支持FORTRAN。JAVA,ADA等编程语言。
(3)glibc
提供系统调用和基本函数的c库。如open。malloc。printf等。
全部linux上的c程序编译时都须要与glibc库连接。假设是动态连接的程序。在执行时也须要用到它。
(4)glibc-linuxthreads
POSIX(portable operating system interface,可移植操作系统接口)线程库。
(5)linux内核源代码及针对某一个特定P平台的补丁包
须要依据项目的须要。选择合适的linux内核版本号。另外,针对不同的cpu类型,一般存在特定的补丁程序,在进行内核编译曾经。须要首先对linux内核进行打补丁的操作。
至于手动配置工具链,过程较为麻烦,须要了解的能够看我之前推荐的那本书。在132页。