新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > uClinux在嵌入式系统中的移植研究

uClinux在嵌入式系统中的移植研究

作者:时间:2012-05-21来源:网络收藏

1 引言

作为Linux衍生操作系统,具有支持多任务、内核精简、高效、稳定和源代码开放等优点,专门应用于无MMU微处理器的[1]。将应用于已经成为许多嵌入式开发人员的选择。本文针对基于三星公司生产的ARM系列微处理器S3C44B0的硬件平台,详细论述 的过程,主要包括BootLoader的设计, uClinux内核的修改,交叉编译环境的建立,uClinux内核的配置,编译及连接,映像文件的下载及运行。

2 硬件环境

硬件平台以S3C44B0为核心,采用的外部晶振频率为10MHz,内核主频最高可达到64MHz;通过RS232接口与上位机通讯;外接JTAG 接口,支持在线调试;采用SST39VF1601(2M字节)作为程序存储器,对应的地址空间为0x00000000-0x001fffff;采用 HY57VF641620 (8M 字节)作为数据存储器, 对应的地址空间为0x0c000000-0x0c7fffff。硬件框图如图1所示。

图 1 硬件框图

3 uClinux的

3.1 思路

硬件环境确定以后,首先,要为uClinux设计一个BootLoader,通过BootLoader来初始化硬件,引导uClinux运行。 Bootloader设计可以在ads中实现。然后,针对硬件环境,和设计的BootLoader修改uClinux内核。接下来,在Linux操作系统下建立编译uClinux的交叉编译环境。最后,配置、编译、连接uClinux,下载编译得到的映像文件到Flash,通过BootLoader来启动 uClinux。

3.2 Bootloader的设计

BootLoader就是在操作系统内核运行之前运行的一段小程序.通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终转到操作系统内核准备好合适的环境.这里设计的BootLoader主要有启动、下载和烧写引导uClinux的功能。BootLoader完成初始化工作后会通过串口在Windows的终端显示如下信息:0: tftp download 1: Write NorFlash with download file 2: Boot uClinux

在终端的提示符“/”下输入0、1或2分别代表选择功能0、功能1或功能2。BootLoader执行对应的操作,功能0利用TFTP网络传输程序到SDRAM,默认下载地址为0x0c000800;功能1下载程序到 flash,uClinux的映像文件image.rom的下载地址为0x00010000, Romfs.img的下载地址为0x00100000。这两个下载地址不是任意的,前一个地址与BootLoader的功能2有关;后一个地址与 uClinux的文件系统定位有关。具体确定方法在下文论述;功能2启动烧写到Flash的uClinux。[2]

因为本文的重点是uClinux的移植,所以这里不再详述BootLoader的具体实现过程,只介绍一下与uClinux相关的地方:(1)因为 uClinux要利用S3C44B0的串口输出一些信息,所以BootLoader初始化过程中要设定处理器的主频,uClinux根据这个主频来设定串口寄存器,得到一定数值的波特率。本文选择的主频为61Mhz,波特率为115200。(2)执行功能2时,会调用一个MoveRun函数:

Void MoveRun(void)

{void (*fp)(U32,U32)=(void(*)(U32,U32))0xc300000; //0xc300000为uClinux的运行地址

NorFlashRead(0xc300000,0x10000,0x160000) ; //将烧写到0x10000处的image.rom移到//0xc300000

(*fp)(0, 0); //启动uClinux

}

(3) 启动uClinux后,image.rom在0xc300000处自解压,并在0x0c000000处放置uClinux 的中断向量表。即使uClinux 内核已经得到处理器的控制权运行,一旦发生中断,处理器还是会自动跳转到从0x0地址开始的第一级中断向量表中的某个表项(依赖于中断类型)处读取指令运行。所以在编写BootLoader时,地址0x0处的一级异常中断矢量表只需简单地包含向0x0c000000处的中断向量表的跳转指令就可以,这样就能够正确地将发生的事件交给uClinux的中断处理程序来处理,BootLoader的第一级异常中断向量表如下所示:

b ResetHandler ;//跳转到初始化部分

ldr pc,=0x0c000004; // Undefined Instruction Handler

ldr pc,=0x0c000008; // Software Interrupt Handler

ldr pc,=0x0c00000c; // Prefetch Abort Handler

ldr pc,=0x0c000010; // Data Abort Handler

b .

ldr pc,=0x0c000018; //IRQ Handler

ldr pc,=0x0c00001c; //FIQ Handler

矢量控制相关文章:矢量控制原理

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