嵌入式uCLinux内核启动过程分析
引言
本文引用地址:http://www.amcfsurvey.com/article/150335.htmuCLinux是专门为无MMU处理器设计的嵌入式操作系统,已支持ARM、Motorola等微处理器。目前采用ARM+uCLinux作为嵌入式系统的一种开发模式非常普遍。
一个基于uCLinux的完整的嵌入式系统由三个部分组成,即系统引导程序Bootloader、uCLinux操作系统内核和文件系统。嵌入式系统的启动引导技术是嵌入式系统开发的一个难点,系统启动引导的成功与否决定了应用程序的运行环境是否能正确建立,系统启动成功是应用正确运行的前提。而uCLinux内核的启动过程也是其中重要一环,分析uCLinux的启动过程,可以加快系统启动速度、正确建立应用环境。本文要研究的就是uCLinux操作系统内核的启动过程。
1 系统简介
本系统采用SamSung公司的Arm7TDMI内核的S3C4510B处理器,主要利用其强大的网络功能,与PC机进行网络通信。该系统的主要功能是利用串口监测一种智能电表,将获得的数据通过Internet传给PC机,由PC机再做进一步的处理,将最终结果呈现给用户。
硬件平台包括一个以ARM为内核的处理器、存储器使用2MB的Flash和16MB的SDRAM,外部接口除了通信的串口,还外接了一个以太网接口,以支持S3C4510B的网络功能。软件平台由以下部分组成:系统引导程序Bootloader、嵌入式操作系统内核、文件系统。
根据内核是否压缩以及内核是否在本地执行,uCLinux通常有两种启动方式:flash本地执行方式和压缩内核加载方式。本系统采用第二种启动方案,即内核的压缩映象固化到flash上,系统启动时在内存中解压,然后在内存中执行,这种启动方式相比第一种方式运行速度更快。
2 uCLinux内核启动过程的实现
可将ARM+uCLinux系统的启动过程总结为以下几个阶段:(1)PC指向复位地址入口处,即0x0H处的Bootloader代码。Bootloader完成一些基本的初始化,将系统的软硬件环境带到一个合适的状态;(2)Bootloader将控制权交给操作系统内核的引导程序后,开始uCLinux内核的加载;(3)uCLinux内核加载引导完成,启动init进程,完成系统的引导过程。
本系统的启动方案采用uCLinux自带的引导程序加载内核。在内核启动过程中主要调用这几个文件:head.S(在linux-2.4.xarcharmnommubootcompressed目录下)、main.c(在linux-2.4.xinitinit目录下)、simpleinit.c(在userinit目录下)[1]。实际应用中应根据硬件平台和系统功能,修改相关文件,以正确地引导系统。
当Bootloader将控制权交给内核的引导程序时,第一个执行的程序就是head.S,它完成了加载内核的大部分工作;misc.c则提供加载内核所需要的子程序,其中解压内核的子程序是head.S调用的重要程序,另外内核的加载还须知道系统的硬件信息,该硬件信息在hardware.h中定义并被head.S所引用。本系统中内核的启动流程如图1所示。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论