0 引言 随着市场需求和嵌入式仿真软件SkyEye的日益成熟,众多的嵌入式软件工程师开始选择SkyEye作为软件设计、开发与调试的平台.SkyEye平台是硬件开发板的变异与延伸,它采用软件技术模拟真实的硬件环境.其各个硬件仿真模块已由开发者完备地验证过,因此基于SkyEye平台的软件设计可以忽略大量的硬件细节,获得更高的设计效率,软件产品的设计周期也得以缩短. 同时随着应用程序规模的不断扩大,在SkyEye平台上运行操作系统的需求也越来越迫切.操作系统可以大大减轻程序员在开发图形界面、多任务调度、硬件资源管理等复杂应用中的负担.而ARMLinux正是一款优秀的嵌入式实时操作系统,所以ARM Linux在SkyEye平台的移植有一定的现实意义. 1 ARM Linux操作系统简介 ARM Linux源自标准的Linux内核,主要针对ARM核的处理器进行了相关移植.由于ARM核的处理器在嵌入式系统领域应用十分广泛,因而ARM Linux也成为诸多嵌入式系统的操作系统平台.为了适应嵌入式应用的需求,它采用了romfs文件系统,可执行文件格式采用的是FLAT格式,而不是标准Linux中采用的elf格式.相对于另一个嵌入式的操作系统uclinux,它启动了MMU,应用程序不能直接读写物理地址(包括CPU寄存器、MEMORY、外设芯片寄存器等),而必须借助驱动的形式,切入内核用ioremap来实现对这些物理地址的访问. ARM Linux的源代码是完全公开的,并且绝大部分源代码都是采用c语言,只有那些直接与CPU相关的代码比如开关CPU中断等操作才使用汇编语言,因此ARM Linux具有很好的移植性. 2 SkyEye仿真平台介绍 SkyEye是一个开源软件项目,中文名字是”天目”.SkyEye的目标是在通用的Linux和Windows平台实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统;SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件.SkyEye从总体上分为四个层次: 1)用户接口模块:完成处理用户的输入命令,并把相关调试数据输出给用户的任务. 2)符号处理模块:主要处理执行文件的头信息,解释执行文件中内嵌的调试信息等, 3)目标控制模块:主要完成执行控制,程序栈结构分析,对具体目标硬件的控制. 4)目标模拟模块:是SkyEye的核心.它模仿计算机系统中的主要硬件的执行,对执行文件的机器指令解释,并模拟执行每一条机器指令,产生相应 的硬件响应等. SkyEye起源于GDB/ARMulator,并进行了改进和扩展.目前模拟的硬件包括CPU、内存、I/O寄存器、时钟、UART、网络芯片、MMU、CACHE等.其硬件模拟逻辑结构如图1所示。 图1 SkyEye硬件模拟逻辑结构 3 ARM Linux操作系统的移植 在移植工作开始之前,应该先做好准备工作,即准备好移植需要的软件包.移植主要需要三个软件包:ARM Linux源码包、ARM 交叉编译所需的编译工具包以及busybox工具包.上述三种工具包都有众多版本,本文中选择的分别是linux-2.4.18-rmk7.tar.bz2、cross-2.95.3.tar.bz2、busybox-1.00.pre10.tar.gz.移植工作主要分4步完成:建立交叉编译环境;编译内核;生成并配置根文件系统;配置SkyEye系统信息.下面详细介绍整个过程.
3.1 建立交叉编译环境 由于已经准备好了所需软件包,所以建立交叉编译环境的过程实际就是对cross-2.95.3.tar.bz2解包的过程.在本文中,所有的软件源码包都放在/ tools目录下,解包所用指令序列在此不做赘述,其解包路径为/usr/local/arm_cross.在上述路径下完成解包后,需使用export指令设置交叉编译工具路径.至此,交叉编译环境已经建立起来,
3.2 交叉编译ARM Linux内核 在交叉编译内核之前,对编译选项的配置是很重要的.执行“make menuconfig”指令,进入Syetem Type选项.本文中选择对CLEP7312系统板的支持,然后配置File System,对于File System应确保如下支持: 1 /proc file system support 2 ROM file system support 3 Second extended fs support 最后配置Block device,确保其有如下支持: 4 RAM disk support 5 Initital RAM disk(initrd)support 以上配置是内核编译的必备工作。保存配置后要修改Makefile文件,即把交叉编译的路径指定为本文中安装的特定目录,修改语句为: CROSS_Complie=/usr/local/arm_cross/2.95.3/bin/arm-linux- 交叉编译工作由以下指令完成: $make dep//设置依赖关系 $make//编译内核 交叉编译时间相对较长,最终会生成一个文件vmlinux,这就是编译成功后的ARM Linux内核文件。本文中所有的测试工作都是在/skyeye.test目录下完成,所以还应该复制vmlinux文件到该目录下,以备测试.
3.3 制作简单的文件系统并配置根文件系统 1)安装busybox工具包 制作系统文件的工具包是busybox,所以在制作之前应该先安装busybox工具.本文中使用的软件包是busybox-1.00.pre10.tar.gz.首先将其解压, 在解压目录下修改Makefile文件,将DOSTATIC的值改为ture,另外还要修改init.C(即启动文件),修改格式如下: #ifndef INIT_SCRIPT #define INIT_SCRIPI "/etc/inittab" #endif 运行如下指令完成安装工作: $make TARGET_ARCH =arm CROSS=arm-linux -PREFIX =/tmp/target all intall 2)创建文件系统的映象文件 ①在/mnt下创建img目录,然后进入根目录执行如下指令创建一个空的映象文件: $dd if=/dev/zero of=initrd bs=1024k count=1 $mke2fs -F -m0 initrd ②使用如下指令加载创建的文件系统,并复制文件系统中必要的文件: $mount -t ext2 -o loop initrd /mnt/img $cp -Rd /map/target/* /mnt/img 3)配置根文件系统 经过上述步骤已经产生了文件系统所需要的一些文件,但是需要设置根路径,即在根路径下添加必须的目录、文件并且正确设置属性. ①创建目录 在/mnt/irng目录下创建根文件系统的一般目录/bin /ete /proc /tmp /var /dev /mnt,并使用chmod命令改变其属性. ②创建设备文件 建立设备文件,一个简单的方法是复制主机/dev/目录下一些必要的设备文件到/mnt/img/dev/目录下.基本的设备文件有:/dev/console /dev/fd0/ dev/null /dev/arm0 /dev/tty /dev/tty0.在复制的过程中,要注意使用dp参数以保证文件属性不变. ③创建相关启动配置文件。 在/nmt/img/ete/目录下创建启动配置文件inittab,编辑内容如下: ::sysinit:/etc/rc yes 在/target/ete/目录下创建启动脚本rc,编辑内容如下: # !/bin/sh hostname ARMTest mount -t proc proc/proc mkdir /vat/tmp /var/log /var/lock cat /etc/motd 在/mnt/img/ete/目录下建立开发板上的文件系统配置文件fstab,编辑内容如下: none /proc proc defaults 上述工作完成后,即可使用umount命令结束操作,并将生成的文件系统initrd复制到测试目录.
3.4 配置SkyEye系统信息 在装载之前,首先了解SkyEye逻辑执行过程,如图2所示.从图中可知是skyeye.conf文件仿真环境启动的必备配置文件,应该首先新建并编辑它. 根据编译内核时选择的系统板,其内容应作如下配置: cpu:arm720t roach:ep7312 mem_bank: map = I, type= RW,addr=0x80000000,size=0x00010000 mem_bank: map = M, type = RW , addr=0xc0000000,size=0x00028000 mem_bank:map = M, type=RW ,addr=0xc0028000, size=0x001d8000,file=./vmlinux,boot =yes mem_bank:map=M,type=RW,addr=0xc0200000。size:0x00200000,file=./initrd mem_bank:map=M,type=RW,addr=0xc0400000,size=0x00c00000 4 装载ARM Linux并进行测试 在上述配置完成以后可以执行如下指令完成装载: $skyeye //进入skyeye (SkyEye)target sim //读取配置文件,并装入内核 (SkyEye)load //加载模块 (SkyEye)run //在skyeye中运行 以上的指令序列将会启动SkyEye仿真软件,并装入内核并运行之.如果运行结果出现图3所示画面,则说明移植已初步成功. 图3 ARM Linux启动初态 为了进一步验证移植的稳定性,本文基于ARMLinux内核配置了Web服务器,具体过程如下: 1)下载boa源码包,解压并编译之,将生成可执行文件boa.在编译之前需要在/boa/src/configure文件中加入CC和CPP的说明,同时修改Makefile文 件中交叉编译器选项. 2)建立目录.由于默认的根文件系统ramdisk是只读的,不能用mkdir等命令来新建目录,应在编译内核前先建好要用到的目录. 3)修改配置文件boa.conf.进入/boa/src目录, 修改defines.h文件,将根目录定义语句改为:#define ERVER_ROOT "/home/httpd". 4)在ramdisk中的/bin/下加入boa可执行文件.并把修改后的boa.eonf和mime.types拷贝到web服务器根目录/home/httpd下.并将一些静态页面放在由boa.conf指定的目录下. 5)配置完成后,重新编译内核.装载内核到SkyEye,启动Boa Web Server.通过浏览器可以正确访问刚刚配置的Web Server,网页也可以正常显示.进一步验证了移植的稳定性. 5 结束语 目前,笔者移植的ARM Linux已经能稳定地运行在SkyEye仿真平台上,这使得基于SkyEye平台的嵌入式Gui的移植以及应用程序的开发有了OS基础,为嵌入式软件设计节约了大量的开发时间,大大提高了开发效率,是后续嵌入式软件开发的有力支持.当然SkyEye只是一个仿真平台,涉及到硬件环节的开发工作,还需要嵌入式开发板的支持.
|