嵌入式Linux系统的移植主要有U一Boot、Linux内核、文件系统这三部分。Uboot 是在系统通电时开始执行,初始化硬件设备,准备好软件环境,然后才调用Linux操 作系统内核。文件系统是Limix操作系统中用来管理用户文件的内核软件层。文件 系统包括根文件系统和建立于Flash内存设备之上文件系统。根文件系统包括系统使用 的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储 数据读写结果的区域。 可将Linux系统移植过程大致需要分成6个步骤: 1)准备工作,包括下载源码、建立交叉编译环境等。交叉开发是指在开发主机上 安装开发工具,编辑、编译目标板的引导程序、内核和文件系统,使其能在目标板上 运行。 2)配置和编译bootioader(引导装载程序)。通过这段小程序,可以初始化硬件设 备、建立内存空间的映射表,从而建立适当的系统硬件环境,为最终调用操作系统内 核做好准备。 3)配置和编译Linux内核,对其进行相应的裁剪,修改内核以支持相关的硬件设 备。 4)为大容量 NANDFlash移植文件系统,并将该文件系统加入Limix内核中; 5)制作RAMdisk来挂载根文件系统。Linux系统中的文件和设备是通过文件系统 来组织的。文件系统的存在使得数据和设备可以被有效而透明地存取访问。一个hnux 的最简根文件系统应该包括支持hnux系统正常运行的基本内容,包括系统使用的软件 和库,以及所有用来为用户提供基本支持的架构和指令。 6)烧写、调试系统;如果调试出错,则需要重新配置,再重复上述操作。 3.1开发环境搭建 搭建交叉编译环境是嵌入式开发的第一步,也是很关键的一步。不同的体系结构、 不同的操作内容设置是不同的,而不同版本的内核,也会用到不同的交叉编译器。选 择交叉编译器非常重要,有些交叉编译器经常会有部分的bug,都会导致最后的代码无 法正常运行。gcc的版本有很多种,其中低于3.3.2版本的只能编译Linux2.4版本的 内核,而3.3.2既能支持Linux2.4版本的内核,也能支持 Linux2.6版本的内核。本 文中采用arm一1inux一gcC3.4.1。 从http://www.jybase.net/linux/ pub/armlinux上下载交叉编译工 具包,解压文件并安装。 由于在使用U一boot的时候还常常会用到宿主机种的tftp与nfs这两种网络服务, 所以还需要配置一下网络服务的设置。 安装配置tftp服务的大致步骤如下: a)安装tftp一hpa、tftpd一hpa和openbsd一ine七d程序; b)修改配置文件/etc八netd.conf,开启tftP服务; c)分局配置文件的路径,建立tftp目录,该目录要对开发板平台有读写权限, 因此还需要修改该目录权限。 安装配置nfs服务的大致步骤如下: a)安装nfs内核服务; b)重新配置portmap服务,修改/etC/hostS.deny和/ete/hosts.allow配置文件, 重启portmap服务; C)修改nfs服务的配置文件/etc/exPortS,添加挂载目录和配置; d)重启nfs,并检查可挂载目录。 在开发板与宿主机进行通信的时候必然会用到串口,所以串口终端程序的必不可 少。MiniCom是在Linux系统下比较常用的串口终端工具,简单的配置步骤如下: 运行命令minicom一后出现一个菜单栏,选中串口设置项,修改各项数据使得 其适配开发板的相关参数,如图4一l。 ![]() 设置好之后,开发环境就算是配置完成。 3.2U-boot的移植 3.2.1 U-boot介绍 在一般计算机系统中,系统启动运行的第一段代码是引导加载程序。在嵌入式系 统中实现引导加载启动功能的程序就是Bootloader。Bootloader是在操作系统内核运 行前运行的一段小程序,它实现要实现的功能是:初始化硬件设备、建立内存空间映 射表,从而将软硬件环境引导到一个合适的状态,为操作系统内核的运行做好准备。 U一boot是一个开源的专门针对嵌入式 1inux系统设计的Bootloader,是现在嵌入 式系统中最常用的B。。tloader。U一boot一般都分为阶段1(Stagel)和阶段2(Stage2) 两个部分。Stagel主要完成的工作是:硬件设备的初始化、为StageZ准备RAM空间、 复制StageZ到RAM空间中、设置好堆栈以及跳转到StageZ的C入口点。StageZ主要 实现的功能是〔‘习:初始化本阶段要使用到的硬件设备、检测系统内核映射(memorym即)、 |