您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 第6课嵌入式系统的BootLoader技术ppt-开发
1嵌入式系统的BootLoader技术陈文智浙江大学计算机学院2009年5月2内容提要1.BootLoader程序的基本概念2.BootLoader的典型结构框架3.BootLoader实验实验一BootLoader应用实验实验二U-BOOT的分析和移植31.BootLoader程序的基本概念BootLoader就是在操作系统内核运行之前运行的一段小程序初始化硬件设备和建立内存空间的映射图将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境系统的BootLoader程序通常安排在地址0x00000000处4BootLoader所支持的硬件环境每种不同的CPU体系结构都有不同的BootLoaderBootLoader的安装地址BootLoader相关的设备和机制主机和目标机之间一般通过串口建立连接BootLoader的启动过程5BootLoader的操作模式启动加载模式下载模式BootLoader与主机之间的通信设备及协议62.BootLoader的典型结构框架操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行大多数BootLoader都分为阶段1和阶段2两大部分阶段1实现依赖于CPU体系结构的代码阶段2实现一些复杂的功能72.1BootLoader阶段1介绍BootLoader的阶段1通常包括以下步骤:1)硬件设备初始化。屏蔽所有的中断设置CPU的速度和时钟频率RAM初始化初始化LED关闭CPU内部指令/数据Cache82)为加载阶段2准备RAM空间除了阶段2可执行映象的大小外,还必须把堆栈空间也考虑进来必须确保所安排的地址范围的的确确是可读写的RAM空间93)拷贝阶段2到RAM中4)设置堆栈指针sp5)跳转到阶段2的C入口点BootLoader的阶段2可执行映象刚被拷贝到RAM空间时的系统内存布局,如下图:10112.2BootLoader阶段2介绍1)初始化本阶段要使用到的硬件设备初始化至少一个串口,以便和终端用户进行I/O输出信息初始化计时器等122)检测系统的内存映射内存映射的描述可以用如下数据结构来描述RAM地址空间中的一段连续的地址范围:内存映射的检测typedefstructmemory_area_struct{u32start;/*内存空间的基址*/u32size;/*内存空间的大小*/intused;}memory_area_t;133)加载内核映像和根文件系统映像规划内存占用的布局内核映像所占用的内存范围MEM_START+0X8000根文件系统所占用的内存范围MEM_START+0X00100000从Flash上拷贝While循环144)设置内核的启动参数标记列表(taggedlist)的形式来传递启动参数,启动参数标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束嵌入式Linux系统中,通常需要由BootLoader设置的常见启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD15例:设置ATAG_CORE的代码如下:params=(structtag*)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_next(params);BOOT_PARAMS表示内核启动参数在内存中的起始基地址,指针params是一个structtag类型的指针。宏tag_next()将以指向当前标记的指针为参数,计算出当前标记的下一个标记的起始地址165)调用内核CPU寄存器的设置:R0=0;R1=机器类型ID;关于机器类型号,可以参见:linux/arch/arm/tools/mach-types。R2=启动参数标记列表在RAM中起始基地址;CPU模式:必须禁止中断(IRQs和FIQs);CPU必须SVC模式;Cache和MMU的设置:MMU必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭;HOWTOCALL?172.3关于串口终端向串口终端打印信息也是一个非常重要而又有效的调试手段如果碰到串口终端显示乱码或根本没有显示的问题,可能是因为:BootLoader对串口的初始化设置不正确运行在host端的终端仿真程序对串口的设置不正确18BootLoader启动内核后却无法看到内核的启动输出信息:确认内核在编译时是否配置了对串口终端的支持,并配置了正确的串口驱动程序BootLoader对串口的初始化设置是否和内核对串口的初始化设置一致还要确认BootLoader所用的内核基地址必须和内核映像在编译时所用的运行基地址一致193.BootLoader实验实验一BootLoader应用实验实验二U-BOOT的分析和移植20实验一BootLoader应用实验(1)烧写XsBase255的BootLoader编译生成XsBase255专用的JTAG程序Jflash-XSBase255编译生成XSBase的BootLoaderx-boot255正确连线利用JTAG烧写BootLoader[root@XSBaseJTAG]#./Jflash-XSBase255x-boot25521实验一BootLoader应用实验(2)熟悉使用Bootloader指令,执行各个指令后将其结果与下表的description进行比较UsageHelpDescription对各个指令的简单的说明。ArgumentsNoneExampleX-HYPER255Help22UsageReload[kernel/ramdisk]Description将Flash中纪录的image复制到SDRAM为了复制kernelimage到SDRAM,Autoboot时自动执行ArgumentsKernel–将flash的kernelimage复制到SDRAM0xa0008000Ramdisk–将flash的ramdisk复制到SDRAM0xa0800000ExampleX-HYPER255reloadkernel23UsageTftp[file][loader/kernel/root/ramdisk]Tftp[file][addr]Description通过Ethernet将Host的映像文件下载到SDRAM中ArgumentsLoader–将接收到的文件储存到loader的SDRAM0xa0000000Kernel–将接收到的文件储存到kernel的SDRAM0xa0008000Root–将接收到的文件储存到0xa0000000Ramdisk–将接收到的文件储存到0xA0800000。Addr–SDRAM上纪录接收到的文件的地址ExampleX-HYPER255tftpzImagekernelX-HYPER255tftpzImage0xa000000024UsageFlash[loader/kernel/root/ramdisk]Flash[dest][src][len]Description将SDRAM上的数据储存到flash的相应地址ArgumentsLoader-将SDRAM的loader0xa00000000储存到flash的0x0地址Kernel-将SDRAM的Kernel0xa00080000储存到flash的0xc0000地址Root-将SDRAM的root0xa0000000储存到flash的0x1c0000地址Ramdisk-将SDRAM的ramdisk0xA0800000储存到Flash的0x1c0000地址Dest-储存到flash上的地址Src-原来的数据所在地址Len-复制的长度ExampleXSBASE255flashkernelXSBASE255flash0xc00000xa00000000x10000025UsageBootBoot[opt1][opt2]Boot[addr][opt1][opt2]Description驱动SDRAM上的kernel通过相应arguments驱动或者驱动相应地址的kernel。ArgumentsOpt1–kerneloption(Only0)Opt2–machinetype(X-Hyer255:200)Addr–kernelimageaddressExampleXSBASE255bootXSBASE255boot0200XSBASE255boot0xa0008000020026实验二U-BOOT的分析和移植(1)U-BOOT的特点在线读写Flash、DOC、IDE、IIC、EEROM、RTC。其他一般的BOOT-LOADER不支持IDE和DOC的在线读写。支持串行口kermit和S-record下载代码识别二进制、ELF32、uImage格式的Image,对Linux引导有特别的支持单任务软件运行环境27脚本语言支持(类似BASH脚本)支持WatchDog、LCDlogo和状态指示功能支持MTD和文件系统支持中断详细的开发文档28实验二U-BOOT的分析和移植(2)U-BOOT源代码结构/board:和一些已有开发板相关的文件/common:与体系结构无关的文件,实现各种命令的C文件/cpu:CPU相关文件/disk:disk驱动的分区处理代码/doc:文档/drivers:通用设备驱动程序,如网卡串口USB等29/fs:支持文件系统的文件/net:与网络有关的代码/lib_arm:与ARM体系结构相关的代码/tools:创建S-Record格式文件和U-BOOTimages的工具30实验二U-BOOT的分析和移植(3)对U-BOOT的移植建立自己开发板的目录和相关文件在include/configs目录中添加头文件xsbase.h在board/目录下新建xsbase目录,创建如下文件:flash.c、memsetup.S、xsbase.c、Makefile和u-boot.lds添加网口设备控制程序,cs8900网口设备的控制程序cs8900.c和cs8900.h31实验二U-BOOT的分析和移植(4)修改Makefile在u-boot-1.1.2/Makefile中加入:xsbase_config:unconfig@./mkconfig$(@:_config=)armpxaxsbase32实验二U-BOOT的分析和移植(5)生成目标文件先运行makeclean然后运行makexsbase_config再运行makeall生成三个文件:u-boot——ELF格式的文件,可以被大多数Debug程序识别。u-boot.bin——二进制bin文件,这个文件一般用于烧录到用户开发板中。u-boot.srec——MotorolaS-Record格式,可以通过串行口下载到开发板中33实验二U-BOOT的分析和移植(6)通过JTAG口将u-boot.bin烧写到Flash的零地址,复位后执行u-boot输入help得到所有命令列表
本文标题:第6课嵌入式系统的BootLoader技术ppt-开发
链接地址:https://www.777doc.com/doc-19801 .html