《构建嵌入式Linux开发环境.docx》由会员分享,可在线阅读,更多相关《构建嵌入式Linux开发环境.docx(21页珍藏版)》请在第一文库网上搜索。
1、构建嵌入式LINUX开发环境构建嵌入式Linux系统1 .取本实验有关的软件包到ftp下载下列软件包:文件名备注binutils_2. 16. 1. tar. bz2 gcc_4. O. 2. tar. bz2 glibc_2. 3. 6. tar. bz2 glibc-linuxthreads-2. 3. 6. tar. bz2 linu-2. 6. 15. 4. tar. bz2 Iinux-Iibc-headers-2. 6. 12. O. tar. bz2制作交叉编译工具链 所需的源码包crosstool-O. 43. tar. gzcrosstool. tar. bz2linu-2.
2、 6. 27. tar. bz2patch-2. 6. 27-akazImagerootfs-basic. tarrootfs-basic. cramfs制作交叉编译工具链 的脚本与补丁 己制作好的交叉编译 工具链,需要解包到 /opt目录使用 内核2. 6. 27针对2440开发板制 作的内核patch 己编译好的内核,可 直接下载到开发板 基本根文件系统打 包,由于有设备文 件,因此解包需要 root权限使用cramfs文件系 统格式的基本根文件 系统映像,可直接下busybox-1. 9. 1. tar. bz2sqlite-3. 4. 0. tar. gzlibcgi-1. 0. ta
3、r. gzqtopia-core-opensource-src-4. 2. 2. tar. gz载到开发板busybox源码包,嵌 入式根文件系统基本 命令集SqIite源码包,嵌 入式数据库Iibcgi源码包,用 于编写CGl程序的C函数库Qtopia Core 源码 包,Qt的嵌入式版本2 .交叉编译工具链要做嵌入式Linux开发,首先需要有交叉编译工具链(cross compiling toolchain), 也就是在主机(x86 PC)上可编译生成目标板可执行文件(ARM指令)的编译工具。与普通 的编译工具链一样,交叉编译工具链也包含编译、链接、修改目标文件的各类程序,如 gcc、gl
4、ibc Ids gas、ObjdUnip、readelf等等。交叉编译工具链本身也是需要编译生成 的,要得到套完整的交叉编译工具链需要编译下列源码包: binutils gcc glibc Iinux (内核) Iinux-Iibc-Headers glibc-1inuxthreads这些源码包具有非常强的版本依靠关系,假如源码包的版本不匹配,在编译过程中会 出现各类各样的问题,有些问题需要对源码做些修改或者者打补丁,有些问题则是没有解 决办法的,只能更换匹配较好的版本。编译的步骤也是比较复杂的,要紧有下列几步: .根据目标平台配置内核源代码,生成内核头文件1 .编译 binutils2 .编
5、译器的自举(bootstrap),也就是先编译出gcc的部分功能(没有glibc支持, 只有C编译器没有C+编译器)3 .编译 glibc4 .编译完整的gcc$ tar xf crosstool-0.43.tar.gz; cd crosstool-0.43 gcc-4. 0. 2 cgcc-4. 0. 2 glibc-2. 3. 6 binutils-2. 16. 1linux-2. 6. 15. 4hdrs2. 6. 12. O修改CroSStOOl-O. 43目录下的脚本demo-arm. sh,取消这一行开头的#号注释符:#eval cat arm.dat gcc-4.0.2-glib
6、c-2.3.6.daf sh all.sh -notest同时将原本没有注释的这一行注释掉(前面加#号):eval cat arm.dat gcc-4.1.0-glibc-23.2-tls.dat sh all.sh notest注意该脚本开头有TARBALLS_DIR=$HOME/downloadsRESLJLT TOP=/opt/crosstool binutils_2. 16. 1. tar. bz2 gcc-4. 0. 2. tar. bz2 glibc_2. 3. 6. tar. bz2 glibc-linuxthreads-2. 3. 6. tar. bz2 linu-2. 6.
7、15. 4. tar. bz2 Iinux-Iibc-headers-2. 6. 12. 0. tar. bz2整个编译结束后,交叉编译工具链将放在optCroSStooI目录下,因此脚本需要在/。Pt下 建子目录,假如不希望使用root权限运行该脚本,则需要事先给/opt目录设置写权限:-$ sudo ch mod a+w /opt然后修改armdat,其中有TARGET=arm-unknown-linux-gnu这是按标准的命名规则为工具链命名的,但是通常我们都使用更简单的命名,很多软 件的MakCfiIe中交叉编译器默认也都使用简单的命名,为此我们把它改为 TARGET=arm-1inu
8、x。由于编译过程需要用到PatCh、bison、flex,确认你的系统中安装了这些软件包。在编译过程中可能还会遇到脚本的兼容性问题,假如你的LinUX发行版将Sh指向dash (比如UbUntU),应将其改指向bash:$ Cd /bin$ sudo In -sf bash sh尽管用dash执行脚本时非常高效同时事实上现完全遵守POSIX标准,然而现存的很多 脚本(比如glibc中的脚本)有不符合POSIX标准的用法,因此仍需改用bash执行。准备就绪后,在CrOSStOO1-0. 43目录下运行demo-arm. sh脚本开始编译。编译完成 后,交叉编译工具链的可执行文件位于optcros
9、stool/gcc-4. 0. 2glibc-2. 3. 6/arm-linux/bin 目录,我们能够把这个路径添加 到PATH环境变量中,比如将下列命令添加到/. bashrc启动脚本:export PATH=$PATH:/opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/bin以上编译步骤需要很长时间,也能够直接从ftp下载已制作好的交叉编译工具链安装 到主机:-$ sudo ch mod a+w /opt-$ tar xf crosstool.tar.bz2 -C /opt然后在/. bashrc启动脚本中修改PATH环境变量。3.熟悉开发环境
10、3.1 U-boot的基本使用方法连接好开发板的网线与串口线,启动minicom(配置成115200 8N1,无FIOWCOntro1 )。 按下开发板电源,立刻按除回车以外的任意键,进入boot loader提示符AKAE2440#。假如 没来及按键就已经启动了内核,能够按开发板上的RESET键重来。注意:u-boot的终端不能处理操纵字符,不要用移动光标键或者翻页键等,退格键能 够用。按了产生操纵字符的键再输入命令就会产生错乱,这时能够按下回车输入当前这条 已经错乱的命令,然后在新的提示符下重新键入命令。输入printenv命令显示boot loader的参数。更换参数使用命令Set或者者
11、SeterIV,如下图所示:上图中,setenv ipaddr 192. 168. 1. 22 表示设置开发板的 IP 地址为 192. 168. 1. 22。setenv netmask 255. 255. 255. O 表示设置子网掩码为 255. 255. 255. Oosetenv serverip 192. 168. 1. 21 表示设置与开发板相连的 PC 机 IP 是 192. 168. 1. 2L能够根据你的情况重新设置。为了统一起见,在后面的实验中,我们统一设置为:AKAE2440 # set ipaddr 192.168.2.100AKAE2440 # set SerVer
12、iPl92.168.2.21 (这一项应该与你的主机 IP 一致)AKAE2440 # set netmask 255.255.255.0AKAE2440# SetgateWayI92.168.2.21 (网关ip设置成什么无所谓,通常都设为主机ip)AKAE2440 # saveSaVC将这些设定写入flash中,下次开发板上电时仍然有效。假如不SaVC则仅改变内存中 的参数值,reset后会恢复flash中原先的参数值。设置完成后在开发板上Ping主机的ip地址,检查网络是否正常,如下所示:AKAE2440 # ping 192.168.2.21host 192.168.2.21 is a
13、live这表示主机能Ping通,网络正常。假如显示如下:AKAE2440 # ping 192.168.2.21ping failed; host 192.168.2.21 is not alive.这就表示主机不能Ping通,网络特殊,需要检查你的网络。还有一些常见的参数:AKAE2440 # set bootdelay 3BOOtdelay设为3,表示开发板上电后等待3秒再启动,这3秒时间内按任意键会进入u-boot 命令行状态,如下图所示:AKAE244 AKAE244。AKAE2440 AKAE2440 4KAE2440 AKAE244。# set bootdelay 3# saveS
14、aving Environment to NAND.Erasing redundant Nand.Writing to redundant Nand. doneAKAE244。 #AKAE244 #AkA匚DddG 丑另外,还有:AKAE2440 # set bootmode nfs或者者AKAE2440 # set bootmode nandBoOtlno加 能够设为nfs或者者nand两者之一,这个参数说明了boot启动时,根文件系 统在哪里寻找,假如是nand表示根文件系统储存在开发板本身的flash某个分区中,要到 flash上去找;假如是nfs则表示u-boot要去你的PC机的nfs
15、服务的目录(PC机硬盘上) 去找。在开发板boot loader输入下列命令查看64M flash是如何分区的。AKAE2440 # mtdpartsDevice nand . # parts = 4#:namesizeoffsetmask_flags0:u-boot0x001000000x0002000001:kernel0x002000000x0010000002:ext20x010000000x0030000003:temp0x02d000000x013000000u-boot分区储存bootloader程序,LinUX内核储存在kernel分区,根文件系统会储存 到ext2分区,temp分区本实验中没有用到。假如mtd