加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

ARM Linux在SkyEye上的移植

时间:2013-09-03  来源:123485.com  作者:9stone

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只是一个仿真平台,涉及到硬件环节的开发工作,还需要嵌入式开发板的支持.


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门