首页 > 代码库 > 嵌入式系统开发之环境的建立

嵌入式系统开发之环境的建立

交叉编译调试环境建立在宿主机(也就是你的电脑)上,对于的开发板叫目标板。要完全手工的建立针对某特定的目标板的交叉编译环境是一个非常麻烦的过程。有些人会问,为什么需要建立特定的环境,从网上下载一个通用的不就行了?既然非常麻烦,有没有简单的方法,如果有简单的方法,是不是手工的就不要学习了?下面给大家详细介绍。
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页。

嵌入式系统开发之环境的建立