S3C440B0X的bootload设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

S3C440B0X的bootload设计组员:李知周,全源源,吴亚军引子:•1999年4月26日全球不计其数的电脑在上一天正常关机之后再也没有启动起来。它们所表现的故障都是一样的,就好像硬件坏了一样,计算机再也没有一点反应,成了一堆垃圾。这一切就是被认为有史以来最危险、破坏力最强的计算机病毒之一CIH所造成的。引子:•思考:•CIH破坏的是什么?•真的像传说的那样能破坏硬件吗?引子:•首先,CIH破坏的不是硬件,它破坏的仅仅是软件。•CIH破坏的软件就是bootload(包括了在bios内的与硬盘上的bootload)bootload•Bootload从字面上讲就是启动装载程序,这一程序在系统的启动过程中扮演了非常重要的角色。•提出问题:•Bootload为何如此重要?•Bootload为何能决定系统的生死?bootload•原因有五:1.Bootload是系统运行的第一个程序。2.Bootload是启动操作系统的第一步。3.Bootload是软件层次结构中的第一层。4.Bootload是软件对硬件系统的第一次测试。5.Bootload是软件的第一个用户界面。–有那么多个第一,其重要性不言而喻。Bootload是系统运行的第一个程序。•Bootload程序通常是存放在系统复位完成之后pc指针所指向的地方。所以,在复位完后,Bootload程序将被第一个执行,用来初始化硬件,装载操作系统镜像等等工作。如果第一个运行的程序被破坏无法运行,后续程序就不可能没有办法运行了。Bootload是启动操作系统的第一步。•操作系统的映像是通过bootload载入到内存中的。在操作系统启动之前,bootload将操作系统的映像文件拷贝到sram中,并将pc指针的控制权交给sram操作系统,接下来才是操作系统的启动。Bootload是软件层次结构中的第一层。•作为Bootload程序,提供一个低层的驱动是有益的。Bootload是根据硬件定制,通过在bootload里增加一个抽象层接口,使得操作系统可以在一个相对抽象的层次上操作硬件,实现细节的隐藏,降低系统程序员的编程难度。Bootload是软件对硬件系统的第一次测试•在启动的过程中,比较重要的一个环节就是对系统硬件进行测试。测试的重中之重就是对sram的测试。有必要强调的是sram的损毁会直接导致操作系统崩溃。Bootload是运行在flashrom里的,不受sram影响,由他来完成sram的测试再合适不过了。Bootload是软件的第一个用户界面•任何程序没有用户界面,不能向使用者反馈信息,不能接受使用者的命令是不可想象的。作为系统第一个运行的程序,同样要有用户界面。自然,这个用户界面也就是第一个用户界面了工欲善其事,必先利其器——《论语·魏灵公》•想开发出一个好的bootload,必须首先明确bootload设计的主导思想。•同样本次课件不是完全专注于过于细节化的技术,而是介绍设计bootload的设计方法与设计思想。设计的主导思想1.高度的可靠性。2.完善的自我维护能力。3.完善的硬件管理。4.简单有效的交互界面。5.完善的错误报告能力。6.短小精悍。实例研究•Sandstone–一个最小的bootload引自:ARMSystemDeveloper’sGuideDesigningandOptimizingSystemSoftware.代码下载:。2.开始初始化硬件。3.存储器重映射。4.初始化通信硬件。5.引导装载——复制映像文件和转交控制权第一步,执行复位异常•系统的启动从复位异常开始。默认的中断向量表中只有一个复位向量有用,它是真正被执行的第一条指令,其他中断向量都跳转到一个无限循环过程。•复位向量处一般是一个转向下一步工作的跳转语句。•整个向量表被放在flashrom的0x00000000处。第二步,开始初始化硬件•在这一步执行以下操作:1.关闭cpu的cache。2.关闭cpu的写缓冲。3.初始化led,显示当前的系统状态。第三步,存储器重映射•刚复位时的存储空间影射表:存储类型起始地址结束地址大小/KBFlashrom0x000000000x0007ffff512SRAMbank0不可用不可用256SRAMbank1不可用不可用256第三步,存储器重映射•完成重映射后的存储空间影射表存储类型起始地址结束地址大小/KBFlashrom0x018000000x0187ffff512SRAMbank00x000000000x0003ffff256SRAMbank10x000400000x0007ffff256第四步,初始化通信硬件•最简单的通信硬件是串口•在这一步,串口被初始化–9600波特,无奇偶校验,1位停止,无数据流控制。•串口输出Sandstone的提示符:SandstoneFirmware(0.01)+bootingpayload..第五步,引导装载•最后一步•将有效载荷(操作系统的映像文件)复制到sram的0x00000000处。•将pc的控制权交给有效载荷至此,整个Sandstone完成运行Sandstone•Sandstone的不足:1.没有与用户交互界面。2.没有任何调试功能。3.没有flash的烧写功能。4.没有硬件系统的全面自检与设置程序。5.没有向操作系统提供一个硬件抽象层次的软件借口。站在巨人的肩上•IfIhaveseenfurtheritisbystandingontheshouldersofGiants.•From:LettertoRobertHooke•(15February1676)IsaacNewton巨人们•目前被广泛使用的bootload是•Redboot–由redhat公司开发的通用型bootload•ARMFirmwareSuite–ARM公司专门为基于ARM的嵌入式系统开发的固件包•u-boot–由开源社区开发的通用型bootloadRedboot•Redboot功能介绍–引自RebootUserr’sGuideVer1.5July20011.支持通过脚本配置启动。2.通过网口或串口实现简单命令行界面。3.集成gdb调试工具。4.硬件抽象层配置,包括时间日期、ip地址等。5.支持Nandflash的烧写。6.支持上电自检功能。Redboot•Redboot功能的使用方法:•Redboot功能所有功能是通过简单命令行界面下命令的形式提供给用户使用的。通过简单命令行界面,输入各种命令来完成包括硬件配置Redboot命令行•load{file}[-v][-d][-blocation][-r][-m{[xmodem]|[ymodem]|[tftp]|[disk]}][-hhost_IP_ad-dress]将file下载到location处。•dump-blocation[-llength]显示出起始位置为location长度为length的内存空间的内容。Redboot命令行•go[-wtime][location]•在等待time时间后从location处执行•ping[-v][-ncount][-llength][-ttimeouts][-rrate][-iIP_addr]-hIP_addr•测试网络的命令Redboot命令行•cache[ON|OFF]•开关cache的命令•Reset•重起系统•所有的命令可以编写入启动脚本文件中,用于控制整个启动过程。没有答案的问题•设计bootload在功能与大小的最佳平衡点到底在哪里?如何才能在获得足够强大功能的同时达到要求的大小?–折中与平衡这类个问题将永远困扰着设计者,不会有最正确的答案。–每个设计者都将给出自己的答案,追求着没有最好只有更好的目标。谢谢大家

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功