arm裸机程序启动流程
2016-05-27 12:25
239 查看
Linux系统的引导:
一个SOC拿过来,它是有内部BROM和SRAM的,这个BROM中会固化芯片厂商的最初引导代码,我们叫它RBL(ROM boot loader),它是SOC上电后开始运行的地方,它会判断是哪种启动方式,如果是nand启动,就会从nand的起始地址处读取UBL(user boot loader)并且复制到ARM的内存里面,也就是上面说的片内SRAM,UBL运行在ARM的内存里,初始化系统,例如初始化DDR.然后UBL从NAND Flash里面读取U-Boot的内容并且复制到DDR里运行.DDR里面运行的U-Boot又从NAND Flash里面读取Linux内核代码,并且复制到DDR上,然后启动内核.
裸机程序的执行
对于裸机程序,我们首先把它烧写在nand flash的起始处,那么在下次上电启动时的执行过程是这样的,也是从BROM开始执行,BROM会从nand flash中读取内容到SRAM中,然后开始执行,这样会限制裸机程序的大小不能超过SRAM的大小。如果超过,我们就要另想办法,只能先写一个UBL(user boot loader)(小于SRAM的大小),在UBL中先初始化系统,特别是片外RAM,然后把我们的裸机程序mov到片外RAM上进行跳转执行。
从上面的介绍可以看出,两种方式有相似的地方,从本质上讲,linux内核也可以看成是一个很大的程序,它的引导与普通逻辑程序是一样的。
一个SOC拿过来,它是有内部BROM和SRAM的,这个BROM中会固化芯片厂商的最初引导代码,我们叫它RBL(ROM boot loader),它是SOC上电后开始运行的地方,它会判断是哪种启动方式,如果是nand启动,就会从nand的起始地址处读取UBL(user boot loader)并且复制到ARM的内存里面,也就是上面说的片内SRAM,UBL运行在ARM的内存里,初始化系统,例如初始化DDR.然后UBL从NAND Flash里面读取U-Boot的内容并且复制到DDR里运行.DDR里面运行的U-Boot又从NAND Flash里面读取Linux内核代码,并且复制到DDR上,然后启动内核.
裸机程序的执行
对于裸机程序,我们首先把它烧写在nand flash的起始处,那么在下次上电启动时的执行过程是这样的,也是从BROM开始执行,BROM会从nand flash中读取内容到SRAM中,然后开始执行,这样会限制裸机程序的大小不能超过SRAM的大小。如果超过,我们就要另想办法,只能先写一个UBL(user boot loader)(小于SRAM的大小),在UBL中先初始化系统,特别是片外RAM,然后把我们的裸机程序mov到片外RAM上进行跳转执行。
从上面的介绍可以看出,两种方式有相似的地方,从本质上讲,linux内核也可以看成是一个很大的程序,它的引导与普通逻辑程序是一样的。
相关文章推荐
- #新闻拍一拍# IBM 招聘广告要求应聘者具备至少 12 年 K8S 使用经验
- vivi下重新调整分区
- ARM Linux系统启动
- BootISO:从 ISO 文件中创建一个可启动的 USB 设备
- Linux及ARM Linux程序开发笔记(零基础入门篇)
- 路由器启动的顺序
- 1 秒内启动Linux的方法
- 免安转MySQL服务的启动与停止方法
- 解决Mysql服务器启动时报错问题的方法
- C#实现开机自动启动设置代码分享
- VC++实现程序开机启动运行的方法
- Linux系统下Oracle数据库的安装和启动关闭操作教程
- 详解Linux系统中Oracle数据库程序的启动和关闭方式
- Oracle监听器服务不能启动的解决方法
- 使用VBS禁用、启动USB存储设备
- windows下如何安装和启动MySQL
- C#实现将应用程序设置为开机启动的方法
- ip修改后orcale服务无法启动问题解决
- 使用批处理实现启动和停止服务的代码分析(net start&net stop)
- 计算机名称修改后Oracle不能正常启动问题分析及解决