《构建嵌入式Linux开发环境.docx》由会员分享,可在线阅读,更多相关《构建嵌入式Linux开发环境.docx(21页珍藏版)》请在第一文库网上搜索。
1、构建嵌入式1INUX开发环境构建嵌入式1inux系统1.取本实验有关的软件包到ftp下载下列软件包:文件名备注binuti1s_2.16.1.tar.bz2gcc_4.O.2.tar.bz2g1ibc_2.3.6.tar.bz2g1ibc-1inuxthreads-2.3.6.tar.bz21inu-2.6.15.4.tar.bz2Iinux-Iibc-headers-2.6.12.O.tar.bz2制作交叉编译工具链所需的源码包crosstoo1-O.43.tar.gzcrosstoo1.tar.bz21inu-2.6.27.tar.bz2patch-2.6.27-akazImageroot
2、fs-basic.tarrootfs-basic.cramfs制作交叉编译工具链的脚本与补丁己制作好的交叉编译工具链,需要解包到/opt目录使用内核2.6.27针对2440开发板制作的内核patch己编译好的内核,可直接下载到开发板基本根文件系统打包,由于有设备文件,因此解包需要root权限使用cramfs文件系统格式的基本根文件系统映像,可直接下busybox-1.9.1.tar.bz2sq1ite-3.4.0.tar.gz1ibcgi-1.0.tar.gzqtopia-core-opensource-src-4.2.2.tar.gz载到开发板busybox源码包,嵌入式根文件系统基本命令集
3、SqIite源码包,嵌入式数据库Iibcgi源码包,用于编写CG1程序的C函数库QtopiaCore源码包,Qt的嵌入式版本2.交叉编译工具链要做嵌入式1inux开发,首先需要有交叉编译工具链(crosscompi1ingtoo1chain),也就是在主机(x86PC)上可编译生成目标板可执行文件(ARM指令)的编译工具。与普通的编译工具链一样,交叉编译工具链也包含编译、链接、修改目标文件的各类程序,如gcc、g1ibcIdsgas、ObjdUnip、reade1f等等。交叉编译工具链本身也是需要编译生成的,要得到套完整的交叉编译工具链需要编译下列源码包: binuti1s gcc g1ibc
4、 Iinux(内核) Iinux-Iibc-Headers g1ibc-1inuxthreads这些源码包具有非常强的版本依靠关系,假如源码包的版本不匹配,在编译过程中会出现各类各样的问题,有些问题需要对源码做些修改或者者打补丁,有些问题则是没有解决办法的,只能更换匹配较好的版本。编译的步骤也是比较复杂的,要紧有下列几步: .根据目标平台配置内核源代码,生成内核头文件1 .编译binuti1s2 .编译器的自举(bootstrap),也就是先编译出gcc的部分功能(没有g1ibc支持,只有C编译器没有C+编译器)3 .编译g1ibc4 .编译完整的gcc$tarxfcrosstoo1-0.43
5、.tar.gz;cdcrosstoo1-0.43 gcc-4.0.2 cgcc-4.0.2 g1ibc-2.3.6 binuti1s-2.16.11inux-2.6.15.4hdrs2.6.12.O修改CroSStOO1-O.43目录下的脚本demo-arm.sh,取消这一行开头的#号注释符:#eva1catarm.datgcc-4.0.2-g1ibc-2.3.6.dafsha11.sh-notest同时将原本没有注释的这一行注释掉(前面加#号):eva1catarm.datgcc-4.1.0-g1ibc-23.2-t1s.datsha11.shnotest注意该脚本开头有TARBA11S_D
6、IR=$HOME/down1oadsRES1J1TTOP=/opt/crosstoo1 binuti1s_2.16.1.tar.bz2 gcc-4.0.2.tar.bz2 g1ibc_2.3.6.tar.bz2 g1ibc-1inuxthreads-2.3.6.tar.bz2 1inu-2.6.15.4.tar.bz2 Iinux-Iibc-headers-2.6.12.0.tar.bz2整个编译结束后,交叉编译工具链将放在optCroSStooI目录下,因此脚本需要在/。Pt下建子目录,假如不希望使用root权限运行该脚本,则需要事先给/opt目录设置写权限:-$sudochmoda+w/o
7、pt然后修改armdat,其中有TARGET=arm-unknown-1inux-gnu这是按标准的命名规则为工具链命名的,但是通常我们都使用更简单的命名,很多软件的MakCfiIe中交叉编译器默认也都使用简单的命名,为此我们把它改为TARGET=arm-1inux。由于编译过程需要用到PatCh、bison、f1ex,确认你的系统中安装了这些软件包。在编译过程中可能还会遇到脚本的兼容性问题,假如你的1inUX发行版将Sh指向dash(比如UbUntU),应将其改指向bash:$Cd/bin$sudoIn-sfbashsh尽管用dash执行脚本时非常高效同时事实上现完全遵守POSIX标准,然而
8、现存的很多脚本(比如g1ibc中的脚本)有不符合POSIX标准的用法,因此仍需改用bash执行。准备就绪后,在CrOSStOO1-0.43目录下运行demo-arm.sh脚本开始编译。编译完成后,交叉编译工具链的可执行文件位于optcrosstoo1/gcc-4.0.2g1ibc-2.3.6/arm-1inux/bin目录,我们能够把这个路径添加到PATH环境变量中,比如将下列命令添加到/.bashrc启动脚本:exportPATH=$PATH:/opt/crosstoo1/gcc-4.0.2-g1ibc-2.3.6/arm-1inux/bin以上编译步骤需要很长时间,也能够直接从ftp下载已
9、制作好的交叉编译工具链安装到主机:-$sudochmoda+w/opt-$tarxfcrosstoo1.tar.bz2-C/opt然后在/.bashrc启动脚本中修改PATH环境变量。3.熟悉开发环境3.1 U-boot的基本使用方法连接好开发板的网线与串口线,启动minicom(配置成1152008N1,无FIOWCOntro1)。按下开发板电源,立刻按除回车以外的任意键,进入boot1oader提示符AKAE2440#。假如没来及按键就已经启动了内核,能够按开发板上的RESET键重来。注意:u-boot的终端不能处理操纵字符,不要用移动光标键或者翻页键等,退格键能够用。按了产生操纵字符的键
10、再输入命令就会产生错乱,这时能够按下回车输入当前这条已经错乱的命令,然后在新的提示符下重新键入命令。输入printenv命令显示boot1oader的参数。更换参数使用命令Set或者者SeterIV,如下图所示:上图中,setenvipaddr192.168.1.22表示设置开发板的IP地址为192.168.1.22。setenvnetmask255.255.255.O表示设置子网掩码为255.255.255.Oosetenvserverip192.168.1.21表示设置与开发板相连的PC机IP是192.168.1.21能够根据你的情况重新设置。为了统一起见,在后面的实验中,我们统一设置为:
11、AKAE2440#setipaddr192.168.2.100AKAE2440#setSerVeriP192.168.2.21(这一项应该与你的主机IP一致)AKAE2440#setnetmask255.255.255.0AKAE2440#SetgateWayI92.168.2.21(网关ip设置成什么无所谓,通常都设为主机ip)AKAE2440#saveSaVC将这些设定写入f1ash中,下次开发板上电时仍然有效。假如不SaVC则仅改变内存中的参数值,reset后会恢复f1ash中原先的参数值。设置完成后在开发板上Ping主机的ip地址,检查网络是否正常,如下所示:AKAE2440#ping
12、192.168.2.21host192.168.2.21isa1ive这表示主机能Ping通,网络正常。假如显示如下:AKAE2440#ping192.168.2.21pingfai1ed;host192.168.2.21isnota1ive.这就表示主机不能Ping通,网络特殊,需要检查你的网络。还有一些常见的参数:AKAE2440#setbootde1ay3BOOtde1ay设为3,表示开发板上电后等待3秒再启动,这3秒时间内按任意键会进入u-boot命令行状态,如下图所示:AKAE244AKAE244。AKAE2440AKAE24404KAE2440AKAE244。#setbootde1
13、ay3#saveSavingEnvironmenttoNAND.ErasingredundantNand.WritingtoredundantNand.doneAKAE244。#AKAE244#AkA匚DddG丑另外,还有:AKAE2440#setbootmodenfs或者者AKAE2440#setbootmodenandBoOt1no加能够设为nfs或者者nand两者之一,这个参数说明了boot启动时,根文件系统在哪里寻找,假如是nand表示根文件系统储存在开发板本身的f1ash某个分区中,要到f1ash上去找;假如是nfs则表示u-boot要去你的PC机的nfs服务的目录(PC机硬盘上)去
14、找。在开发板boot1oader输入下列命令查看64Mf1ash是如何分区的。AKAE2440#mtdpartsDevicenand.#parts=4#:namesizeoffsetmask_f1ags0:u-boot0x001000000x0002000001:kerne10x002000000x0010000002:ext20x010000000x0030000003:temp0x02d000000x013000000u-boot分区储存boot1oader程序,1inUX内核储存在kerne1分区,根文件系统会储存到ext2分区,temp分区本实验中没有用到。假如mtdparts命令未显示上述图样,可能是f1ash未作分区操作,能够使用mtdpartsdefau1t命令来创建上述那样的默认分区。如下图所示:AKAE244#mtdpartsdefau1tAKAE244#IHtdpartsdevicenand,#parts=4#:namesizeoffsetmaskf1ags:u-bootx1x1:kerne1x200X12:ext2x1x33:tempx2dx13activepartition:nand,-(u-boot)x1xdef