第六课bootloader设计解释.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Bootloader的安装媒介 系统上电时或复位以后,都从芯片厂商预先安排的一个地址处取第一条指令执行(对S3C2410芯片,从0x0处开始)。 由于上电或复位需要运行的第一段程序就是Bootloader,故必须把Bootloader放入该地址。将Bootloader写入固态存储设备,永久保存,系统上电后将自动执行Bootloader。 Bootloader的烧写 Bootloader可以配置系统。没有Bootloader,系统就不能启动。 Bootloader可以实现自烧写。但是系统中没有还没有Bootloader的时候,怎么启动? ————JTAG烧写。 典型的Flash存储空间分配图 程序状态寄存器的格式: 程序状态寄存器CPSR的模式位 U-Boot简介 1999年由德国DENX软件工程中心的Wolfgang Denk发起,全称Universal Bootloader。 特点: ★支持多种硬件构架:包括ARM、x86、PPC、MIPS、m68k、NIOS、Blackfin ★支持多种操作系统:包括Linux、VxWorks、NETBSD、QNX、RTEMS、ARTOS、LynxOS ★支持多达216种以上的开发板 ★开放源代码,遵循GPL条款 ★易于移植、调试 官方网站:http://www.denx.de/wiki/U-Boot/WebHome U-Boot目录结构 ●board 目标板相关文件,主要包含硬件初始化、SDRAM初始化 ●common 独立于处理器体系结构的通用代码 ●cpu 与处理器相关的文件,包含cpu初始化、串口初始化、中断初始化等代码 ●doc U-Boot的说明文档 ●drivers设备驱动代码,如Flash驱动、网卡驱动、串口驱动等 ●fs U-Boot支持的文件系统的实现,如cramfs、fat、ext2、jffs2等 ●include U-Boot使用的头文件,包括不同硬件构架的头文件 ●lib_xxx 处理器相关文件,如我们要使用的lib_arm,与arm体系结构相关的文件 ●net 网络功能的上层文件,实现各种协议,如nfs、tftp、arp等 U-Boot启动流程之stage1 第一阶段的代码位于cpu/arm920t/start.S中,依次完成以下功能: 1、系统上电,进入svc模式 2、关闭看门狗,禁止所有中断 3、进行初级硬件初始化 4、将自身代码拷贝到SDRAM中 5、设置堆栈 6、清空bss段 7、跳转到C语言实现的stage2中 从NAND Flash启动 经典2410试验箱不带NOR Flash, 只能从NAND Flash启动。由硬件实现 选择从NAND启动。系统上电或者复 位时NAND Flash控制器自动将NAND 的前4KB拷贝到一段内置RAM,并将这段RAM映射到0。 U-Boot启动流程之stage2 该函数是c语言的入口函数,定义在lib_arm/board.c中。 首先,初始化全局变量global_data: gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t)); memset ((void*)gd, 0, sizeof (gd_t)); gd-bd = (bd_t*)((char*)gd - sizeof(bd_t)); memset (gd-bd, 0, sizeof (bd_t)); gd是全局变量的一个指针,始终保存在r8中。 global_data的成员大多是开发板的基本设置,如串口波特率、设备序列号、mac地址、 启动参数存储地址等。 U-Boot启动流程之stage2 调用初始化序列: init_fnc_t *init_sequence[] = { board_init, // board/up2410/up2410.c中实现,主要更新GPIO和PLL设置 还包括内核启动参数存放地址设置、ARCH_NUMBER设置 interrupt_init, //在cpu/arm920t/s3c24x0/interrupts.c实现,初始化时钟中断 env_init, //在common/env_nand.c中实现,设置缺省环境变量 init_baudrate, //在lib_arm/board.c中实现

文档评论(0)

富贵礼包 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档