当前位置:文档之家› 嵌入式Linux系统内核的配置、编译和烧写

嵌入式Linux系统内核的配置、编译和烧写

实验二 嵌入式Linux系统内核的配置、编译和烧写 1. 实验目的 1) 掌握交叉编译的基本概念; 2) 掌握配置和编译嵌入式Linux操作系统内核的方法; 3) 掌握嵌入式系统的基本架构。 2. 实验环境 1) 装有Windows系统的计算机; 2) 计算机上装有Linux虚拟机软件; 3) 嵌入式系统实验箱及相关软硬件(各种线缆、交叉编译工具链等等)。 3. 预备知识 1) 嵌入式Linux内核的配置和裁剪方法; 2) 交叉编译的基本概念及编译嵌入式Linux内核的方法; 3) 嵌入式系统的基本架构。 4. 实验内容和步骤 4.1 内核的配置和编译——配置内核的MMC支持 1) 由于建立交叉编译器的过程很复杂,且涉及汇编等复杂的指令,在这里我们提供一个制作好的编译器。建立好交叉编译器之后,我们需要完成内核的编译,首先我们要有一个完整的Linux内核源文件包,目前流行的源代码版本有Linux 2.4和Linux 2.6内核,我们使用的是Linux 2.6内核; 2) 实验步骤: [1] 以root用户登录Linux虚拟机,建立一个自己的工作路径(如用命令“mkdir ‐p /home/user/build”建立工作路径,以下均采用工作路径/home/user/build),然后将“cross‐3.3.2.tar.bz2、dma‐linux‐2.6.9.tar.gz、dma‐rootfs.tar.gz”拷贝到工作路径中(利用Windows与虚拟机Linux之间的共享目录作为中转),并进入工作目录; [2] 解压cross‐3.3.2.tar.bz2到当前路径:“tar ‐jxvf cross‐3.3.2.tar.bz2”; 

 [3] 解压完成后,把刚刚解压后在当前路径下生成的“3.3.2”文件夹移动到“/usr/local/arm/”路径下,如果在“/usr/local/”目录下没有“arm”文件夹,用户创建即可; [4] 解压“dma‐linux‐2.6.9.tar.gz”到当前路径下: tar ‐zxvf dma‐linux‐2.6.9.tar.gz 解压完成后,在当前目录下生成“linux‐2.6.9”文件夹。 [5] 配置内核的MMC支持:进入内核源代码所在目录,即“linux‐2.6.9”,输入“make menuconfig”后回车,弹出如下窗口: 

 用上下键选择“MMC/SD Card Support”,回车后显示: 

 按空格直到“MMC support”前出现“*”,以同样方式选择出现的几

项如下: 

然后按两次“Esc”键,提示你是否保存,选择“Yes”,至此内核MMC

驱动添加完毕。 [6] 修改文件“Makefile”:输入“gedit Makefile”回车,弹出gedit窗口:

加入如下两行: ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm‐linux‐ 保存并关闭。 [7] 编译内核:输入后“./compile‐dma‐270”后回车,开始编译,编译成功时的现象是: 

 生成的内核映像文件“zImage”保存在“./arch/arm/boot/”目录下,

