嵌入式Linux在IOP331上的移植实现
引言
虚拟磁带库是指对于用户端(备份服务器/网络端)体现为常规磁带库,但是使用磁盘阵列为存储介质的备份设备。它不仅大大提高了系统的可靠性和可用性,而且对于那些主要使用磁带为数据存储介质、现在想更换为磁盘阵列但又不想全部更换原有设备的用户来说具有非常重要的意义。虚拟磁带库的实现,依赖于以下三项核心技术:嵌入式微处理器、存储协议微处理器和嵌入式操作系统。嵌入式微处理器作为系统的主控单元,实现人机交换及存储协议处理器的控制,同时也是嵌入式操作系统的运行平台;存储协议微处理器实现与存储介质之间的数据传输;嵌入式操作系统主要实现内存管理与进程调度,为设备驱动程序与用户应用程序提供软件平台。本文首先介绍Linux操作系统和Intel 高性能I/O处理器IOP331,然后详细分析移植的各个步骤,最后给出验证和结论。
1.Linux操作系统和IOP331
Linux操作系统源码开放,遵循GPL声明,可以自由修改和传播。由于专用实时操作系统价格昂贵及源码不公开,使Linux在嵌入式应用中占有一席之地。由于Linux自身有诸多优势,吸引了很多开发商的目光,成为嵌入式操作系统的新宠。其源代码可以从Linux的相关网站下载。
本设计使用的嵌入式微处理器是基于XScale的高性能I/O处理器。XScale是Intel公司定义的基于ARM V5TE(除浮点运算外),即支持Thumb模式及DSP扩充指令集的ARM V5体系结构。其硬件体系结构如图1所示。
图1 Intel 80331硬件体系结构图
2.Linux操作系统的移植
2.1 建立交叉编译环境
在移植前需要在主机上建立交叉编译环境。作者在使用的主机上安装了Fedora Core 4的系统,从网上获得了建立交叉编译工具链的软件包crosstool-0.42.tar.bz2。使用最新的binutils和kernel,gcc版本为4.0.2,glibc版本为2.3.6。
解压并修改相关的配置文件后运行demo-arm-xscale.sh脚本建立armv5l-linux的交叉编译工具。整个的建立过程可以分为如下几个阶段:
定义环境变量à解压linux内核并对内核打补丁à编译安装GDB for XScaleà编译安装bintuils工具集à编译安装有关基本的针对XScale CPU的gcc(只支持C语言编译)à编译生成Linux内核à编译用于用户程序的glibc程序库à建立完整功能的gcc。
2.2 配置和编译内核
下载Linux-2.6.15.4内核源代码和针对IOP331的补丁文件patch-2.6.15.4-iop1。解压内核后使用patch命令对内核打补丁。由于作者使用的是Ramdisk文件系统,故内核配置选项中应支持RamDisk support和Initial Ram disk (initrd) support选项。然后使用已经建好的交叉编译工具链进行编译。
内核编译完成后,从目标平台通过TFTP协议下载内核映像。如果是内核映像的最终版本,则使用RedBoot的fis命令将其烧入Flash中,之后每次启动时RedBoot将从Flash中装载内核映像至内存中并解压启动。
上面提到的主Makefile是指根目录下的Makefile。它的作用是:根据.config配置文件形成编译的源文件列表à使用CC对源文件进行编译à使用LD把目标代码链接到一起à形成Linux内核映像和相关文件。
2.3 制作Ramdisk根文件系统
嵌入式系统通常不自带磁盘,这对于要使用文件系统的真正文件的情况来说是一个需要解决的问题。文件是需要存储介质的,所以需要以其它介质来充当磁盘。使用一部分内存空间来代替磁盘的方法就是所谓的“Ramdisk”技术。对此,Linux内核中有相关的支持。
本文使用Busybox工具制作Ramdisk根文件系统映像。首先下载压缩工具包busybox-1.01.tar.tar,解压后进行配置,使能Build BusyBox as a static binary (no shared libs)并配置交叉编译工具链的路径后编译,编译得到的文件在_install文件夹下。配合内核参数0x00800000,0x01000000使用下列命令创建16M的基本Ramdisk映像文件:
dd if=/dev/zero of=ramdisk.img bs=1k count=16k
mke2fs ramdisk.img
编写脚本文件在文件系统中生成基本的目录结构和设备节点。使用mount命令将其挂载到一个文件夹下,将busybox编译得到的全部文件复制到该文件夹下后根据实际需求加入其它内容后卸载映像文件,压缩该映像文件即可得到需要的Ramdisk根文件系统映像。
2.4 内核启动
嵌入式系统跟普通PC机的启动流程不同。PC机启动流程为:系统加电或复位à启动BIOS完成系统硬件启动并将硬盘(或软盘、光盘等)上的有关操作系统启动的系统软件调入内存à bootloader将系统代码读入内存à操作系统初始化àbootloader将控制权交给操作系统à操作系统启动。
图2 Linux移植流程图
在本嵌入式系统中我们选择的是RedBoot,它是Red Hat的一个标准嵌入式操作系统
嵌入式Linux IOP331 移植 虚拟磁带库 相关文章:
- 嵌入式Linux技术在工业控制网络中的应用(10-30)
- 基于嵌入式Linux的组态软件实时数据库的设计(02-01)
- 基于ARM+DSP的嵌入式Linux数控系统设计(11-18)
- 基于嵌入式Linux的细胞特征提取算法设计(11-19)
- 基于S3C2410的嵌入式Linux系统构建(03-02)
- 嵌入式Linux网络编程之:网络基础编程(08-13)