网站大量收购独家精品文档,联系QQ:2885784924

引导加载程序vivi的分析和移植研究摘要:Bootloader是嵌入.docVIP

引导加载程序vivi的分析和移植研究摘要:Bootloader是嵌入.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
引导加载程序vivi的分析和移植研究摘要:Bootloader是嵌入.doc

引导加载程序vivi 的分析和移植研究摘??要:Bootloader是嵌入式系统软件开发的第一个环节,它将软硬件紧密地衔接在一起,对于一个嵌入式设备后续的软件开发至关重要。本文 以?S3C2410x处理器和嵌入式Linux为基础,对嵌入式系统中的一款Bootloader进行分析和研究。在对vivi的分析过程中,探讨了 vivi?在S3C2410x处理器上的移植。 关键词:?Bootloader;vivi?;S3C2410x 引言 Bootloader(引导装载器)是用于初始化目标板硬件,给嵌入式操作系统提供板上硬件资源信息,并进一步装载、引导嵌入式操作系 统运行的固件。在嵌入式系统开发过程中, Bootloader的编写往往是设计的主要难点。目前,Bootloader的开发通常都是基于一些开源的Bootloader(如vivi、U- Boot、Blob、ARMBoot、RedBoot等)而设计,它们在设计思路上有许多相通之处。 vivi是当前比较流行的,专门针对ARM9处理器而设计的一款Bootloader,它操作简便,同时提供了完备的命令体系。因此,对其进行分析和研究具有一定的实际意义。    vivi简介 vivi是由韩国Mizi公司开发的一种Bootloader,适合于ARM9处理器,支持S3C2410x处理器,其源代码可以在网站下载。和所有的Bootloader一样,vivi有两种工作模式,即启动加载模式和下载模式。当vivi处于下载模式时, 它为用户提供一个命令行接口,通过该接口能使用vivi提供的一些命令集。    vivi运行过程分析 vivi 作为一种Bootloader,其运行过程分成两个阶段。第一阶段的代码在vivi/arch/s3c2410/head.s中定义,大小不超过10 KB,它包括从系统上电后在0址开始执行的部分。这部分代码运行在Flash中,它包括对S3C2410的一些寄存器、时钟等的初始 化并跳转到第二阶段执行。第二阶段的代码在vivi\init\main.c中,主要进行一些开发板初始化、内存映射和内存管理单元初始化等工作,最后会 跳转到boot_or_vivi()函数中,接收命令并进行处理。需要注意的是在Flash中执行完内存映射后,会将vivi代码拷贝到SDRAM中执 行。如图1所示,给出了vivi的详细的运行过程。 大多数Bootloader都分为stage1和stage2两部分,stage2 的代码通常用 C 语言来实现,以便于实现更复杂的功能并取得更好的代码可读性和可移植性。但是与普通C语言应用程序不同的是,在编译和链接Bootloader 程序时,不能使用glibc库中的函数。因此,从那里跳转进main()函数,而把main()函数的起始地址作为整个stage2执行映像的入口点也存 在两个缺点:无法通过main()函数传递函数参数且无法处理main()函数返回的情况。 一种较为巧妙的方法是利用弹簧床的概念,也就是用汇编 语言写一段trampoline 小程序,并将这段程序作为stage2可执行映象的执行入口点,然后在trampoline汇编小程序中用CPU跳转指令跳入main()函数中去执行。 当main()函数返回时,CPU执行路径再次回到trampoline程序。简而言之,这种方法的思想就是:用这段 trampoline小程序来作为main()函数的外部包裹。 vivi中的trampoline程序如下: @ get read to call C functions ???? ? ldr?sp, DW_STACK_START?@ setup stack pointer ? mov?fp, #0???@ no previous frame, so fp=0 ? mov?a2, #0???@ set argv to NULL ? bl?main???@ call main ? mov?pc, #FLASH_BASE??@ otherwise, reboot; 正常情况下,程序能够正常执行完毕,但是如果出错了,就回到最后一条语句重新启动系统。 图1 vivi运行过程    vivi的移植 为了使移植工作更加快捷,本文选择vivi本。它不仅提供对ARM-920T内核的支持,而且直接提供了对于S3C2410x的板级支持,这使移植工作量相对减少。 vivi中与软件相关的修改 vivi作为Linux系统的启动代码,在编译配置时需要用到函数库,包括交叉编译器库和头文件,交叉编译开关选项设置,还包括Linux内核代码中的库和头文件,所以,通常需要修改vivi工程管理文件Makefile。 vivi中与硬件相关的初始化 与具体运行在哪一个处理器平台上

文档评论(0)

aiwendang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档