至此内核的配置和编译过程结束。 4.2 根文件系统的建立 1) 在嵌入式系统中,大多数文件系统是从存储器中直接被加载的,但有时受到ROM 或FLASH 大小的限制,文件系统要经过压缩放在存储器中,这时就需要在RAM 中分配一块区域将文件系统解压后,再将文件系统挂载到系统中,这种技术被称为“RAM Disk”,也称“RAM 盘”技术;内核可以从存储器中导出RAM盘镜像,作为根文件系统来使用;在启动时,内核首先检查引导选项是否存在一个initrd,如果有,内核就从指定的存储介质中获得压缩或未压缩的文件系统镜像,并导入到RAM盘中,将其挂载作为根文件系统; 2) 下面主要介绍几种比较常用的文件系统:ROMfs文件系统是使用最多的文件系统,它是一种简单、紧凑和只读的文件系统;ROMfs 顺序存储文件数据,并可以在uClinux支持的存储设备上直接运行文件系统,这样可以在系统运行时节省许多RAM空间。Cramfs文件系统是针对Linux内核2.4之后的版本所设计的一种新型文件系统,也是压缩和只读格式的,其主要优点是将文件数据以压缩形式存储,在需要运行时进行解压缩;由于它存储的文件形式是压缩的格式,所以文件系统不能直接在Flash上运行;虽然这样可以节约很多Flash存储空间,但是文件系统运行需要将大量的数据拷贝到RAM中,消耗了RAM空间。JFFS2日志文件系统是专门针对闪存的文件系统,除了有日志功能,还有负载平衡、垃圾收集等,并且源码公开。YAFFS2(Yet Another Flash File System)文件系统是一种和JFFSx类似的闪存文件系统,和JFFS2相比它减少了一些功能,所以速度更快,而且对内存的占用比较小;YAFFS自带NAND芯片驱动,并且为嵌入式系统提供了直接访问文件系统的API。除了上面介绍的文件系统之外,还有RAMDISK(一种基于内存的文件系统)、TrueFFS等等; 3) Linux内核在系统启动时的最后操作之一就是加载根文件系统,根文件系统中存放了嵌入式系统使用的所有应用程序、库及一些需要用到的服务;由于Linux受到UNIX系统发展的影响,Linux文件系统的组织和UNIX相同;根文件系统中每一个顶级目录都有特定的用途和目的,有些目录是为了多用户模式服务,在大多数没有用户和管理员的嵌入式Linux中,建立一个根文件系统可以不考虑大部分在多用户下需要注意的问题,下表列出了根文件系统顶层目录大致结构: 

目录 内容 bin 基本命令的可执行文件

boot 内核及启动需要用到的一些文件

dev 设备文件

etc 系统配置文件,包括启动文件

home 用户目录

lib 基本库,例如c 库和内核模块

mnt 临时映射文件系统的映射点(映射目标)

proc 内核及进程信息的虚拟文件系统 root root用户目录

sbin 用于系统管理的可执行程序

tmp 临时文件,在SDRAM中建立

usr 该目录的二级目录包含大部分对大多数

用户很有用的应用程序和文档

4) 实验步骤: [1] 解压“dma‐rootfs.tar.gz”到当前路径下:“tar ‐zxvf dma‐rootfs.tar.gz”; [2] 制作根文件系统f1.jffs2:拷贝Windows目录mkfs下的文件mkfs.jffs2到虚拟机相应目录之下(即与“dma‐rootfs.tar.gz”在同一目录下),之后运行如下命令生成根文件系统: ./mkfs.jffs2 ‐r ./rootfs ‐o f1.jffs2 ‐e 0x40000 ‐‐pad=0x01000000 至此,制作根文件系统完成。 4.3 准备虚拟端口GiveIO  实验步骤: 1) 在Windows系统下,进入“GiveIOInstaller”目录中,双击“GiveIOInstaller.exe”启动“GiveIO Installer”程序,显示如下界面: 

 2) 点击“Install Service”按钮,启动GiveIO服务,显示界面为: 

  保留此窗口(即让此程序运行),GiveIO虚拟端口准备完毕。 4.4 烧写BLOB  实验步骤: 1) 拷贝光盘上的“JFlash_27x”文件夹到计算机,如下图所示: 

 2) 点击开始‐>程序‐>附件‐>命令提示符,打开命令行终端,并进入“JFlash_27x”目录,然后输入“JFlashMM.exe pxa270 blob”(注意:<1> 输入后先不要按“Enter”键;<2> blob文件应首先从tftp‐download目录下拷贝到JFlash_27x目录下,或者在命令行上给出blob文件所在的完整路径则无需拷贝): 

 3) 把烧写数据线插入板子上的JTAG头,确保硬件连接正常后,拨动电源开

关上电,输入“Enter”键,开始烧写: 

 4) 烧写完成后,会给出烧写成功的提示,如下图所示: 

至此,烧写blob完成。 4.5 烧写文件系统  实验步骤: 1) 把前面编译好的内核和制作好的文件系统——f1.jffs2、zImage拷贝到Windows下的目录“tftp‐download”之中; 

 2) 点击Windows“开始菜单”,选择“设置‐>网络连接”,禁用VMware的两个网络;同时,配置本地连接的IP地址、子网掩码(特别注意:配置之前请记录PC机原来所使用的IP地址和子网掩码,本实验完成之后,要求按原样设置回去,实验结束时老师要检查!另外,VMware的两个网络实验结束时,也要求重新启用!),并用交叉网线将PC与开发板连接起来,IP 地址:192.168.0.100,子网掩码:255.255.255.0; 3) 进入“Cisco TFTP Server”目录,双击“TFTPServer.exe”,运行该服务器;

相关主题