华清远见——嵌入式培训专家应用开发班培训教材“黑色经典”系列之《嵌入式Linux应用程序开发详解》第5章嵌入式Linux开发环境的搭建本章目标在了解了嵌入式开发的基本概念之后,本章主要学习如何搭建嵌入式Linux开发的环境,通过本章的学习,读者能够掌握以下内容。掌握嵌入式交叉编译环境的搭建掌握嵌入式主机通信环境的配置学会制作交叉编译工具链学会配置Linux下的minicom和Windows下的超级终端学会在Linux下和Windows下配置TFTP服务学会配置NFS服务学会编译Linux内核学会搭建Linux的根文件系统熟悉嵌入式Linux的内核相关代码的分布情况掌握Bootloader的原理了解U-Boot的代码结构和编译方法QQ:313638714华清远见——嵌入式培训专家章中已经详细讲述过,搭建交叉编译环境是嵌入式开发的第一步,也是必备一步。搭建交叉编译环境的方法很多,不同的体系结构、不同的操作内容甚至是不同版本的内核,都会用到不同的交叉编译器,而且,有些交叉编译器经常会有部分的BUG,这都会导致最后的代码无法正常地运行。因此,选择合适的交叉编译器对于嵌入式开发是非常重要的。交叉编译器完整的安装一般涉及到多个软件的安装(读者可以从下载),包括binutils、gcc、glibc等软件。其中,binutils主要用于生成一些辅助工具,如objdump、as、ld等;gcc是用来生成交叉编译器,主要生成arm-linux-gcc交叉编译工具(应该说,生成此工具后已经搭建起了交叉编译环境,可以编译Linux内核了,但由于没有提供标准用户函数库,用户程序还无法编译);glibc主要是提供用户程序所使用的一些基本的函数库。这样,交叉编译环境就完全搭建起来了。上面所述的搭建交叉编译环境比较复杂,很多步骤都涉及到对硬件平台的选择。因此,现在提供开发板的公司一般会在附赠的光盘中提供该公司测试通过的交叉编译器,而且很多公司把以上安装步骤全部写入脚本文件或者以发行包的形式提供,这样就大大方便了用户的使用。如优龙的开发光盘里就随带了2.95.3和3.3.2两个版本的交叉编译器,其中前一个版本是用于编译Linux2.4内核的,而后一个版本是用于编译Linux2.6版本内核的。由于这是厂商测试通过的编译器,因此可靠性会比较高,而且与开发板能够很好地吻合。所以推荐初学者直接使用厂商提供的编译器。当然,由于时间滞后的原因,这个编译器往往不是最新版本的,若需要更新时希望读者另外查找相关资料学习。本书就以优龙自带的cross-3.3.2为例进行讲解(具体的名称不同厂商可能会有区别)。安装交叉编译器的具体步骤在第2章的实验二中已经进行了详细地讲解了,在此仅回忆关键步骤,对于细节请读者参见第2章的实验二。在/usr/local/arm下解压cross-3.3.2.bar.bz2。[root@localhostarm]#tar–jxvfcross-3.3.2.bar.bz2[root@localhostarm]#ls3.3.2cross-3.3.2.tar.bz2[root@localhostarm]#cd./3.3.2[root@localhostarm]#lsarm-linuxbinetcincludeinfoliblibexecmansbinshareVERSIONS[root@localhostbin]#whicharm-linux*/usr/local/arm/3.3.2/bin/arm-linux-addr2line/usr/local/arm/3.3.2/bin/arm-linux-ar/usr/local/arm/3.3.2/bin/arm-linux-asQQ:313638714《嵌入式Linux应用程序开发详解》——第5章、嵌入式Linux开发环境的搭建华清远见嵌入式Linux应用开发班培训教材/usr/local/arm/3.3.2/bin/arm-linux-c++/usr/local/arm/3.3.2/bin/arm-linux-c++filt/usr/local/arm/3.3.2/bin/arm-linux-cpp/usr/local/arm/3.3.2/bin/arm-linux-g++/usr/local/arm/3.3.2/bin/arm-linux-gcc/usr/local/arm/3.3.2/bin/arm-linux-gcc-3.3.2/usr/local/arm/3.3.2/bin/arm-linux-gccbug/usr/local/arm/3.3.2/bin/arm-linux-gcov/usr/local/arm/3.3.2/bin/arm-linux-ld/usr/local/arm/3.3.2/bin/arm-linux-nm/usr/local/arm/3.3.2/bin/arm-linux-objcopy/usr/local/arm/3.3.2/bin/arm-linux-objdump/usr/local/arm/3.3.2/bin/arm-linux-ranlib/usr/local/arm/3.3.2/bin/arm-linux-readelf/usr/local/arm/3.3.2/bin/arm-linux-size/usr/local/arm/3.3.2/bin/arm-linux-strings/usr/local/arm/3.3.2/bin/arm-linux-strip可以看到,在/usr/local/arm/3.3.2/bin/下已经安装了很多交叉编译工具。用户可以查看arm文件夹下的VERSION文件,显示如下:Versionsgcc-3.3.2glibc-2.3.2binutils-headToolchainbinutilsconfiguration:../binutils-head/configure…../glibc-2.3.2/configure…Toolchaingccconfiguration../gcc-3.3.2/configure…可以看到,这个优龙公司提供的交叉编译工具确实集成了binutils、gcc、glibc这几个软件,而每个软件也都有比较复杂的配置信息,读者可以查看Version文件了解相关信息。5.1.2超级终端和Minicom配置及使用前文已知,嵌入式系统开发的程序运行环境是在硬件开发板上的,那么如何把开发板上的信息显示给开发人员呢?最常用的就是通过串口线输出到宿主机的显示器上,这样,开发人员就可以看到系统的运行情况了。在Windows和Linux中都有不少串口通信软件,可以很方便地对串口进行配置,其中最主要的配置参数就是波特率、数据位、停止位、奇偶校验位QQ:313638714华清远见——嵌入式培训专家应用开发班培训教材和数据流控制位等,但是它们一定要根据实际情况进行相应配置。下面介绍Windows中典型的串口通信软件“超级终端”和在Linux下的“Minicom”。1.超级终端首先,打开Windows下的“开始”→“附件”→“通讯”→“超级终端”,这时会出现如图5.1所示的新建超级终端界面,在“名称”处可随意输入该连接的名称。接下来,将“连接时使用”的方式改为“COM1”,即通过串口1,如图5.2所示。接下来就到了最关键的一步——设置串口连接参数。要注意,每块开发板的连接参数有可能会有差异,其中的具体数据在开发商提供的用户手册中会有说明。如优龙的这款FS2410采用的是波特率:115200,数据为8位,无奇偶校验位,停止位1,无硬件流,其对应配置如图5.3所示。这样,就基本完成了配置,最后一步“单击”确定就可以了。这时,读者可以把开发板的串口线和PC机相连,若配置正确,在开发板上电后在超级终端的窗口里应能显示类似如图5.4的串口信息。图5.1新建超级终端界面QQ:313638714《嵌入式Linux应用程序开发详解》——第5章、嵌入式Linux开发环境的搭建华清远见嵌入式Linux应用开发班培训教材图5.2选择连接时使用方式图5.3配置串口相关参数注意要分清开发板上的串口1,串口2,如在优龙的开发板上标有“UART1”、“UATR2”,否则串口无法打印出信息。2.MinicomMinicom是Linux下串口通信的软件,它的使用完全依靠键盘的操作,虽然没有“超级终端”那么易用,但是使用习惯之后读者将会体会到它的高效与便利。下面主要讲解如何对Minicom进行串口参数的配置。图5.4串口相关信息QQ:313638714华清远见——嵌入式培训专家应用开发班培训教材首先在命令行中键入“minicom”,这就启动了minicom软件。Minicom在启动时默认会进行初始化配置,如图5.5所示。图5.5minicom启动注意在Minicom的使用中,经常会遇到三个键的操作,如“CTRL-AZ”,这表示先同时按下CTRL和“A”(大写),然后松开此二键再按下“Z”。正如图5.5中的提示,接下来可键入CTRL+AZ,来查看minicom的帮助,如图5.6所示。按照帮助所示,可键入“O”(代表ConfigureMinicom)来配置minicom的串口参数,当然也可以直接键入“CTRL-AO”来进行配置。如图5.7所示。QQ:313638714《嵌入式Linux应用程序开发详解》——第5章、嵌入式Linux开发环境的搭建华清远见嵌入式Linux应用开发班培训教材图5.6minicom帮助图5.7minicom配置界面QQ:313638714华清远见——嵌入式培训专家应用开发班培训教材在这个配置框中选择“Serialportsetup”子项,进入如图5.8所示配置界面。上面列出的配置是minicom启动是的默认配置,用户可以通过键入每一项前的大写字母,分别对每一项进行更改。图5.9所示为在“Changewhichsetting中”键入了“A”,此时光标转移到第A项的对应处。注意在minicom中“ttyS0”对应“COM1”,“ttyS1”对应“COM2”。图5.8minicom串口属性配置界面QQ:313638714《嵌入式Linux应用程序开发详解》——第5章、嵌入式Linux开发环境的搭建华清远见嵌入式Linux应用开发班培训教材图5.9minicom串口号配置接下来,要对波特率、数据位和停止位进行配置,键入“E”,进入如图5.10所示的配置界面。在该配置界面中,可以键入相应波特率、停止位等对应的字母,即可实现配置,配置完成后按回车键就退出了该配置界面,在上层界面中显示如图5.11所示配置信息,要注意与图5.8进行对比,确定相应参数是否已被重新配置。QQ:313638714华清远见——嵌入式培训专家