您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 1-构建嵌入式Linux开发环境
专业的嵌入式技术研发、推广、培训、认证机构嵌入式Linux就业班内部资料第1页AKAE嵌入式研究中心版权所有目录构建嵌入式Linux系统1.取本实验相关的软件包到ftp下载以下软件包:文件名备注binutils-2.16.1.tar.bz2gcc-4.0.2.tar.bz2glibc-2.3.6.tar.bz2glibc-linuxthreads-2.3.6.tar.bz2linux-2.6.15.4.tar.bz2linux-libc-headers-2.6.12.0.tar.bz2制作交叉编译工具链所需的源码包crosstool-0.43.tar.gz制作交叉编译工具链的脚本和补丁crosstool.tar.bz2已制作好的交叉编译工具链,需要解包到/opt目录使用linux-2.6.27.tar.bz2内核2.6.27patch-2.6.27-aka针对2440开发板制作的内核patchzImage已编译好的内核,可直接下载到开发板rootfs-basic.tar基本根文件系统打包,由于有设备文件,所以解包需要root权限rootfs-basic.cramfs采用cramfs文件系统格式的基本根文件专业的嵌入式技术研发、推广、培训、认证机构嵌入式Linux就业班内部资料第2页AKAE嵌入式研究中心版权所有系统映像,可直接下载到开发板busybox-1.9.1.tar.bz2busybox源码包,嵌入式根文件系统基本命令集sqlite-3.4.0.tar.gzsqlite源码包,嵌入式数据库libcgi-1.0.tar.gzlibcgi源码包,用于编写CGI程序的C函数库qtopia-core-opensource-src-4.2.2.tar.gzQtopiaCore源码包,Qt的嵌入式版本2.交叉编译工具链要做嵌入式Linux开发,首先需要有交叉编译工具链(crosscompilingtoolchain),也就是在主机(x86PC)上可编译生成目标板可执行文件(ARM指令)的编译工具。和普通的编译工具链一样,交叉编译工具链也包括编译、链接、修改目标文件的各种程序,如gcc、glibc、ld、gas、objdump、readelf等等。交叉编译工具链本身也是需要编译生成的,要得到一套完整的交叉编译工具链需要编译以下源码包:binutilsgccglibclinux(内核)linux-libc-headersglibc-linuxthreads这些源码包具有非常强的版本依赖关系,如果源码包的版本不匹配,在编译过程中会出现各种各样的问题,有些问题需要对源码做些修改或者打补丁,有些问题则是没有解决办法的,只能更换匹配较好的版本。编译的步骤也是比较复杂的,主要有以下几步:0.根据目标平台配置内核源代码,生成内核头文件1.编译binutils2.编译器的自举(bootstrap),也就是先编译出gcc的部分功能(没有glibc支持,只有C编译器没有C++编译器)3.编译glibc4.编译完整的gcc幸运的是,已经有人写出了制作交叉编译器的脚本(),该脚本中提供了一系列源码包版本的匹配方案,使用者需要选择目标平台和源码包的版本匹配方案,执行该脚本会自动从官方网站(和)下载源代码,自动打补专业的嵌入式技术研发、推广、培训、认证机构嵌入式Linux就业班内部资料第3页AKAE嵌入式研究中心版权所有丁,然后自动完成所有的编译步骤。首先从下载crosstool-0.43.tar.gz,在主目录下解包~$tarxfcrosstool-0.43.tar.gz;cdcrosstool-0.43现在选择一种源码包的版本组合,各种版本组合的兼容性可以参考,在此我们选择在arm平台上glibc版本较高,兼容性较好的一个组合:gcc-4.0.2cgcc-4.0.2glibc-2.3.6binutils-2.16.1linux-2.6.15.4hdrs-2.6.12.0修改crosstool-0.43目录下的脚本demo-arm.sh,取消这一行开头的#号注释符:#eval`catarm.datgcc-4.0.2-glibc-2.3.6.dat`shall.sh--notest同时将原本没有注释的这一行注释掉(前面加#号):eval`catarm.datgcc-4.1.0-glibc-2.3.2-tls.dat`shall.sh--notest注意该脚本开头有TARBALLS_DIR=$HOME/downloadsRESULT_TOP=/opt/crosstool这说明,该脚本运行时,自动从和下载相关的源码包到主目录的downloads目录下,如果你已经下载过这些源码包,将它们拷到downloads目录下就可以不必再次下载了。对应于我们选择的版本组合,downloads目录下的源码包有:binutils-2.16.1.tar.bz2gcc-4.0.2.tar.bz2glibc-2.3.6.tar.bz2glibc-linuxthreads-2.3.6.tar.bz2linux-2.6.15.4.tar.bz2linux-libc-headers-2.6.12.0.tar.bz2整个编译结束后,交叉编译工具链将放在/opt/crosstool目录下,因此脚本需要在/opt下建子目录,如果不希望使用root权限运行该脚本,则需要事先给/opt目录设置写权限:专业的嵌入式技术研发、推广、培训、认证机构嵌入式Linux就业班内部资料第4页AKAE嵌入式研究中心版权所有~$sudochmoda+w/opt然后修改arm.dat,其中有TARGET=arm-unknown-linux-gnu这是按标准的命名规则为工具链命名的,但是通常我们都采用更简单的命名,很多软件的Makefile中交叉编译器默认也都采用简单的命名,为此我们把它改为TARGET=arm-linux。由于编译过程需要用到patch、bison、flex,确认你的系统中安装了这些软件包。在编译过程中可能还会遇到脚本的兼容性问题,如果你的Linux发行版将sh指向dash(例如Ubuntu),应将其改指向bash:$cd/bin$sudoln-sfbashsh虽然用dash执行脚本时非常高效并且其实现完全遵守POSIX标准,然而现存的很多脚本(比如glibc中的脚本)有不符合POSIX标准的用法,所以仍需改用bash执行。准备就绪后,在crosstool-0.43目录下运行demo-arm.sh脚本开始编译。编译完成后,交叉编译工具链的可执行文件位于/opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/bin目录,我们可以把这个路径添加到PATH环境变量中,例如将以下命令添加到~/.bashrc启动脚本:exportPATH=$PATH:/opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/bin此外,网上也可下载到已编译好的交叉编译工具链,比如,但是使用别人编译好的交叉编译工具链有很多限制,不能按自己的特殊需要对其定制,比如有些项目需要特定版本的gcc和glibc,再比如需要soft-float的编译器(生成指令模拟浮点数运算)。以上编译步骤需要很长时间,也可以直接从ftp下载已制作好的交叉编译工具链安装到主机:~$sudochmoda+w/opt~$tarxfcrosstool.tar.bz2-C/opt然后在~/.bashrc启动脚本中修改PATH环境变量。专业的嵌入式技术研发、推广、培训、认证机构嵌入式Linux就业班内部资料第5页AKAE嵌入式研究中心版权所有3.熟悉开发环境3.1U-boot的基本使用方法连接好开发板的网线和串口线,启动minicom(配置成1152008N1,无FlowControl)。按下开发板电源,立刻按除回车以外的任意键,进入bootloader提示符AKAE2440#。如果没来及按键就已经启动了内核,可以按开发板上的RESET键重来。注意:u-boot的终端不能处理控制字符,不要用移动光标键或翻页键等,退格键可以用。按了产生控制字符的键再输入命令就会产生错乱,这时可以按下回车输入当前这条已经错乱的命令,然后在新的提示符下重新键入命令。输入printenv命令显示bootloader的参数。更改参数使用命令set或者setenv,如下图所示:上图中,setenvipaddr192.168.1.22表示设置开发板的IP地址为192.168.1.22。setenvnetmask255.255.255.0表示设置子网掩码为255.255.255.0。setenvserverip192.168.1.21表示设置与开发板相连的PC机IP是192.168.1.21。可以根据你的情况重新设置。为了统一起见,在后面的实验中,我们统一设置为:专业的嵌入式技术研发、推广、培训、认证机构嵌入式Linux就业班内部资料第6页AKAE嵌入式研究中心版权所有AKAE2440#setipaddr192.168.2.100AKAE2440#setserverip192.168.2.21(这一项应该和你的主机IP一致)AKAE2440#setnetmask255.255.255.0AKAE2440#setgateway192.168.2.21(网关ip设置成什么无所谓,一般都设为主机ip)AKAE2440#savesave将这些设定写入flash中,下次开发板上电时仍然有效。如果不save则仅改变内存中的参数值,reset后会恢复flash中原来的参数值。设置完成后在开发板上ping主机的ip地址,检查网络是否正常,如下所示:AKAE2440#ping192.168.2.21host192.168.2.21isalive这表示主机能ping通,网络正常。如果显示如下:AKAE2440#ping192.168.2.21pingfailed;host192.168.2.21isnotalive.这就表示主机不能ping通,网络异常,需要检查你的网络。还有一些常见的参数:AKAE2440#setbootdelay3Bootdelay设为3,表示开发板上电后等待3秒再启动,这3秒时间内按任意键会进入u-boot命令行状态,如下图所示:另外,还有:AKAE2440#setbootmodenfs或者AKAE2440#setbootmodenand专业的嵌入式技术研发、推广、培训、认证机构嵌入式Linux就业班内部资料第7页AKAE嵌入式研究中心版权所有Bootmode可以设为nfs或者nand两者之一,这个参数表明了u-boot启动时,根文件系统在哪里寻找,如果是nand表示根文件系统保存在开发板本身的flash某个分区中,要到flash上去找;如果是nfs则表示u-boot要去你的PC机的nfs服务的目录(PC机硬盘上)去找。在开发板bootloader输入以下命令查看64Mflash是如何分区的。AKAE2440#mtdpartsDevicenand0akae2440-nand.#parts=4#:namesizeoffsetmask_flags0:u-boot0x001000000x0002000001:kernel0x002000000x0010000002:ext20x010000000x0
本文标题:1-构建嵌入式Linux开发环境
链接地址:https://www.777doc.com/doc-899446 .html