我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1124|回复: 0

[技术讨论] arm bootloader理解

[复制链接]

该用户从未签到

19

主题

19

回帖

0

积分

二级逆天

积分
0

终身成就奖

QQ
发表于 2016-8-2 16:17:33 | 显示全部楼层 |阅读模式
1.Bootloader的作用
1.   对于无OSarm,可以将其用作一般的单片机使用。不带OSarm另外一种开发方式就是用Bootloader来引导应用程序的下载,如通过串口或网口(具体实现依赖于Bootloader的代码功能)。
2.   要在arm上运行OS,就必须要有Bootloader了。之所以依赖Bootloader引导内核,是因为ARM无法完成大系统映像的下载工作,而Bootloader下载可以有更多的自由度,可以制定内核映像和文件系统映像的下载地址等。Bootloader的职责包括硬件检测、硬件初始化和加载kernel,这些工作按照功能可以分为两个部分:硬件检测和初始化功能实现作为stage1;加载kernel作为stage2stage1完全依赖于硬件,这一部分用汇编语言实现;stage2与操作系统有关,一般用C语言来实现。
2.Bootloader的工作模式
在开发时,通常使用各种命令操作Bootloader,一般通过串口来连接PC和开发板,可以在串口上输入各种命令、观察运行结果、烧写内核和文件系统等。这也只是堆开发人员才有意义,用户使用产品时是不用串口来控制Bootloader的。从这个观点看,bootloader可以分为以下两种工作模式:
1.   启动加载模式
上电后,Bootloader从板子上的某个固态存储设备上将操作系统加载到RAM运行,这个过程没有用户的介入。
2.   下载模式
这种模式下,开发人员使用各种命令,从主机上将文件(内核映像、文件系统映像)下载到目标机上。板子与主机间传输文件时,可以用串口的xmodem/ymodem/zmodem协议,它们使用简单,只是速度比较慢;还可以使用tftpnfs协议来传输;或者使用USB传输。
3.如何将Bootloader烧写(固化)到非易失性存储介质中去呢?(Nor FlashNand Flash等)
具体要分以下几种情况:
(1)使用编程器将Bootloader烧写到falsh:
Bootloader写入Flash,然后将烧写完毕的Flash插入板子上,这是针对Flash还没有插入板子的情形。编程器也叫device programmer,是对非易失性存储介质和其他电可编程设备进行编程的工具。传统的编程器,需要把Flash(举例)从电路板上取下来,插到编程器的接口上,以完成擦除和烧写。现在的编程器发展的方向是ISPIn-System Programming,在系统可编程),就是指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路板上取下器件。
(2)使用ADS软件和ARM仿真器:
先将编译后的Flash烧写程序加载到SDRAM中,运行Flash烧写程序,在指定Flash烧写的起始地址后,Flash烧写程序将从电脑上把编译好的Bootloader映像烧写到Flash的指定位置。
(3)使用Bootloader
这是针对Bootloader已经驻留在Flash的情形,可以通过BootloaderBootloaderBootloader之所以具有这种功能,是由Bootloader的分段执行特性决定的,BootloaderFlash中执行时,主要是把自身剩余的代码复制到SDRAM中,然后进入到SDRAM运行后就可以反过来更新Flash中的Bootloader映像了。如果Bootloader不分段一直在Flash中执行,同时又更新Flash中的数据,这样将造成逻辑错误。
(4)处理器支持从ROM启动
有些厂商为了方便用户下载代码和调试,在其处理器内部集成了一个小的ROM,事先固化一小段代码。因为容量有限,代码的功能有限,一般只是初始化串口,然后等待从串口输入数据。这样,串口线实际上就成为了编程器的硬件连接了。比如,Cirrus Logic EP93XX系列,它内部集成了一个BootROM,固化代码初始化串口,支持从串口下载数据。那么在Host端只需要相应的开发一个相同串口协议的download程序,就可以完成bootloaderEP93XX系列使用的是Redboot)烧写到Falsh里【注:这里的编程器就可以认为是download+RS-232交叉线】,然后从Falsh启动,有Redboot进行下面的工作。因为Redboot实现了串口传输协议和TFTP协议,就可以通过RS-232来进行控制,通过Ethernet完成大的映象文件如kernelfs的下载固化。这样,从硬件上电,到最后系统启动的所有环节就都很清晰了。ATMELAT91RM9200内部也集成了一个ROM,固化代码,同样初始化串口,启动串口传输协议Xmodem,等待输入【注:这里的编程器就可以认为是loader+RS-232交叉线】。官方提供的loader就是完成把U-boot下载固化到flash里面。因为kernelfs比较大,可以采用压缩,官方提供boot来完成从flash启动后自动解压过程。这样,从flash启动就慢了许多。
(5)处理器不支持从ROM启动
还有些厂商为了节省ROM空间,提高集成度,不支持从ROM启动模式。比如三星公司的S3C2410等。这样一种简单的方法就是采用JTAG下载线作为编程器的硬件连接,完成其Bootloader(如Vivi)的烧写。在Windows环境下,针对JTAG硬件连接,编程器的软件有JFlashJTAG for Flash),SJFFlash Programmer等,还是比较丰富的。在Linux环境下,我所知道的有JFlashLinux版本【注:在Linux下,这里的编程器就可以认为是JFlash+JTAG下载线,S3C2410是提供JTAG接口的】

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表