嵌入式系统原理及应用教程第8章.pptVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.2 BootLoader(vivi)的代码分析 Bootloader有很多种,如本文将要阅读的vivi,除此之外还有uboot,redboot,lilo等等。Vivi 是韩国mizi公司专门为三星s3c2440芯片设计的Bootloader。 vivi也可以分为2个阶段,阶段1的代码在arch/s3c2440/head.S中,阶段2的代码从init/main.c的main函数开始。 阶段1 1.关WATCH DOG (disable watch dog timer) 上电后,WATCH DOG默认是开着的 2.禁止所有中断 (disable all interrupts) vivi中不会用到中断,中断是系统的事,bootloader可不能去干这事的(不过这段代码实在多余,上电后中断默认是关闭的) 3.初始化系统时钟启动MPLL,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz,“CPU bus mode”改为“Asynchronous bus mode”。 4.初始化内存控制寄存器(memsetup):S3c2440共有15个寄存器,在此开始初始化13个寄存器。 5.检查是否从掉电模式唤醒(Check if this is a wake-up from sleep)若是,则调用WakeupStart函数进行处理。 6.点亮所有LED (All LED on)点一下灯,通知外面的同志,告诉他们有情况发生。 7.初始化UART0 (set GPIO for UART InitUART) (1)设置GPIO,选择UART0使用的引脚 (2)初始化UART0,设置工作方式(使用FIFO)、波特率115200 8N1、无流控等。这可是使用串口与s3c2440通信的条件啊,在终端也要如此设置。 8.跳到内存测试函数 9.如果定义了以Nand flash方式启动,则此时要将vivi所有代码(包括阶段1和阶段2)从Nand flash复制到SDRAM中 (1)设置nand flash控制寄存器 (2)设置堆栈指针 (3)设置即将调用的函数nand_read_ll的参数 (4)调用nand_read_ll进行复制 10.跳到bootloader的阶段2运行,亦即调用init/main.c中的main函数(get read to call C functions) (1)重新设置堆栈 (2)设置main函数的参数 (3)调用main函数 阶段2 从init/main.c中的main函数开始,终于步入C语言的世界了。Main函数总共有5步 1、Step 1:reset_handler() 2、Step 2:board_init() board_init调用2个函数用于初始化定时器和设置各GPIO引脚功能 3、Step 3:建立页表和启动MMU mem_map_init函数用于建立页表 mmu_init()函数用于启动MMU 4、Step 4:heap_init()??? 第4步调用了heap_init(void)函数,并返回值。该值是函数heap_init()调用的mmalloc_init()函数的返回值。其实,这步就是申请一块内存区域。 5、Step 5:mtd_dev_init()? 在linux系统中,我们通常会用到不同的存储设备,特别是FLASH设备。为了在使用新的存储设备时,我们能更简便地提供它的驱动程序,在上层应用和硬件驱动的中间,抽象出MTD设备层。驱动层不必关心存储的数据格式如何,比如是FAT32、ETX2还是FFS2或其它。它仅仅提供一些简单的接口,比如读写、擦除及查询。如何组织数据,则是上层应用的事情。MTD层将驱动层提供的函数封装起来,向上层提供统一的接口。这样,上层即可专注于文件系统的实现,而不必关心存储设备的具体操作。 第8章 嵌入式系统Boot Loader技术 嵌入式系统原理及应用教程 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 第8章 嵌入式系统Boot Loader技术 主讲内容 第8章 嵌入式系统Boot Loader技术 BootLoader(vivi)的代码分析 8.2 Boo

文档评论(0)

微微 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档