资料介绍
1 引言
uClinux作为Linux衍生操作系统,具有支持多任务、内核精简、高效、稳定和源代码开放等优点,专门应用于无MMU微处理器的嵌入式系统[1]。将uClinux应用于嵌入式系统已经成为许多嵌入式开发人员的选择。本文针对基于三星公司生产的ARM系列微处理器S3C44B0的硬件平台,详细论述移植uClinux 的过程,主要包括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
3.3 uClinux内核的修改
目前uClinux已被成功移植到S3C44B0及其他多款ARM芯片上,但由于嵌入式操作系统的运行是与嵌入式系统的硬件密切相关的,而硬件的设计则会因为使用场合的不同而千差万别,因此,uClinux内核源代码中和硬件紧密相关的部分就应该针对特定的硬件作出适当的修改。
首先,从网站(www.uClinx.org)下载源码uClinux-dist-20040408,但这个发行包中的内核对S3C44B0X处理器的支持是不完整的,必须为内核打上补丁uClinux-2.4.24.patch(可以从http://www.hzlitai.com.cn下载),然后在终端下执行:patch –p0
-2.4.24.patch就可以安装该补丁。该补丁完善了对S3C44B0的支持,但是它针对特定的硬件及Bootloader,对内核做了相应的修改,因此我们在做移植时应该根据自己的BootLoader及硬件来修改内核。修改部分如下:
(1)压缩内核代码起始地址修改
修改目录linux-2.4.x/arch/armnommu/boot/下的文件Makefile里的如下代码:
ifeq ($(CONFIG_BOARD_MBA44),y)
ZTEXTADDR = 0x0c300000
ZRELADDR = 0x0c008000
Endif
ZTEXTADDR代表 映像文件image.rom自解压的起始地址,它的值是由BootLoader的功能2决定的。执行功能2,将image.rom从Flash转移到SDRAM的地址0x0c300000,内核自解压,所以ZTEXTADDR必须和这个值相同。ZRELADDR代表内核解压后代码输出起始地址。
uClinux作为Linux衍生操作系统,具有支持多任务、内核精简、高效、稳定和源代码开放等优点,专门应用于无MMU微处理器的嵌入式系统[1]。将uClinux应用于嵌入式系统已经成为许多嵌入式开发人员的选择。本文针对基于三星公司生产的ARM系列微处理器S3C44B0的硬件平台,详细论述移植uClinux 的过程,主要包括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
3.3 uClinux内核的修改
目前uClinux已被成功移植到S3C44B0及其他多款ARM芯片上,但由于嵌入式操作系统的运行是与嵌入式系统的硬件密切相关的,而硬件的设计则会因为使用场合的不同而千差万别,因此,uClinux内核源代码中和硬件紧密相关的部分就应该针对特定的硬件作出适当的修改。
首先,从网站(www.uClinx.org)下载源码uClinux-dist-20040408,但这个发行包中的内核对S3C44B0X处理器的支持是不完整的,必须为内核打上补丁uClinux-2.4.24.patch(可以从http://www.hzlitai.com.cn下载),然后在终端下执行:patch –p0
-2.4.24.patch就可以安装该补丁。该补丁完善了对S3C44B0的支持,但是它针对特定的硬件及Bootloader,对内核做了相应的修改,因此我们在做移植时应该根据自己的BootLoader及硬件来修改内核。修改部分如下:
(1)压缩内核代码起始地址修改
修改目录linux-2.4.x/arch/armnommu/boot/下的文件Makefile里的如下代码:
ifeq ($(CONFIG_BOARD_MBA44),y)
ZTEXTADDR = 0x0c300000
ZRELADDR = 0x0c008000
Endif
ZTEXTADDR代表 映像文件image.rom自解压的起始地址,它的值是由BootLoader的功能2决定的。执行功能2,将image.rom从Flash转移到SDRAM的地址0x0c300000,内核自解压,所以ZTEXTADDR必须和这个值相同。ZRELADDR代表内核解压后代码输出起始地址。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 嵌入式实时操作系统μC、OS-II在ARM上的移植.
- 嵌入式实时操作系统FreeRTOS在ARM7上移植实现
- 嵌入式操作系统FREERTOS的移植.
- 如何使用ARM进行嵌入式系统的设计与实现 14次下载
- 嵌入式操作系统uCLinux详解 0次下载
- 基于ARM7与uClinux嵌入式智能终端系统_艾红 0次下载
- PC机键盘防抖动技术在嵌入式系统中的移植 0次下载
- 嵌入式系统Bootloader开发移植
- 嵌入式Web服务器Boa的移植及其应用
- 基于uCLinux的嵌入式通讯的设计
- Java在基于WEB的嵌入式系统中的应用
- 嵌入式Linux2.6在S3C2410上的移植技术探析
- 嵌入式OS-uClinux软件开发环境的建立及应用程序开发模
- 嵌入式Linux系统的移植研究
- 基于ARM的嵌入式uClinux系统设计与Web服务器应用的
- 嵌入式系统中的实时操作系统 263次阅读
- 瑞萨CTSU程序在向嵌入式OS操作系统移植时的注意事项 205次阅读
- 什么是嵌入式系统?嵌入式系统的具体应用 2096次阅读
- 嵌入式系统的全面解析 3146次阅读
- 如何实现嵌入式系统远程调试 5077次阅读
- 关于嵌入式系统以及其在印刷设备中的解决方案及应用浅析 629次阅读
- 基于嵌入式Linux系统下Mini GUI的移植方法与过程详解 3549次阅读
- 基于嵌入式Linux系统的Bootloader模型在MIPS64上的移植设计浅析 853次阅读
- 一种基于嵌入式系统应用的机器人视觉系统设计详解 2511次阅读
- 构建eCos嵌入式系统的步骤教程 3823次阅读
- 嵌入式系统的特点大汇总 5743次阅读
- 随机存储器在嵌入式操作系统中的应用设计详解 1315次阅读
- 基于STM32的嵌入式测控系统设计与实现 8368次阅读
- 典型的嵌入式系统设计 2650次阅读
- 嵌入式工业以太网的应用研究 1449次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多