APP下载

基于Cygwin的编译工具链的使用介绍

2018-05-09白明明

科学与财富 2018年8期
关键词:编译器模拟器内核

白明明

摘 要:随着嵌入式技术蓬勃发展,对嵌入式软件技术提出新挑战。 嵌入式软件开发常用交叉编译方式,以Linux为主机系统,GNU工具链为交叉编译系统,为嵌入式系统生成可执行程序为最主要的方案。本文阐述基于GNU工具链的嵌入式开发实践,围绕如何在Window上用Cygwin模拟器、GNU及其它开源工具,如Android的NDK进行嵌入式开发,探讨其中一些关键的实现技术和实践细节。关键词:Cygwin、GNU、交叉编译、NDK、编译工具链一、引言随着对Linux的深入研究,针对某类应用开发一个嵌入式系统渐渐成为热门。这需要一套开发工具,而商业开发工具都非常昂贵。GNU自由软件给开发者带来了福音,它是免费的,遵循GPL协议。引导程序、嵌入式操作系统内核、运行库乃至应用程序都可用它来开发。本文提出了一种在Window上基于Cygwin模拟器用GNU 工具开发软件的方式。二、交叉编译概述编译器常分类为: “本地”编译器:生成用于它本身处计算机和操作系统相同的环境下运行的目标代码。 交叉编译器:生成用于其他平台上运行的目标代码,对新硬件平台非常有用。 三、开发环境的建立GNU工具基于Linux环境。在Windows下使用它方式:用终端软件登陆Linux服务器;安装虚拟机和Linux系统; 安装Linux模拟器;可单机运行,占用资源少,但配置麻烦。3.1 安装CygwinCygwin 是一套可运行在Windows上的Linux 模拟器。它类似Windows cmd 的Shell环境界面,可使用大部分Linux 软件和功能。用它可以方便地在Windows构建出Linux 平台的库或应用程序。它包含一套在Windows 系统下实现POSIX 系统调用的API,还有一套GUN 开发工具,可以方便地在Windows 下进行跨平台开发。先下载安装程序并运行,下一步“选择安装类型”,选择网络安装;下一步“选择安装目录”。下一步“选择本地包目录”设置下载的安装包放置路径。下一步 “网络连接类型”。下一步“选择下载网站”。下一步“选择下载安装包”加载安装包列表;安装测试如下:运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令。cygcheck –c检查安装cygwin已经安装的包的版本和状态然后依次输入gcc –version, make –version等进行测试。3.2 配置脚本运行Cygwin会先执行.bash_profile。若要自定义的工具。例如,则在文件“source ~/.git-completion.bash”前加“PATH=$PATH:/cygdrive/d/ android-ndk-r11c/build”。表示把D盤的“android-ndk-r11c/build”路径添加到搜索路径中。下面是自动化编译脚本的关键内容,它用于设置编译工具链,主目录,启动模拟器:set PATH=/cygdrive/d/build-arm-tools/arm-2012.09/bin;%PATH%.. …if %a% equ y G:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico /bin/env _T=%V /bin/bash --login -i -c "source xxx.sh"" G:\cygwin\bin\mintty.exe "为mintty所在位置。-i用于指定窗口左上角图标。/bin/env _T=%V用于设置在启动mintty后的shell里面环境变量_T的值,_T为路径参数,其中%V表示windows传入的路径参数(可在.bash_profile使用_T)。/bin/bash -l (-l相当于--login)表示启动登录shell。--login -i -c "source xxx.sh"登陆bash执行shell脚本xxx.sh。四、编译工具链Linux嵌入式系统的交叉编译工具链,可从芯片提供商处获取;或者从网上下载;或者自己编译生成。后者需要各种源代码,至少需要binutils、gcc、linux、C运行时库(glibc、newlib、bionic等)。4.1 GCC嵌入式系统用交叉编译在本机编译目标系统的可执行软件,在这个过程中需要使用交叉编译工具链,包括交叉编译的编译器、连接器、目标库等。如果在ARM目标板上运行Linux系统,因为Linux内核代码使用GCC编译器,为此GNU提供了GCC编译器针对ARM目标平台的支持。由于GCC开源的特点,用户可以手动编译生成符合自己需要的ARM GCC编译器等。如Linux平台ARM的交叉编译器是arm-linux-gcc。编译交叉编译工具链要用到库和源代码,如Linux内核代码、glibc库、工具程序、内核线程包、编译器。还可通过编译工具链的脚本crosstool建立交叉编译环境,通过指定不同的参数,crosstool脚本建立指定版本的GCC编译器和glibc程序库,还可以直接下载已经编译好的工具链,由于linux内核与GCC编译器存在依赖关系,选择目标平台Linux内核版本后,可以参考内核版本说明对GCC编译器的最低要求选择GCC编译器版本。步骤如下:1.建立Linux内核头文件:交叉编译器需要通过内核头文件获取目标平台的系统函数调用信息,需要通过对其脚本配置生成目标平台的头文件。2.编译安装binutils:它是交叉编译工具链中的工具包,包括连接器、汇编器和用于目标文件和档案的工具,针对二进制代码的维护。3.编译安装GCC的C编译器:建立arm-linux-gcc交叉编译器,用于编译内核、bootloader等,并建立glibc库。4.编译安装glibc库:GNU glibc库是Linux系统程序的组成部分,用户开发的目标平台应用程序,需要glibc库的支持。5.编译安装GCC的C、C++编译器:在建立的glibc库基础上,编译gcc支持C和C++语言程序的编译。4.2 NDKAndroid NDK(Native Development Kit)原生开发工具集,允许Android应用开发人员把他们的C和/或C++源文件所编译生成的原生机器代码嵌入到他们的应用程序包中。Android VM支持通过JNI调用原生代码,因此在Android平台上可以支持“Java+ C and/or C++”的编程方式。NDK是Android平台支持C开发的主要工具。4.3其它工具链Linaro是 2010年台北国际计算机展期间ARM、TI与IBM等厂家合资成立的非赢利Linux基础架构软件研发商。目标旨在改进与优化在ARM-based架构上运行的开放原始码软件及开发工具,透过这间合资公司推出开放原始码的底层软件工具,解决ARM生态系中,重复投资造成的资源浪费。五、结束语本文介绍介绍了通过Cygwin使用Linaro和CodeSourcery,GNU GCC构建其它Linux嵌入式系统的应用程序。实践证明,使用这些工具开发嵌入式操作系统投入小,而软件质量可以与商业嵌入式编译工具软件相媲美。

猜你喜欢

编译器模拟器内核
了不起的安检模拟器
强化『高新』内核 打造农业『硅谷』
盲盒模拟器
划船模拟器
基于相异编译器的安全计算机平台交叉编译环境设计
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
微生物内核 生态型农资
动态飞行模拟器及其发展概述
通用NC代码编译器的设计与实现