- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于S3C2410系统的vivi引导程序分析
摘要:嵌入式系统启动是以引导程序开始,引导程序会让系统启动后处于操作系统的管理之下,然后嵌入式系统才能发挥它强大的多任务化的管理功能,但嵌入式系统的引导程序有很多,之间差别很大,对它的认识也知之甚少,文中以韩国Mizi公司开发的vivi引导程序为代表,以点带面,详细做了剖析。
关键词:嵌入式 S3C2410 vivi 引导程序
1 概述
引导程序是计算机引导系统软件的一个重要工具,大家对80X86微型机上的引导系统不会陌生,嵌入式系统的引导程序的作用与其相似,通过引导程序可以对系统中的一些主要部件做初始化,对嵌入式系统来说,就是诸如CPU、存储器件、串行口、网络口等部件要做初始配置,相对于微型机来说,嵌入式系统的存储管理出于效率的考虑,对使用有更为精确、严格的要求,引导程序可以分配内存空间的映射,将系统的软件和硬件环境处于最佳的工作状态,为下一步操作系统的引导做好准备工作。
2 vivi引导程序
2.1 vivi简介
Vivi是由韩国Mizi公司面向ARM9处理器开发的引导系统,支持S3C2410处理器。它工作于两种可选模式下,一种是启动加载模式,另一种是下载模式,后面会给出这两种模式的具体分析。启动加载模式下,会完成操作系统的自动引导,下载模式下,会通过一个命令行接口提供的命令完成相应功能。
2.2 vivi程序架构分析
Vivi系统是由一段很小的引导程序构成,它的代码包括如下几个目录:arch,init,drivers,lib和include。
①arch子目录: vivi可以支持很多类型的目标板,不同类型的目标板会对应不同的子目录,文中给出的Vivi引导系统Boot Loader中只包括了S3C2410目录;②Init: vivi的执行就是由这个目录的用C语言写成的main.c文件开始执行,该目录下还有一个名称为version.c的文件;③drivers:内核工作时的设备驱动程序都包括于这个目录,它又将设备驱动分为三种类型,分别置于MTD,串口,网络三个目录下,其中MTD实现的是核心设备的驱动管理,它又分为map,nand,nor三个目录;④lib:针对一些平台实现的公共的代码,用于接口功能的实现;⑤include:实现头文件管理,文中S3C2410的头文件就置于该目录下,它是头文件的公共目录。
3 vivi运行流程分析
3.1 vivi初始化阶段一(在/arch/s3C2410/head.s文件内)
3.1.1 硬件初始化
当上电或复位后,vivi启动,位于NANDFlash中的前4KB程序便从NANDFlash中由S3C2410自动拷贝到一个叫SteppingStone的4KB的内部RAM中,该RAM之后被映射到地址0x00处。此时,也就是vivi前4KB代码开始运行,进行第一阶段的硬件初始化,主要工作为:关Watchdog Timer,关中断,初始化PLL和时钟主频设定,初始化存储器控制器。
3.1.2 配置串口
该步初始化串口寄存器。
3.1.3 复制自身到SDRAM中
当初始化串口结束,vivi开始把自身从NANDFlash中复制到SDRAM中,之后在SDRAM中运行。
3.2 vivi初始化阶段二(在/init/main.c文件内)
3.2.1 继续初始化实验系统硬件
通过board_init()函数完成,该函数在/arch/s3c2410/smdk.c中,主要完成两个功能,时钟初始化(init_time()),以及IO口的配置(set_gpios())。
3.2.2 内存映射初始化,内存管理单元初始化
通过mem_map_init()、mmu_init()函数来完成,这两个函数在/arch/s3c2410/mmu.c中。该启动代码,使用NAND设备作为启动设备。内存映射完后,要使能MMU。
3.2.3 初始化堆
通过heap_init()函数完成,该函数在/lib/head.c中,初始化堆。
3.2.4 初始化mtd设备
通过mtd_init()函数完成,该函数在/drivers/mtd/maps/s3c2410_flash.c中,初始化mtd设备。
3.2.5 初始化私有数据
通过init_priv_data()函数完成,该函数在/lib/priv_data/rw.c中,初始化私有数据。
3.2.6 初始化内置命令
通过init_builtin_cmds()函数完成,该函数在/lib/command.c中,初始化内置命令。
3.2.7 启动vivi
通过boot_
原创力文档


文档评论(0)