@

1、启动地址

先以2440开发板为例,SDRAM(0x30000000--0x34000000) 共64MB。

uboot中一般设置uboot启动地址为:TEXT_BASE=0x33F80000。该地址是uboot正式运行起来后的地址,但刚开始的汇编阶段代码并不是在该地址上运行的 ,看下面的分析。

2、uboot占用内存

从0x33F80000--0x34000000,相当于在SDRAM最高段地址给了uboot 512KB空间,老版的uboot一般占用300KB,够用了。

如果新版uboot较大,就需要给uboot留更大空间,例如1MB,那么就可以根据自己的SDRAM修改TEXT_BASE。

3、2440从NAND启动

开发板配置为从NAND启动,物理0地址处会链接到4KB的Boot Internal SRAM(硬件实现,这段内存怎么叫也是随意的)(这里没用"映射"用的"链接",是怕理解为MMU映射了);

上电会将NAND FLASH前4KB的代码拷贝到Boot Internal SRAM(硬件实现)(0--0x1000);

从0地址开始运行uboot汇编阶段的代码;

汇编代码会把NAND FLASH中完整的uboot代码拷贝到SDRAM上,地址为TEXT_BASE,完成后就跳转到SDRAM运行。

4、2440从NOR启动

配置为从NOR启动,物理0地址处会链接到NOR FLASH(硬件实现);

上电后NOR FLASH上的uboot代码可以直接运行;

当然,汇编阶段的代码还是会把NOR FLASH中完整的uboot代码拷贝到SDRAM上,地址为TEXT_BASE,完成后就跳转到SDRAM运行。

5、某开发板从SPI FLASH启动

某开发板物理0地址处挂了一块小内存SDRAM,物理高地址处挂了块大内存SDRAM,存储芯片为SPI FLASH

上电会将SPI FLASH中的uboot完整代码拷贝到SDRAM上运行(硬件实现);

然后,汇编阶段代码会把小内存SDRAM中完整的uboot代码拷贝到大内存SDRAM上,地址为TEXT_BASE,完成后就跳转到SDRAM运行。注意该阶段,软件实现的并不是从SPI FLASH将代码拷贝到大内存SDRAM,因为软件操作SPI需要初始化SPI 控制器和SPI FLASH芯片,然而汇编阶段软件还没初始化这俩。

Linux移植总结--uboot从不同介质上启动分析的更多相关文章

  1. freescale-sdk linux移植一搭建编译环境脚本host-prepare.sh分析

    接下来使用自己的课外歇息时间,对基于PowerPC架构freescale-sdk,进行linux移植和分析.主要參考官方文档freescale linux sdk START_HERE.html,首先 ...

  2. Linux移植之配置过程分析

    在Linux移植之移植步骤中已经将Linux移植的过程罗列出来了,现在分析一下Linux的配置过程,将分析以下两个配置过程: 1.make s3c2410_defconfig分析 2.make men ...

  3. Linux移植到自己的开发板(二)UBOOT和Linux

    @ 目录 一.uboot跳转到Linux 二. Linux内核启动之解压阶段 三. Linux内核启动之汇编阶段 插曲:关于Kconfig和Makefile 四. Linux内核启动之C语言阶段 五. ...

  4. Linux移植之tag参数列表解析过程分析

    在Linux移植之内核启动过程start_kernel函数简析中已经指出了start_kernel函数的调用层次,这篇主要是对具体的tag参数列表进行解析. 1.内存参数ATAG_MEM参数解析 2. ...

  5. Linux移植之内核启动过程start_kernel函数简析

    在Linux移植之内核启动过程引导阶段分析中从arch/arm/kernel/head.S开始分析,最后分析到课start_kernel这个C函数,下面就简单分析下这个函数,因为涉及到Linux的内容 ...

  6. Linux移植之make uImage编译过程分析

    编译出uboot可以运行的linux内核代码的命令是make uImage,下面详细介绍下生成linux-2.6.22.6/arch/arm/boot/uImage的过程: 1.vmlinux.Ima ...

  7. Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析【转】

    转自:http://www.latelee.org/embedded-linux/porting-linux-tstest-code.html 本文是作者对tslib库的ts_test.c文件进行分析 ...

  8. Linux系统——访问U-BOOT环境变量

    Linux系统下访问U-BOOT环境变量 移植过U-BOOT的人,都知道:在U-BOOT中存有ENV.但U-BOOT在引导内核启动之后,U-BOOT的生命周期就结束了.那么启动LINUX内核之后,U- ...

  9. CH02基于ZYNQ的嵌入式LINUX移植

    CH02基于ZYNQ的嵌入式LINUX移植 1.1概述 实验环境: Windows 10 专业版 Vmware workstation 14.1.1 Ubuntu 16.04.3 Xilinx SDx ...

随机推荐

  1. 大话devops

    一.敏捷的局限性的促使devops诞生 敏捷的局限性:敏捷只注重开发阶段的敏捷,未涉及到整个产品生命周期流程其他环节导致采用敏捷开发流程后效果不明显. devops成为企业数字化转型的助推器,扮演基础 ...

  2. SpringBoot树获取方法总结

    最近项目中有需要获取全国行政区划省-市-区县-乡镇.街道办的树状结构数据,现将自己获取树的方法总结如下,有不到之处,敬请批评指正! 一.全国行政区划数据的整理以及获取 获取地址:https://pan ...

  3. 如何对Spring MVC中的Controller进行单元测试

    对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试. 具体来讲,是由 ...

  4. MXNet源码分析 | KVStore进程内通信

    本文主要基于MXNet1.6.0版本进行分析. MXNet的KVStore模块下有几个比较重要的类.KVStore是一个抽象类,提供了一些通用的API,例如Init.Push和Pull等.因为KVSo ...

  5. 深入分析CVE-2021-4034及漏洞复现

    正向shell总结 一.winrm,http.sys(端口复用) 介绍 winrm WinRM全称是Windows Remote Management,是微软服务器硬件管理功能的一部分,能够对本地或远 ...

  6. Https原理与演变

    巨人的肩膀 为了一个HTTPS,浏览器操碎了心··· (qq.com)

  7. spring的事务是如何回滚的、事务传播?

    实际上也是问的这个问题  spring的事务管理是如何实现的?总: spring的事务是由aop来实现的,首先要生成具体的代理对象,然后按照aop的整套流程来执行具体的操作逻辑,正常情况下要通过通知来 ...

  8. 思迈特软件Smartbi:利用大数据为产业赋能,且看这家风电巨头的实践之路!

    随着大数据技术成为各行各业转型升级的"新动能",数字化风电.智慧风电场也成为风电行业的高频词,大数据已经逐渐被用于风场从测风到运维的各个环节. Smartbi的某客户是国内风电装备 ...

  9. Java -- List与数组转换

    list转数组 使用for循环 使用list.toArray(new String[]),不可以强制转换list.toArray(),因为数组在jvm是一个object表示的,是一个对象 数组转lis ...

  10. idea教程--Maven 骨架介绍

    简单的说,Archetype是Maven工程的模板工具包.一个Archetype定义了要做的相同类型事情的初始样式或模型.这个名称给我们提供来了一个一致的生成Maven工程的方式.Archetype会 ...