嵌入式μClinux启动程序的开发与优化

嵌入式μClinux启动程序的开发与优化


2024年4月17日发(作者:)

维普资讯

第2o卷第5期 

重 庆 工 

学 院 学 报 

Journal ofChongl 

Imdtute of Te:chnolc 

2006年5月 

Mav 20o6 

v01.20 No.5 

【计算机与自动化】 

嵌入式ltClinux启动程序的开发与优化 

王时龙,练 煜,洪明坚 

(重庆大学软件工程学院,重庆4OOO44) 

摘要:启动程序开发的主要目的是为嵌人式操作系统在特定的硬件平台上营造优化的启动环境 

并保证其正常运行.在实现ttCllnux内核启动程序的基础上,阐明了其总体设计思想,并描述了内 

核下载的实现方法.同时还进一步提出利用UU(unix tO unix)算法来编码解码内核文件的具体方 

案,用以优化内核文件传输过程,进而提高系统的可移植性.经过实践证明该方案是可行的. 

关键词:/ ̄C_2inux;动程序;开发;优化 

文献标识码:A 文章编号:1671一O924(2o06)05一OO66一o4 中圄分类号:TP316.2 

Development and Optimization of Embedded IJL Clinux Bootloader 

WANG Shi—long,LIAN Yu,HONG Ming-jian 

(School of Software Engineering,Chongqing University,Chongqing 4OOO44,China) 

Abstract:The purpose of boodoader development is to build optimized booting environment in which em‘ 

bedded operating system is able to correcdy operate with speciifc hardware platform.This paper expatiates 

on the design roadmap of development of/zClinux boofloader and describes the way to download kc i, 

which is based on programming implementation.At the s ̄ame time,it presents the solution to optiizme the 

process of transportig nkernel file nd iamproves system’s portability.This,solution uses UU(Unix to Unix) 

algorithm o encode atnd decode kernel files durig tnran,;porting process,which proves to be feasible in 

practice. 

Key words:ttClinux;boodoader;development;optiizatmion 

和应用。无论从处理速度还是从寄存器数量上看, 

0引言 

ARM处理器不仅可以应用于微型手表、手持 

在基于ARM芯片的嵌入式设备中,采用操作系统 

来进行整体控制或部分控制的设计构思得到了广 

泛的认同与支持.在这种趋势下,将现有的嵌入式 

操作系统,诸如t ̄Clinux,ucos2,Vxworks等移植到嵌 

入式芯片包括ARM芯片中,已经成为当前嵌入式 

系统开发的一项必不可少的任务. 

设备、因特网装置、瘦客户机、防火墙、工业机器人 

等智能设备上,而且也被广泛应用于通信基础设 

