ARMlinux开发环境搭建手册.doc_第1页
ARMlinux开发环境搭建手册.doc_第2页
ARMlinux开发环境搭建手册.doc_第3页
ARMlinux开发环境搭建手册.doc_第4页
ARMlinux开发环境搭建手册.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式Linux初级实验教程 34 第 1章 嵌入式Linux开发环境搭建1. 安装ubuntu 8.04安装ubuntu8.04的宿主机,其性能要求如下: CPU:高于奔腾500M,推荐高于赛扬1.7 内存:大于256M,推荐高于512M; 硬盘:大于20G,推荐高于40G。现在大家使用的主机基本都能达到这个配置,当然,如果你的宿主机有更好的配置,也可以考虑先在你的宿主机上安装Windows系统,然后在Windows系统中安装一个虚拟机工作站,再在虚拟机工作站上安装Linux系统。这样就可以在Windows中使用Linux,避免在两个系统间切换时反复地关机、重启。直接在宿主机上安装Ubuntu 8.04和在宿主机的虚拟机工作站上安装Ubuntu 8.04只是两种不同的安装方式,对用户使用Linux操作系统几乎没有影响,开发过程也完全一样。下面介绍一下虚拟机的安装方式。1.1在Windows中安装虚拟机首先安装虚拟机工作站,笔者使用的虚拟机工作站是VMware_WorkStation_6.5,安装文件在vmware&ubuntu文件夹下,也可以去VMware的官方网站()下载该工具,它的安装过程很简单,就不多费笔墨了。下面主要介绍一下在虚拟机工作站中新建一个虚拟机的以及在虚拟机上安装Linux系统的过程。先准备好安装镜像文件,在vmware&ubuntu文件夹下,如果没有,可以去网上下载,下载地址为/8.04/。(1)首先运行虚拟机工作站,如图1-1。(2)点击New Virtual Machine的图标,出现图1-2所示界面。 1-1 虚拟机工作站 1-2 新建虚拟机向导 (3)选择Typical,点击Next,在出现的界面(图1-3)中点击Browse,选中所要安装系统的光盘映像文件(ubuntu-8.04-alternate-i386.iso)。(4)点击Next,设置用户名和密码,如图1-4所示。 1-3 选择安装映像 1-4 设置用户名和密码 (5)点击Next,设置虚拟机的名称,默认为Ubuntu,你可以根据自己的喜好设置,再点击Browse,设置Ubuntu的安装目录,比如,笔者将Ubuntu安装在D盘的“Heima_Ubuntu”文件夹下。要确保该目录所在的磁盘有足够的空间(最好8G以上)来容纳我们新安装的Ubuntu系统。如图1-5所示。(6)点击Next,设置虚拟机占用的最大硬盘空间,默认8G,如果你的主机硬盘容量够大,可以适当设大一点,免得开发过程受硬盘空间限制,比如后面编译QT的时候需要好几G的空间,如果空间不够,可能会出错。笔者就设了20G,如图1-6所示。 1-5 设置安装目录 1-6 设置虚拟机硬盘最大容量 (7)点击Next,进入1-7所示的界面,可以看到,现在的硬盘容量是20G,默认的内存大小是512M,网络连接方式选择的是NAT,还有CD/DVD驱动,软盘,USB控制器等,如果不需要更改这些配置或者增加其他的硬件设备,到这一步就可以点击“Finish”了。 1-7 配置向导完成界面 1-8 内存配置 如果你还要更改配置(如改变内存大小),或者增加一个硬件设备(如串口),那就点击“Customize Hardware”,这时会出现如图1-8所示的配置界面,笔者将各部分的配置截图说明如下: 内存配置内存配成512M差不多了,不过要配得比你主机的内存小,笔者主机的内存是2G,这里配1G左右。如图1-8所示。 在虚拟机的光驱中加入虚拟机系统的安装映像在虚拟机的光驱中加入虚拟机系统的安装映像就和在物理主机的光驱中插入系统安装光盘是一个概念。笔者安装的Linux系统是Ubuntu-8.04(映像ubuntu-8.04-alternate-i386.iso),如果你想安装其他版本的Ubuntu或者其他的Linux系统,需要下载这些系统的安装映像文件。这一步还要注意勾上“Connect at power on”选项,如图1-9所示。 1-9安装映像配置 1-10网络连接方式配置 配置虚拟机的网络连接方式网络连接方式共有四种方式可以选择,先选择NAT,如图1-10所示。至于这几种方式具体怎么配置,用在什么样的场合,笔者在后面会详细介绍。 增加一个串口设备点击“Add.”选项,然后选中Serial Port,点击“Next”,选中“Use physical serial port on the host”选项(图1-11),再点击“Next”,在Physical serial port“那一栏选择“COM1”,点击“Finish”(图1-12)。就为虚拟机增加了一个串口设备,这个设备使得虚拟机系统可以使用宿主机的串口1与目标机进行通信。 1-11串口配置1 1-12串口配置2 其他的几项配置(USB Controller、Display、Processors)一般都不用更改,点击图1-7界面中的“Finish”完成新建虚拟机的过程。就可以进入Linux系统的安装了。1.2在虚拟机上安装Ubuntu(1)进入Ubuntu的安装过程,首先出现的是选择语言的界面。在该界面上点击一下鼠标,就可以通过键盘的“”和 “”键进行语言的选择,默认为English,我建议你也选用English。选中以后按Enter键就会进入下一步(以后都是按Enter键确认当前选项并进入下一步),这时可能你会发现你的鼠标不见了,不用慌,同时按下Ctrl和Alt就出来了。(2)接着选择国家,没有China,就选Hong Kong吧。下一步是问你要不要做键盘检测,选“NO”,不做,没关系的。然后连续选择两个USA,就会进入CD-ROM的检测,如果检测不到CD-ROM中的映像文件,就会提示Incorrect CD-ROM detected(如图1-13),这时你需要回过头去检查一下你的CD-ROM驱动器中的映像文件是否正确或者映像文件是否存在。如果能检测成功就顺利进入下一步。1-13 检测CD-ROM失败(3)CD-ROM检测完以后就开始检测网络硬件及配置,接下来的几个步骤都可以默认,包括Host Name的设置(如图1-14),直到进入磁盘分区的界面(如图1-15)。1-14 配置主机在网络中的名字(4)开始进行磁盘分区(Partition disks),这里的磁盘就是虚拟机的磁盘,也就是下图显示的SCSI3(0,0,0)(sda),其容量在前面已经设置好了。1-15 磁盘分区选中图1-15中“SCSI3(0,0,0)(sda)”那一行,按Enter键,就会出现一个对话框,提示你是不是要在该磁盘上创建一个空的分区。选择“YES”,就会出现如图1-16所示的界面,表示在虚拟机的磁盘上新建了一个自由的空间。1-16 在磁盘上新建一个自由空间选中“FREE SPACE”那行,按Enter键,就会在新建的空间上进行分区,用自动分区的方式就可以了,分区完了以后选择“Finish partitioningr and write changes to disk”,将更改写入磁盘。具体的安装截图如图1-17和图1-18所示。1-17 自动分区1-18 完成分区并写入磁盘(5)接着就是“Installing the base system”。设置用户名和密码,相信大家都会了。紧跟着会弹出一个要求设置代理服务器的对话框,先空着不设。再接下去就是安装系统软件了。这些过程都是自动的,不用管,只是需要等二十分钟左右,整个系统就安装完成了。1-19 系统安装过程(6)重启系统,如果出现熟悉的登录对话框,恭喜你,Ubuntu安装成功!输入用户名和密码,登入Ubuntu,开始你的Ubuntu开发之旅吧。注:系统安装过程可能有些步骤和上面不同,关系不大,安装成功能启动就行。2. 宿主机Linux系统中基本环境的配置与安装Linux操作系统安装完以后,我们面对的还是一个没有安装相关开发工具的空系统。所以我们首先需要配置系统的网络(包括IP地址、网关、DNS服务器等)、更新系统、安装一些基本的工具(包括一些编译工具,调试工具、程序库等),为我们后续的开发做准备。另外,在进行项目开发之前,一个比较好的习惯是为我们的项目规划一个工作空间,所以这一小节还涉及到项目工作空间的规划。笔者接下来将一一介绍。2.1 网络配置正确配置Linux系统的网络,以实现Linux系统接入Internet,下载开发过程中需要的各种开发工具的源码包或者其他相关资源。虚拟机有四种网络连接方式:Bridged(网络桥接)方式,NAT方式,Host-only方式,以及Custom方式。一般来说,后面两种方式用户很少用到,这里只介绍一下前两种方式的的使用场合和配置方法。不管是哪一种方式,都会涉及到3方面的设置:主机系统(本书对应Windows系统),虚拟机,虚拟系统(本书对应Linux系统)。(1) Bridged方式如果你的真实主机在一个以太网中,这种方法是将你的虚拟机接入网络最简单的方法。虚拟机就像一台新增加的、与真实主机有着同等物理地位的电脑,桥接模式可以享受所有可用的服务;包括文件服务、打印服务等等。当虚拟机配置成这种方式时,要实现Linux系统连入Internet,需要设置Linux系统的IP和Windows系统的IP在同一个网段,比如Windows系统的IP为,那么Linux系统的IP就要设置成10.62.85.x(x = 2254)。具体操作包括以下几步: 设置Windows的IP地址为。 设置虚拟机的网络连接方式为Bridged,如图2-1所示。 在Linux系统的启动栏中,执行“System”“Administration”“Network”在弹出的“Network Settings”对话框中,选中“Wired connection”项,然后点击“Properities”,在弹出的“eth0 properities”对话框中设置Ubuntu的IP地址为,子网掩码和网关的设置与Windows下面的一样。如图2-2 。 2-1虚拟机中选择Bridged连接方式 2-2 配置IP,子网掩码,网关 这样设置以后在Linux中启动浏览器,看看是不是可以连入Internet,如果不行,可能还需要配置代理服务器(如果你的Windows系统是通过代理服务器连入Internet的),执行“System”“preferrences”“Network Proxy”,设置代理服务器的IP地址及端口。 (2) NAT方式NAT(networkaddresstranslation)模式可以方便地使虚拟机连接到公网,代价是桥接模式下的其他功能都不能享用。使用这种模式的配置相当简单,只要真实主机连接到Internet,将虚拟机的网络连接方式设置为NAT(图2-3),然后将Linux系统中的网络设置为DHCP方式(图2-4),这时Linux系统就可以接入Internet了。如果你的Windows系统是通过代理服务器连入Internet的,那么同样要配置代理服务器。 2-3 虚拟机中选择NAT连接方式 2-4 配置DHCP模式在嵌入式Linux开发中,如果宿主机Linux系统需要连接Internet,那么可以按照上面介绍的方法将虚拟机设置成Bridged方式或者NAT方式;但是,如果要实现宿主机Linux系统和目标机进行网络通信的话,必须将虚拟机的网络连接方式配置成Bridged,然后设置目标机的IP与宿主机上Linux系统的IP在同一个网段。如果有网络环境,则先设成NAT连接方式,使unbutu可以访问internet就行了,以方便我们后面通过网络安装软件。2.2 更新Linux操作系统配置好Linux系统的网络,就可以对系统进行更新,获取最新的软件列表并安装。这部分内容可以参考Ubuntu官方网站的“Ubuntu 8.04 LTS 速配指南”,网址是:“/index.php?title=Qref/Hardy&variant=zh-cn”。这个速配指南关于怎么设置系统更新源、更新软件列表以及安装更新都写得简单明了。2.3 安装一些相关工具和程序库在宿主机上安装bison(语法分析器)、flex(词法分析器)、build-essential (C/C+编译环境,包括编译C/C+程序需要的软件包,相关工具等)、patch(linux下的补丁工具)、libncurses5-dev库(调用ncurses图形库时需要用的,比如,在执行make menuconfig时必须安装这个库),安装命令如下:sudo apt-get install bison sudo apt-get install flex sudo apt-get install build-essentialsudo apt-get install patchsudo apt-get install libncurses5-dev 注:Ubuntu中安装软件的方法:当我们安装软件时,通过sources.list的引导,可以自动从Ubuntu的软件库中下载需要的软件,所以这个功能非常重要。在这里我们按如下方法更新软件源: (1)修改sources.listsudo gedit /etc/apt/sources.list 可以在其中添加源。(2)执行以下语句使更新生效 sudo apt-get update (此操作后会更新网络资源)更新成功后,我们就能通过 sudo apt-get install softwarename 安装你需要的软件了(softwarename为你要安装的软件名),不过这需要Ubuntu能正常联网。如果电脑不能联网,则只能使用离线安装软件的方法。这个方法也可以用来备份软件,这样重装系统要再安装软件时,就不用再去网上下载软件包了。方法如下:每一次install时系统下载的软件包,包括各个软件所依赖的包都会保存在/var /cache/apt/archives/目录下,这里已经把需要的软件包都放在了“需网络安装的软件deb包”这个文件夹下。1、新建立一个目录,用于放所有下载的软件包,另外建立一个目录用于存放Packages.gz包,比如:mkdir -p /home/yegen/Ubuntu/Pakcagesmkdir -p /home/yegen/Ubuntu/dists/hardy/main/binary-i386其中的binary-i386根据自己的系统类型会有所变化,比如binary-amd64等等,根据自己的机器酌情更改。2、复制文件到前面建立的文件夹下:sudo cp 软件包所在的源目录/* /home/yegen/Ubuntu/Pakcages如果中间有经过window来拷贝包文件,文件名中的%会变成%25,原因未知。解决方法就是使用mv命令一个一个修改回来或者是不是可以不经过windows来复制文件?3、生成Packages.gz包,里面记录了Pakcages文件夹下面的软件包信息,包括依赖信息。Ubuntu目录下使用命令:dpkg-scanpackages Packages | gzip dists/hardy/main/binary-i386/Packages.gz命令 软件包所在目录 生成指定文件如果本地不识别dpkg-scanpackages命令,可能需要先在有网络的计算机中在用新立得安装dpkg,生成了Packages.gz后再拷贝到目标机。这步主要的目的就是得到Packages.gz这个文件。4、加本地源sudo gedit /etc/apt/sources.list将其他的网络源都屏蔽掉。加入 deb file:/home/yegen/Ubuntu/ hardy main ,注意,这里只是我电脑上的路径,请依实际位置修改。如果出错,请按照系统的出错提示进行相应设置。5、设置完成完成以上设置和文件复制之后,就可以开始正常使用本地的源了和使用网络上的源一样操作。sudo apt-get updatesudo apt-get dist-upgradesudo apt-get install XXX这样就完成了本地源的手动配置。2.4 实际项目工作空间目录的安排在为目标机开发及定制软件的过程中,最好在宿主机上规划一个综合的、容易使用的目录结构,组织各种软件包和项目组件,表2-1是一个目录安排方式范例,你可以自行修改此目录结构以符合你的需要。目录内容bootloader目标板的引导加载程序source存放构建交叉编译工具链所需要用到的软件源码包debugtool调试工具以及所有相关套件doc项目将会用到的所有文件image准备使用在目标板上的引导加载程序和内核的二进制映像,以及根文件系统kernel存放内核project项目配置文件等rootfs目标系统的内核在执行期间所看到的根文件系统sysapp存放系统应用程序tmp存放临时文件crosstool存放交叉编译工具链以及 C 程序库表2-1 本书范例所用的项目目录安排方式这个项目工作区要放在何处,由个人自己决定,不过最好不要放在 /usr 或 /usr/local等目录下。我将它放在我的用户主目录(/home/yegen)下,当然在用户主目录下,为了与其他项目的目录分开,我新建了一个子目录(workspace)来存放该工作空间,以下是我的目录结构:ls -l /home/yegen/workspacetotal 44drwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 bootloaderdrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 crosstooldrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 debugtooldrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 docdrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 imagedrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 kerneldrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 projectdrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 rootfsdrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 sourcedrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 sysappdrwxr-xr-x 2 yegen yegen 4096 2009-08-01 22:21 tmp如何创建这些目录?我相信只要接触过linux的读者对于mkdir这个命令一定不陌生。举例来说,我要在我/home/yegen目录下面创建workspace目录,只需要打开Linux的终端,敲入以下命令:mkdir /home/yegen/workspace2.5 配置Linux下的minicom minicom是Linux下的一个串口调试工具,与Windows下的超级终端功能相似。在以后的章节当中经常要用到minicom来查看键盘输入信息和调试输出信息。本小节将介绍minicom的安装和配置过程,详细过程如下: (1) 安装minicom。sudo apt-get install minicom(2) 运行minicom。sudo minicom出现如图2-5所示的界面:图2-5 minicom配置前的界面(3) 先按下Ctrl + A, 放开, 再按O, 出现配置菜单。图2-6 进入配置菜单(4) 选择 Serial port setup项, 出现如下界面:图2-7 配置前的界面(5) 键入“A”,可修改串口在Linux中对应的设备,串口COM1对应ttyS0, COM2对应ttyS1,这一项配置完以后敲回车键退出,可以进入其他项的配置;键入“E”, 设置为115200 8N1 (波特率115200,奇偶校验无, 停止位1),这是根据Super-ARM的参数配置的,当然,不同的开发板参数可能不一样,要根据自己的情况来定,该项配置完后回车;分别键入“F”“G”,配置硬/软件流控制,都选NO。所有项配置完成后的界面如下图:图2-8 配置后的界面(6) 在确认配置正确之后,敲回车键进入配置菜单的界面,将其保存为默认配置(即选择save setup as dfl项)。如图2-9所示。图2-9 保存为默认配置(7) 保存成功,出现如下图界面。 图2-10 配置被保存 (8) 选择Exit项,返回上级界面;如图2-11: 图2-11 Exit选项(9) Ctrl + A, 放开, 再按Q,退出minicom,在出现的界面中选择“Yes”,保存设置。图2-12 退出minicom(10) 重启minicom,配置生效,如图2-13:图2-13 配置生效后重启minicom(11) 用串口线将宿主机和目标机相连,如果此时目标机向宿主机发送数据,就会在minicom中显示。比如下图是笔者在开发过程中截取的一张图片,该图片上显示的是从目标机发送到宿主机的信息。当然读者现在面对的目标机可能还是个空板子,就算把线接上了,也肯定不会有信息传到主机上来,没关系,只要你跟着笔者一步步走下去,总有一天你会看到的。图2-14 在minicom中显示目标板发送过来的信息2.6 配置Linux下的TFTP服务器 TFTP协议是简单文件传输协议,基于UDP协议而实现,它可以看作是一个FTP协议的简化版本,与FTP协议相比,它的最大区别在于没有用户管理的功能。它的传输速度快,可以通过防火墙,使用方便快捷,因此在嵌入式的文件传输中广泛使用。同FTP一样,TFTP分为客户端和服务器端两种。通常,首先在宿主机上安装并开启TFTP服务器端服务,设置好TFTP的根目录内容(也就是供客户端下载的文件),接着,在目标机上开启TFTP的客户端程序。 这样,把目标机和宿主机相连,并且配置好IP,子网掩码和默认网关之后,就可以通过TFTP协议传输可执行文件了。下面介绍如何在Linux(针对Ubuntu 8.04)下面安装配置以及使用TFTP服务器。(1) 安装tftpd(服务端),tftp(客户端),xinetdsudo apt-get install tftpd tftp xinetd(2) 在Linux 下,不管使用的是哪一种服务器端服务:inetd或者xinetd,默认情况下TFTP服务是禁用的,所以要修改文件来开启服务。在/etc/xinetd.d/下建立一个配置文件tftp,主要是设置TFTP服务器的根目录,开启服务。sudo gedit /etc/xinetd.d/tftp在文件中输入以下内容:service tftpsocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /home/yegen/workspace/debugtool/tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4保存退出。其中server_args = -s 参数设置TFTP服务器的根目录,该目录就是用来存放在后续开发过程中生成的内核及文件系统映像,以供tftp客户端下载。本书范例中使用的tftp根目录放在4.2.4节中安排的目录/home/yegen/workspace/debugtool/下。(3) 建立tftp服务器文件目录(这个目录就是在第二步中对server_args = -s设置的值),并且更改其权限,命令如下(读者需要根据自己的设置修改命令):sudo mkdir /home/yegen/workspace/debugtool/tftpbootsudo chmod 777 /home/yegen/workspace/debugtool/tftpboot -R(4) 重新启动服务sudo /etc/init.d/xinetd restart3. 在主机Linux系统中建立交叉编译环境我们在第一章的概述中已经介绍了什么是交叉编译,什么是交叉编译工具链,以及制作交叉编译工具链的几种方法。在本小节中,笔者将向读者展示利用crosstool工具制作交叉编译工具链,为目标机应用程序建立交叉编译环境。3.1 准备工具链软件构建工具链的第一个步骤就是选择gcc、glibc 与 binutils这些软件的版本。而版本的匹配是个大麻烦,因为这些软件的维护与发行是彼此独立的,当一个软件的所有版本与其他软件的各种版本组合在一起时,并非都能顺利完成建构。读者可以尝试使用每一个软件的最新版本,但此一组合是否可行也未可知。如欲选择正确的版本,读者朋友必须测试某个组合是否适合自己的宿主机和目标机。如果你很幸运,能够找到一个之前测试过的组合,那是最好不过了。如果没有,那么就可以从每个套件最新的稳定版本开始测试,若构建失败,那么就需要一个接着一个地换成较旧的版本进行测试。因此,假定现在的gcc最新版本是 gcc4.2.2,而gcc4.2.2编译失败,则可以尝试gcc 4.2.1。如果再失败,便尝试 4.2,依此类推。然而,也不能永无止境地这样下去,因为一些软件的最新版本会对其他软件提供了哪些功能是预定的。因此,如果其他软件完全无法编译成功,可能回头使用这些软件的较旧版本就能编译成功。一般情况下,用于处理二进制包的工具包binutils是可以独立安装的,它不需要更改,就能编译成功。此外,有些软件的版本还需要打一些补丁,才能成功完成编译。要寻找软件版本的补丁以及合适的软件版本组合,可以参看下面列出的一些网站:/distrib/packages 上可以找到Debian Linux 发行的源码包;/view/1.0.0 所提供的“Cross Compiled Linux From Scratch”(Linux 交叉编译从零开始)文件;/crosstool/crosstool-0.43/buildlogs 所提供的“CrossTool build matrix”(交叉工具建构矩阵)。这里可以很容易找到针对不同架构的已经测试通过的版本组合。每当发现到一个可以编译成功的新版本组合,务必测试其所产生的工具链的确可以使用。有些版本组合或许可以编译成功,但是使用的时候仍旧会失败。本章接下来将使用表3-1中的软件版本组合来构建交叉工具链:软件版本下载地址binutils-2.16.1 gcc-3.3.6gcc-4.1.1 glibc-2.3.2gdb-6.5linux-2.6.24linux-libc-headers-/mmazur/linux-libc-headers/crosstool-0.43/crosstool/crosstool-0.43.tar.gz表3-1 本书范例所用的软件版本组合 这些软件已经下载好,在“交叉工具链软件”文件夹中可以找到。3.2 建立交叉编译工具链本书向大家介绍的是利用crosstool工具自动建立交叉编译工具链的方法。crosstool 是一组命令脚本,可用于替 glibc 所支援的大部分架构建立与测试多个gcc 与 glibc 版本。crosstool 甚至会替你下载源码包及相应补丁。它最初是个命令脚本,Bill Gatliff 称之为 crossgcc,后来由 Dan Kegel 一般化及修改成现在的样子。crosstool 为工具链组件准备了一组补丁,这是建构交叉工具链组合所必须的。它支援 Alpha、ARM、i686、ia64、MIPS、PowerPC、PowerPC64、SH4、SPARC、SPARC64、s390 以及 x86_64 架构。crosstool 具移植性,其所构建的交叉工具链可执行在 Linux、Mac OS X、Solaris 和 Cygwin 之上,可用于构建出 Linux 二进制文件。下面是利用crosstool工具自动建立交叉编译工具链的具体过程:(1)准备工具链软件将表3-1中所列的软件包,放在/home/yegen/workspace/source目录下。这里如果是在windows下下载到的软件,linux可以通过共享文件夹的方式来访问windows下的文件。共享文件夹的方法如下:虚拟机中,VM-setting-option-shared folder-always enabled-Add,选择好需要共享的host path和name。设好后就可以在ubuntu的/mnt/hgfs/下看到共享文件夹了。(2)解压crosstool-0.43cd /home/yegen/workspace/source 注:进入源码目录tar -xvzf crosstool-0.43.tar.gz 注:解压crosstool-0.43cd crosstool-0.43/ 注:进入crosstool-0.43目录(3)修改demo-arm.shgedit demo-arm.sh修改下面两个地方 第一处TARBALLS_DIR=/home/yegen/workspace/source RESULT_TOP=/home/yegen/workspace/crosstool 第二处将文件最后echo Done.前面一行eval cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat sh all.sh -notest注释掉,并添加一行:eval cat arm.dat gcc-4.1.1-glibc-2.3.2.dat sh all.sh -notest:#eval cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat sh all.sh -notesteval cat arm.dat gcc-4.1.1-glibc-2.3.2.dat sh all.sh -notestecho Done.(3)编辑gcc-4.1.1-glibc-2.3.2.dat打开crosstool-0.43目录下gcc-4.1.1-glibc-2.3.2.dat文件gedit gcc-4.1.1-glibc-2.3.2.dat在该文件中写入如下内容(将原来的内容覆盖):BINUTILS_DIR=binutils-2.16.1GCC_CORE_DIR=gcc-3.3.6GCC_DIR=gcc-4.1.1GLIBC_DIR=glibc-2.3.2LINUX_DIR=linux-2.6.24LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2GDB_DIR=gdb-6.5(4)编辑arm.datgedit arm.dat在该文件中写入如下内容(将原来的内容覆盖):KERNELCONFIG=pwd/arm.configTARGET=arm-linuxTARGET_CFLAGS=-O(5) 修改all.sh gedit all.Sh将下面几行注释掉(57行左右),便可以以root身份编译。case x$USER inxroot) abort Dont run all.sh or crosstool.sh as root, its dangerous ;*) ;esac(6)修改glibc-2.3.2/csu目录下的Makefile解压source目录下的glibc-2.3.2.tar.bz2,打开glibc-2.3.2/csu目录下的Makefile,修改文件末尾2处echo,命令如下:cd /home/yegen/workspace/sourcetar -xvjf glibc-2.3.2.tar.bz2cd glibc-2.3.2/csugedit Makefile 第一处 echo Compiled on a $os $version system on date +%Y-%m-%d.n ; 改为: echo Compiled on a $os $version system on date +%Y-%m-%d.n ; 第二处 echo Available extensions:n; 改为: echo Available extensions:n; 将glibc-2.3.2重新压缩为glibc-2.3.2.tar.bz2 ,覆盖source目录下原来的glibc-2.3.2.tar.bz2命令如下:cd /home/yegen/workspace/sourcerm glibc-2.3.2.tar.bz2tar -cvjf glibc-2.3.2.tar.bz2 glibc-2.3.2(7)修改宿主机gcc版本为gcc-3.4由于宿主机上的gcc版本在系统更新完以后安装的是当前的最新版本,编译时有可能会报错,现将其换成gcc-3.4。命令如下:sudo apt-get install gcc-3.4cd /usr/binsudo rm gccsudo ln -s gcc-3.4 gcc(8)执行demo-arm.sh以root用户的权限进行编译,避免编译过程因为一些文件的读、写、执行权限问题而终止。命令如下:sudo sucd /home/yegen/workspace/source/crosstool-0.43/./demo-arm.sh(9)建立成功如果执行过程中没有错误,那么说明交叉编译工具链建立成功。交叉编译工具链建立成功后,进入/home/yegen/workspace/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin目录下面可以看到如arm-linux-gcc等一系列工具,这些工具就是目标板应用程序的编译调试工具。这些工具的具体使用方法会在后面章节的“hello,world”范例中介绍。yegenubuntu804:/workspace/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin$ lsarm-linux-addr2line arm-linux-g+ arm-linux-ld arm-linux-sizearm-linux-ar arm-linux-gcc arm-linux-nm arm-linux-stringsarm-linux-as arm-linux-gcc-4.1.1 arm-linux-objcopy arm-linux-striparm-linux-c+ arm-linux-gccbug arm-linux-objdump fix-embedded-pathsarm-linux-c+filt arm-linux-gcov arm-linux-ranlibarm-linux-cpp arm-linux-gprof arm-linux-readelfyegenubuntu804:/workspace/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin$现在,有了这些基础和准备工作,读者就可以正式开始嵌入式Linux开发了。在下一篇章中,笔者将详细介绍怎样部署嵌入式Linux系统,如:U-boot的烧写、内核以及文件系统的移植等,带领读者朋友更深入的掌握嵌入式Linux的开发过程。4. 交叉编译U-Boot Uboot移植工作这里不多介绍,请参考专门的文档。(1)解压源码tar -jxvf u-boot-2009.08.tar.bz2(2)修改顶层MakefileU-Boot是通过gcc和Makefile组织编译的。顶层目录下的Makefile可以设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的代码连接成u-boot映像。每个目标板都要在U-Boot 的Makefile中设定一行配置选项boardname_config ,用来定义目标板处理器的架构及类型,进而替目标板设定 U-Boot 的构建配置。U-Boot 为相当多的开发板预先设定了一些配置,所以许多目标系统可能已经存在预先设好的配置或者类似的配置,例如,U-Boot里面有个smdk2410的配置smdk2410_config :smdk2410_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t smdk2410 NULL s3c24x0解释一下这行配置中各项的意思: arm: CPU 的架构(ARCH) arm920t: CPU 的类型(CPU),其对应于 cpu/arm920t 子目录。 SuperARM2410: 开发板的类型,对应于 board/ SuperARM2410 目录。 NULL: 开发者/或经销商(vender)。 s3c24x0: 片上系统(SOC)。如果要移植其他的平台,可以仿照这个来添加。在顶层Makefile中还要定义交叉编译器,这里就使用我们之前构建的交叉编译器。ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux-endif交叉编译器的前缀配置成arm-linux-,前面需要加上交叉编译器的绝对路径,或者将该路径加到宿主机的PATH环境变量中。比如,笔者的交叉编译器的绝对路径是/home/hm/book2410/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin/,这时我可以将它直接添加到arm-linux-前面,如图5-2-1所示:图5-2-1 配置交叉编译器或者打开/etc/profile文件,在文件的末尾添加下面两行:PATH=$PATH:/home/hm/book2410/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin/export PATH然后保存退出,这样就将交叉编译器的路径加入到系统的环境变量当中,这样系统就能通过这个路径自动找到交叉编译器,不过设置完这个文件以后需要重启系统才能生效,当然,也有办法让它马上生效,只要在终端敲入下面的命令:source /etc/profile(3)根据具体平台,做其他的移植修改工作。(4)进入U-boot顶层目录执行make XXXX_config命令(移植的时候会在U-boot顶层makefile中添加目标板的相应的config命令)。如果出现Configuring for XXX

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论