1、第第4章嵌入式系统的章嵌入式系统的BootLoader技术技术2022-10-6第4章嵌入式系统的BootLoader技术内容提要1.Boot Loader程序的基本概念 2.Boot Loader的典型结构框架 3.Boot Loader实验 实验一 Boot Loader应用实验实验二 U-BOOT的分析和移植第4章嵌入式系统的BootLoader技术1.Boot Loader程序的基本概念Boot Loader就是在操作系统内核运行之前运行的一段小程序 初始化硬件设备和建立内存空间的映射图 将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境 系统的Boot
2、Loader程序通常安排在地址0 x00000000 处 第4章嵌入式系统的BootLoader技术Boot Loader所支持的硬件环境 每种不同的CPU体系结构都有不同的Boot Loader Boot Loader的安装地址 Boot Loader相关的设备和机制 主机和目标机之间一般通过串口建立连接 Boot Loader的启动过程 第4章嵌入式系统的BootLoader技术Boot Loader的操作模式 启动加载模式 下载模式 Boot Loader与主机之间的通信设备及协议 第4章嵌入式系统的BootLoader技术2.Boot Loader的典型结构框架操作系统的角度看,Boo
3、t Loader的总目标就是正确地调用内核来执行 大多数Boot Loader都分为阶段1和阶段2两大部分 阶段1实现依赖于CPU体系结构的代码 阶段2实现一些复杂的功能 第4章嵌入式系统的BootLoader技术2.1 Boot Loader阶段1介绍Boot Loader 的阶段1通常包括以下步骤:1)硬件设备初始化。屏蔽所有的中断 设置CPU的速度和时钟频率 RAM初始化 初始化LED 关闭CPU内部指令数据Cache 第4章嵌入式系统的BootLoader技术2)为加载阶段2准备RAM空间 除了阶段2可执行映象的大小外,还必须把堆栈空间也考虑进来 必须确保所安排的地址范围的的确确是可读
4、写的RAM空间第4章嵌入式系统的BootLoader技术3)拷贝阶段2到RAM中 4)设置堆栈指针sp 5)跳转到阶段2的C入口点 Boot Loader 的 阶段2 可执行映象刚被拷贝到 RAM 空间时的系统内存布局,如下图:第4章嵌入式系统的BootLoader技术第4章嵌入式系统的BootLoader技术2.2 Boot Loader阶段2介绍1)初始化本阶段要使用到的硬件设备初始化至少一个串口,以便和终端用户进行I/O输出信息 初始化计时器等第4章嵌入式系统的BootLoader技术2)检测系统的内存映射 内存映射的描述 可以用如下数据结构来描述RAM地址空间中的一段连续的地址范围:内
5、存映射的检测 typedef struct memory_area_struct u32 start;/*内存空间的基址*/u32 size;/*内存空间的大小*/int used;memory_area_t;第4章嵌入式系统的BootLoader技术3)加载内核映像和根文件系统映像 规划内存占用的布局 内核映像所占用的内存范围 根文件系统所占用的内存范围 从Flash上拷贝 第4章嵌入式系统的BootLoader技术4)设置内核的启动参数 标记列表(tagged list)的形式来传递启动参数,启动参数标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束 嵌入式Linux系统中
6、,通常需要由Boot Loader设置的常见启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD 第4章嵌入式系统的BootLoader技术l例:设置ATAG_CORE的代码如下:params=(struct tag*)BOOT_PARAMS;params-hdr.tag=ATAG_CORE;params-hdr.size=tag_size(tag_core);params-u.core.flags=0;params-u.core.pagesize=0;params-u.core.rootdev=0;params=tag_
7、next(params);BOOT_PARAMS 表示内核启动参数在内存中的起始基地址,指针params是一个struct tag类型的指针。宏tag_next()将以指向当前标记的指针为参数,计算出当前标记的下一个标记的起始地址 第4章嵌入式系统的BootLoader技术5)调用内核 CPU寄存器的设置:R00;R1机器类型ID;关于机器类型号,可以参见:linux/arch/arm/tools/mach-types。R2启动参数标记列表在RAM中起始基地址;CPU 模式:必须禁止中断(IRQs和FIQs);CPU必须SVC模式;Cache和MMU的设置:MMU必须关闭;指令Cache可以打
8、开也可以关闭;数据Cache必须关闭;第4章嵌入式系统的BootLoader技术2.3 关于串口终端 向串口终端打印信息也是一个非常重要而又有效的调试手段如果碰到串口终端显示乱码或根本没有显示的问题,可能是因为:Boot Loader 对串口的初始化设置不正确 运行在host 端的终端仿真程序对串口的设置不正确 第4章嵌入式系统的BootLoader技术Boot Loader 启动内核后却无法看到内核的启动输出信息:确认内核在编译时是否配置了对串口终端的支持,并配置了正确的串口驱动程序 Boot Loader 对串口的初始化设置是否和内核对串口的初始化设置一致 还要确认 Boot Loader
9、 所用的内核基地址必须和内核映像在编译时所用的运行基地址一致 第4章嵌入式系统的BootLoader技术3.Boot Loader实验实验 实验一 Boot Loader应用实验实验二 U-BOOT的分析和移植第4章嵌入式系统的BootLoader技术实验一 Boot Loader应用实验(1)烧写XsBase255的BootLoader 编译生成XsBase255专用的JTAG程序 Jflash-XSBase255编译生成XSBase的Boot Loader x-boot255 正确连线利用JTAG烧写BootLoader rootXSBase JTAG#./Jflash-XSBase255
10、 x-boot255第4章嵌入式系统的BootLoader技术实验一 Boot Loader应用实验(2)l熟悉使用 Bootloader 指令,执行各个指令后将其结果与下表的 description进行比较 UsageHelpDescription对各个指令的简单的说明。ArgumentsNoneExampleX-HYPER255 Help第4章嵌入式系统的BootLoader技术UsageReload kernel/ramdiskDescription将Flash中纪录的image复制到SDRAM为了复制 kernel image到 SDRAM,Autoboot时自动执行Arguments
11、将Kernel flash的 kernel image复制到 SDRAM 0 xa0008000将Ramdisk flash的 ramdisk复制到 SDRAM 0 xa0800000ExampleX-HYPER255 reload kernel第4章嵌入式系统的BootLoader技术UsageTftp file loader/kernel/root/ramdiskTftp file addrDescription通过Ethernet将 Host的映像文件下载到SDRAM中ArgumentsLoader将接收到的文件储存到loader的SDRAM 0 xa0000000Kernel将接收到的
12、文件储存到kernel的 SDRAM 0 xa0008000Root 将接收到的文件储存到 0 xa0000000Ramdisk 将接收到的文件储存到 0 xA0800000。Addr SDRAM上纪录接收到的文件的地址ExampleX-HYPER255 tftp zImage kernelX-HYPER255 tftp zImage 0 xa0000000第4章嵌入式系统的BootLoader技术UsageFlash loader/kernel/root/ramdiskFlash dest src lenDescription将SDRAM上的数据储存到flash的相应地址ArgumentsL
13、oader-将SDRAM的loader 0 xa00000000储存到flash的0 x0地址Kernel-将SDRAM的Kernel 0 xa00080000储存到flash的0 xc0000 地址Root-将SDRAM的root 0 xa0000000储存到flash的0 x1c0000地址Ramdisk-将SDRAM的ramdisk 0 xA0800000储存到Flash的0 x1c00 00地址Dest-储存到flash上的地址Src-原来的数据所在地址Len-复制的长度ExampleXSBASE255 flash kernelXSBASE255 flash 0 xc0000 0 xa
14、0000000 0 x100000第4章嵌入式系统的BootLoader技术UsageBootBoot opt1 opt2Boot addr opt1 opt2Description驱动SDRAM上的 kernel通过相应 arguments 驱动 或者驱动相应地指的kernel。ArgumentsOpt1 kernel option(Only 0)Opt2 machine type(X-Hyer255:200)Addr kernel image addressExampleXSBASE255 bootXSBASE255 boot 0 200XSBASE255 boot 0 xa0008000
15、 0 200第4章嵌入式系统的BootLoader技术实验二 U-BOOT的分析和移植(1)U-BOOT的特点 在线读写Flash、DOC、IDE、IIC、EEROM、RTC 支持串行口kermit和S-record下载代码识别二进制、ELF32、uImage格式的Image,对Linux引导有特别的支持单任务软件运行环境 第4章嵌入式系统的BootLoader技术脚本语言支持(类似BASH脚本)支持WatchDog、LCD logo和状态指示功能等 支持MTD和文件系统 支持中断 详细的开发文档 第4章嵌入式系统的BootLoader技术实验二 U-BOOT的分析和移植(2)U-BOOT源代
16、码结构board:和一些已有开发板相关的文件 common:与体系结构无关的文件,实现各种命令的C文件 cpu:CPU相关文件 disk:disk驱动的分区处理代码doc:文档 drivers:通用设备驱动程序 第4章嵌入式系统的BootLoader技术fs:支持文件系统的文件 net:与网络有关的代码 lib_arm:与ARM体系结构相关的代码tools:创建S-Record格式文件 和U-BOOT images的工具 第4章嵌入式系统的BootLoader技术实验二 U-BOOT的分析和移植(3)对U-BOOT的移植建立自己开发板的目录和相关文件 在include/configs目录中添加
17、头文件xsbase.h 在board/目录下新建xsbase目录,创建如下文件:flash.c、memsetup.S、xsbase.c、Makefile和u-boot.lds添加网口设备控制程序,cs8900网口设备的控制程序cs8900.c 和cs8900.h 第4章嵌入式系统的BootLoader技术实验二 U-BOOT的分析和移植(4)修改Makefile 在u-boot-1.1.2/Makefile中加入:xsbase_config:unconfig./mkconfig$(:_config=)arm pxa xsbase第4章嵌入式系统的BootLoader技术实验二 U-BOOT的分析和移植(5)生成目标文件先运行make clean 然后运行make xsbase_config 再运行make all生成三个文件:u-bootELF格式的文件,可以被大多数Debug程序识别。u-boot.bin二进制bin文件,这个文件一般用于烧录到用户开发板中。u-boot.srecMotorola S-Record格式,可以通过串行口下载到开发板中 第4章嵌入式系统的BootLoader技术2022-10-6第4章嵌入式系统的BootLoader技术