课嵌入式系统的BootLoader技术优秀PPT.ppt
上传人:天马****23 上传时间:2024-09-10 格式:PPT 页数:42 大小:1.7MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

课嵌入式系统的BootLoader技术优秀PPT.ppt

课嵌入式系统的BootLoader技术优秀PPT.ppt

预览

免费试读已结束,剩余 32 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

从一个最小的“操作系统〞说起0x0000h~0x3ffhBootloader阶段2代码分析partaddpartname(Extended〕BIOSDataArea必须确保所安排的地址范围的确是可读写的RAM空间BootSector3〕拷贝阶段2代码到RAM中size=tag_size(tag_mem32);0x0000h~0x3ffhBootLoader阶段2介绍〔4/8)编译操作系统内核、文件系统〔busybox),并下载至目标机固化S3C2410Bootloader-viviBootLoader阶段2介绍〔7/8)由BootLoader启动操作系统的方式S3C2410Bootloader代码分析对当前内存进行检测;嵌入式软件开发环境建立实验PC机的引导装载简介〔1/2)PC机是通过BIOS来启动机器:1、当PC机加电之后,BIOS启动相应的程序完成机器自检POST〔Power-OnSelfTest);2、寻找可以引导的驱动器,即启动盘IPL〔InitialProgramLoadDevice);3、若找到合法的引导扇区〔以0xAA55结束),那么就会将引导扇区的内容〔共512字节〕装载到内存0x0000:7C00处。4、BIOS把控制权限交给系统引导扇区的程序。BIOSBootSpecification用于描述BIOS识别各类IPL(InitialProgramLoad)设备,并进行引导设备优先级排序、启动加载等功能。BIOS启动时采用实模式〔realmode〕寻址,寻址空间为16位。BIOS启动程序采用汇编语言编写,这使得编写BIOS程序变得比较复杂。BIOS内存分布图BIOSEntry0xFFFF0hBIOSBootBlock0xFe000h~0xFFFFFh(Extended〕BIOSDataAreaBootSector0x7c00hInterruptVector0x0000h~0x3ffhBIOS映像文件BIOS-bochs-latest源代码C程序:rombios.c、rombios32.c汇编代码:rombios32start.SMakefileBIOS映像生成工具biossums.cBIOS-bochs-latest16位实模式程序Power-upEntryPoint〔系统上电入口):0xfff0POSTEntryPoint〔系统检测入口):0xe05bINT19H〔系统引导入口):0xe6f2->int19_relocated->int19_functionINT18H:int18_handler嵌入式系统的BootLoader程序〔1/2)BootLoader的实现依赖于硬件环境CPU体系结构:ARM、PPC、x86、MIPS板级设备:时钟、FLASH、通讯端口BootLoader的入口地址BootLoader与开发机的通讯机制串口网络专用BootLoader通用BootLoader:U-boot、Redboot由BootLoader启动操作系统的方式简单Bootloader只具有系统引导功能具有监控功能〔Monitor〕的Bootloader调试支持内存读写Flash烧写网络下载环境变量配置名称BootLoader的典型框架结构BootLoader阶段1介绍〔1/4)2〕为加载阶段2准备RAM空间除了阶段2可执行映象的大小外,还必须把堆栈空间也考虑进来必须确保所安排的地址范围的确是可读写的RAM空间内存区域有效性检测方法保存指定内存区域写入预定数据读入数据并比较恢复内存数据3〕拷贝阶段2代码到RAM中4〕设置堆栈指针sp5〕跳转到阶段2的C语言入口点BootLoader的阶段1执行完成后的RAM空间布局,如下图:BootLoader阶段1介绍〔4/4)BootLoader阶段2介绍〔1/8)2〕检测系统的内存映射内存映射的描述可以用如下数据结构来描述RAM地址空间中的一段连续的地址范围:内存映射的检测连续内存区域探测——X86系统内存探测算法举例for(p=(char*)0x100000;(int)p<0x40000000;p+=delta){for(ix=0;ix<N_TIMES;ix++)/*保存内存原有信息*/{temp[ix]=*((int*)p+ix);*((int*)p+ix)=TEST_PATTERN;/*TEST_PATTERN0x12345678*/}cacheFlush(DATA_CACHE,p,4*sizeof(int));if(*(int*)p!=TEST_PATTERN)/*测试内存单元