施和车载系统[¨.随着ARM体系结构的不断发展 

收稿日期52006一o4—05 

作者简介:王时龙(1966一)。男。湖南人,教授,博士生导师,主要从事嵌入式操作系统和企业信息化研究;练煜 

(1981一),男,山西太原人。硕士研究生,主要从事LINUX/UNIX操作系统内核和嵌入式操作系统研究. 

维普资讯

王时龙,等:嵌入式,uClinux启动程序的开发与优化 67 

uCl

inux是目前比较成熟的嵌入式操作系统之 

它可以充分地满足硬件设备的实时性要求,并 

且具有较高的适应性和可靠性,还为嵌入式开发 

提供了比较方便调试工具.因此,拥有一套通用、 

稳定、灵活的/ ̄Clinux内核引导程序,对于嵌入式 

系统开发工作,将会起到承前启后的重要作用.与 

此同时,理清处理器与操作系统之间的依赖关系, 

明确启动程序与操作系统满足的递接条件,以及 

在嵌入式系统中实现软件模块的高聚合性和模块 

与模块之间的低耦合性都具有重要的现实意 

义[2_

. 

1/.tClinux内核启动程序开发的设计思想 

操作系统启动程序提供了操作系统加载之前 

所需要的一系列软件环境 3.通过这段程序的执 

行,嵌入式系统可以初始化硬件设备和建立内存 

空间的映射关系,并最终将系统带入合适的软硬 

件环境中.在嵌入式硬件设备加电或复位后,处理 

器通常从某个由制造商预先安排的地址上取指 

令,并且ARM处理器已经将ROM,EEPROM或 

FLASH等存储器地址进行统一编址.这就为启动 

程序对相关硬件初始化以及最终完成调用内核的 

工作创造了有利的条件. 

翠 

由于处理器在设计上采用单一的平板地址空 

间,即0x0000000到0xfftf的地址范围I

4J,

也即是 

系统在加电和复位后,从0x0000000地址执行指 

令,因此,0地址处一定要有必要的指令用来执行.

 

在这种情况下,可以将启动程序设计为2个阶段: 

第1阶段的程序应该都放在系统的ROM中,在系 

统加电和复位后,会自动执行这些指令;第2阶段 

则是在第1阶段的基础上完成进一步初始化系统 

的工作。而且具有加载操作系统内核和根文件系 

统等功能. 

在第1阶段中,首先要对系统所需硬件初始 

化.包括关闭中断设备,关闭“看门狗”以及设置其 

它寄存器内容.与此同时,还要合理地安排内存分 

布情况,以便将第2阶段的代码拷贝到内存的固 

定位置.最终要把程序带入第2阶段的入口处,完 

成从第1阶段到第2阶段的递接过程.在初始化 

的过程中,要充分预计第2阶段的代码容量,否则 

可能会发生程序内存覆盖的严重后果.在第2阶 

段中,除了安排堆栈的内存位置,合理地设置处理 

器主频参数以及对所需硬件设备进行初始化,其 

最主要的工作则是将,uClinux内核和根文件系统 

的映象文件准确地下载到预定的内存位置.在正 

确设定了内核启动参数之后, Clinux操作系统就 

可以独立地无返回地进行工作了 . 

图1是,uClinux启动程序的工作流程. 

图1 启动程序流程图 

2应用xmodem协议实现内核下载 

Xmodem协议是串口通信中比较常用的通信 

协议之一.Xmodem协议是一种单工协议,它可以 

支持多种格式的文件在相同或不同硬件主机之间 

进行对等的上传和下载.Xmodem协议不仅在传输 

过程中具有较高的可靠性和稳定性,而且在实际 

工作过程中便于实现.因此,在嵌入式操作系统的 

启动程序中被广泛采用.

2.1协议数据结构.Xmo

一一一 

 

dem协议首先将待发送 

的数据拆分成一个个128字节大小的数据单元. 

在每个数据单元前面分别包含有数据包的起始字 

符,数据包的序列号字符,以及序列号补码字符. 

在数据单元后面则有2个字节的CRC校验码.这 

样,便组成了一个个133字节大小的数据包(如图 

2).Xinodem协议就是以一个个的数据包作为基本 

通信单位进行数据传输的. 

起始 包序 补 数据 CI 校验码 

字符 列号 码 单元 高字节 低字节 

图2 xmodem数据包 

2.2数据包收发控制及实现.在xmodem协议中, 

每个数据包在被发送之前,必须得到对方的确认 

维普资讯

68 重庆工学院学报 

信息,才能将其发送出去,这种通信机制通常称为 

“握手”过程.“握手”的主要目的在于通过某种特 

定的信号,把通信双方所处的状态告知对方,这样 

就使通信双方达到一种通信的“默契”.如图3所 

示,当接收方准备好接收数据时,随即定时地给对 

方发送NAK字符.如果接收方收到了该字符就会 

直接将数据包发送给接收方.相反,如果等待超时 

的话,发送方会通过连续发送3个cAN字符而单 

方面取消通信进程.当一个数据包发送完毕后,发 

送方将发送ACK字符予以确认.一旦全部数据发 

送完毕,数据发送方将通过发送一个EOF字符以 

通知对方. 

在 Clinux启动程序的开发过程中,将内核的 

映象文件下载到特定的嵌入式系统上,使其正常 

运行恰恰是程序开发的关键环节.为了能够比较 

高效准确地下载内核数据,采用xmodem协议通过 

宿主机上的超级终端工具,通过串口设备将内核 

映象文件zim ̄ge直接下载到嵌入式设备内存的 

Oxc300000地址开始的地址空间内。并引导它立即 

运行来控制嵌入式设备的进一步工作是一个理想 

的选择.如果内核下载进程被迫中断,那么超级终 

端会通过向接收方发送CAN信号来结束此次下 

载.一旦下载任务结束,超级终端将主动地向对方 

发出EOT信号,表示到目前为止已经没有可以发 

送的数据包了,双方结束该通信进程. 

图3 xmodem串口协议示意图 

上述过程是由启动代码中的download(char。) 

的函数接口来实现的.这个函数接口用来负责控 

制从宿主机上下载ttClinux操作系统内核的所有 

工作流程.用户只要在超级终端中选择所要遵守 

的xmodem协议,同时点击发送,便可以完成 

Clinux的内核下载任务. 

2.3数据包确认与CRC校验.在xmodem协议中, 

为了确认所接收的数据包是否是理想的数据包, 

在接收数据的时候,必须对它的序列号加以确认, 

从而保证其有序接收.同时,利用CRC算法来进行 

数据的冗余校验,以保证传输过程的质量. 

由于xmodem协议规定了序列号值范围为0~ 

255,而且数据发送时是依序列号值发送的,这时 

在超级终端发送时就形成了一个发送队列.在 

ttClinux启动程序中,当嵌入式设备接收数据包时, 

程序将验证此包的序列号.如果接收方收到的序 

列号超出了范围或小于前一个数据包的值,而且 

序列号补码也满足相应的要求,这个数据包才会 

被认为是理想的数据包.否则发送方将立即发送 

ACK以提示对方重新发送.这种方式可以有效地 

保证数据发送的有序性和接收队列的正确编排. 

此外,xmodem协议为了在传输过程中避免因 

外界环境干扰或发送不完全所导致的数据传输错 

误,运用了CRC校验算法对所接收的数据包进行 

校验.由于这种校验措施只是针对接收方而采取 

的,故封装在相应的xmodem协议的实现程序中. 

3采用UU算法优化内核文件传输过程 

UU算法(即UU编码解码算法)大多被应用于 

2台主机之间的邮件传输过程中.UU编码解码算 

法的主要目的是解决不同格式传送文件的问题. 

目前,某些信息媒体只支持ASCⅡ码编码文件格 

式i面不支持其它格式的文件.这就使得uu编码解 

码技术突显出其独特的优越性.因为UU编码解码 

算法可以把二进制文件编码成文本文件,而使邮 

件可以方便地发送和接收.采用这种方法可以极 

大地降低文件传输过程中。由于文件格式问题所 

导致的局限性,从而在一定程度上增强通信系统 

对外界环境的适应能力,提高程序模块的通用性 

和可移植性. 

UU编码过程的基本算法思想(如图4)是将二 

进制文件中每3个字节分为1个元组,然后,对每 

组的数据按位进行重新划分,按6位一个字节 

编成由4个字节组成的新元组.随后将其中的每 

个字节的ASC I1码值加上32,从而形成十进制 

ASC11码.32到96为字符域的一个集合,即用这个 

字符域中的字符来表示所有二进制文件中的字 

符.由于uu编码过程和解码过程是互逆过程,因 

此.,在把UU编码文件解码成二进制文件的过程 

中.,只需将每一个元组字符减去32,并把它们重新 

维普资讯

王时龙,等:嵌入式 ̄Clinux启动程序的开发与优化 69 

划分成由3个8位字符组成的元组即可.如图3所 

示。一组8位字符…C’,“a”,“t”经过UU编码后,分 

将内核数据完整地还原为原来的二进制文件格 

式. 

别转化成一组相应的6位字符“O”,“V”,“%”, 

“T”.经过上述处理后的文件内容都是ASCⅡ码字 

4结束语 

符. 

图4 UU算法示意图 

UU编码后的文件遵循一定的文件格式,文件 

的每一行的行首字符是用来对所要编码的字符进 

行统计的.由于文件的每一行必须占6o个6位字 

符,所以6o个6位字符在编码后随即产生了45个 

8位字符,而此行的行首用“M”字符来统计此行的 

编码字符数.由于编码字符数有可能少于6o,因此 

行首字符自然不一定是字符“M”.对于编码文件, 

uu算法采用字符串“begin”作为文件的头标识,而 

以“end”作为文件的尾标识.在这种规定下,在开 

发解码程序时,一定要考虑到跳过文件的头尾标 

识,重点针对具体的文件内容进行解码. 

在t ̄Clinux启动程序设计中,应用uu编码解 

码技术可以有效地解决不同格式的文件传输问 

题.利用UU编码算法在宿主机上对要发送的内核 

映象文件进行重新编码,令其转换成可读的ASC 

Ⅱ码格式文本文件.启动程序可以通过串口把已 

经编码完成的一定格式的ASC H码文本文件下载 

到嵌入式设备内存的O】【3c00oooo地址上,此后对 

已经发送到指定地址的数据进行本地的UU解码, 

这种优化算法不仅可以提高内核文件的传输 

质量,同时也可以把内核传输作为独立模块移用 

到其它启动程序中,从而实现了协议与硬件环境 

的完全解耦.通过对ARM芯片的嵌入式操作系统 

启动程序的开发和研究,发现嵌入式操作系统的 

引导程序可以起到系统模块解耦的作用.也就是 

说,引导程序可以不隶属于操作系统,它可以被看 

作是专为递接操作系统而独立存在的软件模块. 

本文中所提到的 ̄Clinux启动程序就具有这种相 

对独立性.同时,作为一个独立的模块,它的可移 

植性始终是检验软件是否优化的一个重要指标. 

利用UU算法对不同格式文件采取同样的下载方 

式,不仅解决了模块可复用的问题,而且在实现软 

件的模块封装这个层面上也起到了优化的作用. 

参考文献: 

[1]杜春雷.ARM体系结构与编程[M].北京:清华大学 

出版社.2003. 

[2]用思轶.嵌入式Linux设计与应用[M].北京:清华 

大学出版社。2002. 

[3]AiberschatzA.操作系统概念[M],北京:高等教育出 

版社.2002. 

[4] 万晨妍,侯颖欣.基于ARM7TDMI的嵌入式系统设计 

与实现[J].计算机工程,2003(10):166—168. 

[5]林涛,孙鹤旭,Linux在嵌入式系统中的实现[J].微 

计算机信息,2005(7):133—135, 

(责任编辑刘舸) 


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713295293a2220675.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信