S5PV210 uboot启动过程

嵌入式之uboot如何启动内核学习笔记 注:以下内容来自朱老师物联网大讲堂uboot课件 1. uboot和内核到底是什么 1.1 uboot是一个裸机程序 (1)uboot的本质就是一个复杂点的裸机程序。和我们在ARM裸机全集中学习的每一个裸机程序并没有本质区别。 (2)ARM裸机第十六部分写了个简单的shell,这东西其实就是个mini型的uboot。 1.2 内核本身也是一个"裸机程序" (1)操作系统内核本身就是一个裸机程序,和uboot、和其他裸机程序并没有本质区别。 (2)区别就是操作系统运行起来后在软件上分为内核层和应用层,分层后两 阅读详情


按照三星《S5PV210_UM_REV1.1》手册上说明的启动流程,S5PV210上电将从IROM处执行固化的启动代码,对时钟等初始化、对启动设备进行判断,并从启动设备中复制BL1(最大16KB)到IRAM(0xd002_0000处,其中0xd002_0010之前的16个字节储存的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,校验OK转入BL1进行执行;BL1继续初始化,并将BL2复制到IRAM中并对其校验,OK后转入BL2;BL2则要进行比较复杂的初始化,包括DRAM的初始化,完成后将OS代码复制到DRAM中,并转入到OS中执行并完成启动引导。
但是,上述的IRAM只有96K大小,对于日益复杂的uboot来说,肯定是不够的,所以使用UBOOT启动引导的时候,也没全按三星手册上说的执行,具体如下:

首先解释一下我认为的BL0、BL1、BL2:

BL0:是指S5PV210的IROM中固化的启动代码;

BL1:是指在IRAM中执行的UBOOT的部分代码;

BL2:是指在内存中执行的的UBOOT的完整代码;

此版本的UBOOT,其实会编译两个UBOOT.bin,即最终生成的tiny210-uboot.bin包括两部分,前段是spl(重用u-boot中既有的驱动,来生成更小的secondaryprogramloader)文件夹内的tiny210-spl.bin,后段是用于在RAM中执行的完整UBOOT代码。所以学习UBOOT代码是也要两个部分来看。


1、第一步与三星手册上一致,执行IROM内固化的代码,即BL0,BL0会将存储于启动设备的UBOOT代码的前16KB:tiny210-spl.bin复制到IRAM。(tiny210-spl.bin设置为24KB了,但实际绝不会超过16KB,后面全填充的0,所以拷不完也OK。这里是liukun321为了统一MMC与NAND启动而作的修改,也许改成16K就应该OK了,应为IROM里的代码最多拷贝16K进IRAM嘛,一会改改试试。所以呢实际上执行BL1就是执行tiny210-spl.bin。在UBOOT的代码中并不会看到tiny210-spl.bin和完整的UBOOT代码分开两套文件进行编写,都在同样的文件中,只是通过宏定义来控制执行流程,SPL文件夹内由自己的Makefile文件。


2、第一步入口程序是/arch/arm/cpu/armv7/start.S中的_start,设置异常向量地址(地址由ARM 架构决定,不能改变),执行reset,进入SVC32模式,并调用cpu_init_crit对ARM的CP15寄存器进行设置,如清空TLB,关闭MMU等,进入/board/samsung/tiny210/lowlevel_init.S中的lowlevel_init中,进行低级初始化,主要是对时钟、内存、串口、nand等进行初始化,为下一步的代码拷贝做准备。

3、从lowlevel_init出来之后执行call_board_init_f,通过读取OMR_OFFSET寄存器的值,对启动设备进行判断,看看是从mmc启动还是nand启动,判断好后跳入mmc_boot.c或nand_cp.c中,将UBOOT代码拷贝到内存中,地址为_TEXT_BASE:在tiny210.h中定义为0x23e0_0000,换成别的地方也可以,比如3000_0000(注:在跳转到内存中执行之前,所有的语句都是基于PC寻址的,也就是说和代码具体存放的地址没有关系,进行跳转的时候都会计算出跳转目标相对与PC的位置,在跳转过去。)。这里有一个很大的问题,稍后讨论。拷贝完成后直接冲0x23e0_0000出开始执行。那么执行的是什么呢,那先看看拷贝的是什么吧!

a.nand启动

在/arch/arm/cpu/armv7/s5pc1xx/nand_cp.c中,第105行:

for(i = (0x6000>>page_shift); i < (size>>page_shift);i++, buf+=(1<<page_shift)) {

nandll_read_page(buf,i, large_block);

}

指定了拷贝的起始page是nand起始24K之后的第一个PAGE,偏移0x6000的位置,该地址上存储的是完整的UBOOT在RAM中执行的完整启动代码;

b.mmc启动

在/arch/arm/cpu/armv7/s5pc1xx/mmc_boot.c中,第49行:

#defineMOVI_BL2_POS ((eFUSE_SIZE / MOVI_BLKSIZE) +MOVI_BL1_BLKCNT + MOVI_ENV_BLKCNT)

经计算MOVI_BL2_POS位于第24.5K的位置,也即第49个block,偏移0x6200的位置,该地址上存储的同样是UBOOT在RAM中执行的完整启动代码;

注:针对第一点提出的将24K偏移改成16K,经过验证:改成16KB并不可行,其实这里不仅仅是BL1的容量的问题,UBOOT_SPL.BIN实际上只有4K不到,所以对于nand启动来说4KB就足够了,但是对于MMC启动来说却不行,因为SD卡的布局并不一样,它在BL1与BL2之间还插入了16KB的ENV区,所以只能是24K,而对NAND的ENV区在BL2之后了。

所以,无论是MMC启动还是NAND启动,将代码copy到DRAM中并跳转之后,执行的是DRAM中的_start入口函数,重新执行一遍UBOOT,但是一些宏定义已经发生变化,如CONFIG_SPL_BUILD被取消定义,相应的代码也不会执行。

4、因为第一编执行UBOOT的时候ARM的状态都已经初始化OK了,包括时钟,内存等,第二遍执行时只是跳转到内存中执行了,所以这里判断是否在DRAM中执行,如果在内存中执行,则可以直接跳到call_board_init_f去进行班级初始化。当然,源码并不是这样执行的,而是重新执行RESET、LOWLEVEL_INIT等函数,但我验证过,可以不用执行。有兴趣的同志也可以验证一下。

5 、进入board_init_f以后将: a、对gd_t数据结构(include/asm/global_data.h中定义)进行初始化,并填入相关数据,如内存大小、UBOOT镜像长度等;
b、对打印CPU信息、UBOOT版本信息等,并对串口、console进一步初始化,输出nand信息,对内存大小进行计算,并打印出来。 c、为UBOOT的重定向设置物理地址,重定向后UBOOT可使用的end地址为0x3fff_0000,

UBOOT镜像起始地址为0x3ff8_5000。

打印调试信息:

TLBtable at: 3fff0000

Topof RAM usable for U-Boot at: 3fff0000

Reserving424k for U-Boot at: 3ff85000

Reserving928k for malloc() at: 3fe9d000

Reserving24 Bytes for Board Info at: 3fe9cfe8

Reserving120 Bytes for Global Data at: 3fe9cf70


S5PV210 -- UBOOT启动过程解析(TINY210) //主题:S5PV210之UBOOT-2011.06启动过程解析   //作者:kevinjz2010@gmail.com   //平台:S5PV210 ARMV7 TINY210   //------------------------------------------------------------------------------------------------- 阅读详情

相关推荐

ARM启动过程之Uboot两个阶段具体工作(以S5PV210为例)

1,S5PV210的启动过程 (1)iROM:iROM(价格最贵)在0地址处,与CPU总线式连接,上电就会执行,和norflash类似。210启动时会首先执行内部的固件代码,三星公司出厂前内置的代码段,称为BL0。BL0部分包括对SD卡、Nandflash等SOC内部硬件进行初始化并判断系统启动方式,找到外部用来启动系统的存储器,并将存储器中的启动代码(Bootloader)拷贝到SRAM中。 ...

qq_40334837的博客 1140

uboot源码分析(基于S5PV210)之启动第二阶段

(1)这个函数在uboot/lib_arm/board.c的第444行开始到908行结束。(2)这464行还不是全部,因为里面还调用了别的函数。(3)为什么这么长的函数,怎么不分成两三个函数?主要因为这个函数整个构成了uboot启动的第二阶段。(1)第二阶段主要是对开发板级别的硬件、软件数据结构进行初始化。cpu_init 空的board_init 网卡、机器码、内存传参地址dm9000_pre_init 网卡gd -> bd -> bi_arch_number 机器码。

小嵌同学的博客 2049

s5pv210uboot移植教程(原创)

自己移植了x210v3的开发板的uboot和Linux心得,这块开发板基于s5pv210芯片。和其他的210开发板差不多,如果你是210的板子,那么可以参考我写得教程,希望对你有所帮助。

S5PV210-uboot分析(三)

2020.02.08 Uboot启动过程分析 1.启动的大概流程 注意:开发板刚上电时,cpu会首先从0x00000000地址处取值,所有会由硬件电路将高地址的IROM映射到0x00000000处,然后去执行 第零步:设置OM PIN引脚,就可以选择启动方式了,譬如从SD卡启动,emmc启动,norflash启动等等,我们这里假设从NAND启动。...

coolperl的博客 486

s5pv210移植可用的uboot

uboot资源,用于s5pv210开发板。uboot资源,用于s5pv210开发板

U-Boot启动过程--详细版的完全分析

比较详细的介绍U-BOOT的启动过程分析,对想了解uboot的初学者有很好参考价值

嵌入式开发(S5PV210)——u-boot的顶层Makefile分析

前言 uboot的版本 主机的CPU架构和操作系统

weixin_42031299的博客 405

Arduino程序设计(十四)舵机控制实验(SG90)

本文介绍SG90舵机控制原理及实验,主要内容有:1、介绍SG90舵机;2、舵机0°~180°来回转动;3、串口控制舵机转动固定角度。(1)舵机是一种位置(角度)伺服的驱动器。舵机只是一种通俗的叫法,其实质是一个伺服马达。在需要角度不断变化并可以保持的控制系统中应用广泛。如遥控机械人、飞机模型等。(2)舵机的转动角度为0~180°,其内部结构包括电机,控制电路和机械结构三部分。电机有三根线引出,分别接VCC、GNG和信号线。

Alice的博客 1万+

基于s5pv210的Uboot配置--Uboot篇

U-Boot简介 每个操作系统都需要一个引导程序,如下表所示,是几种Linux支持的引导程序,目前还没有做到可以适应全部嵌入式产品的引导程序,所以只能尽量的让一个Boot Loader 代码支持多种不同的构架和操作系统,并让它有很好的可移植性。而U-boot 就是一个支持多平台多操作系统的引导程序,这也是U-boot 的优势所在,而且U-boot 的代码是开源的,对于新功能的添加也十分容易。 ...

haofeng_ma的博客 1065

烽火HG680-LC刷机后体验:当贝纯净桌面+讯飞语音,老盒子秒变智能电视的折腾记录

本文详细记录了烽火HG680-LC机顶盒刷机后的使用体验,通过安装当贝纯净桌面和讯飞语音助手,老盒子焕发新生,实现无广告、快速响应的智能电视功能。文章对比了刷机前后的性能差异,分享了影音播放、语音控制等实用功能,并提供了ADB调试和问题解决的实用技巧,帮助用户将闲置的运营商盒子变身为高性能的智能影音中心。

weixin_30292843的博客 474

第一章、isaacsim 及 isaaclab 安装教程

本专栏所有内容将根据上述资源地址展开,请结合食用~

m0_47719040的博客 4783

S5PV210Uboot 启动过程--start.s

S5PV210Uboot 启动过程–start.s 1 关看门狗 1.1为什么关看门狗? 由于在系统的启动过程中没有及时喂狗导致CPU复位,所以在启动代码的一开始就将看门狗关掉。 1.2怎么关? 找到看门狗控制寄存器WTCON,然后赋值即可。 ldr r0, = OXE2700000 // 将WTCON的地址给到r0这个寄存器 ldr r1, =0x0 // 将0这个值给到R1这个寄存器 str r1, [r0] // 将r1 里面的内容加载到R0存储的地址所在

m0_50610065的博客 241

AutoDock Vina实战:从零开始完成分子对接(附7VU6案例详解)

本文提供了一份详细的AutoDock Vina分子对接实战指南,以SARS-CoV-2 3CL蛋白酶(PDB ID: 7VU6)为例,从零开始手把手教学。内容涵盖软件安装、环境配置、受体与配体文件准备、对接参数设置,以及结果分析与可视化解读,旨在帮助计算生物学与药物发现领域的新手快速掌握这一核心技能。

ooo22的博客 537

S5PV210之UBOOT-2011.06启动过程解析

//主题:S5PV210之UBOOT-2011.06启动过程解析 //作者:kevinjz2010@gmail.com //版权:kevinjz原创 //平台:S5PV210 ARMV7 TINY210 //发布日期:2012-05-24 //最后修改:2012-05-24 //注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分 //---

lqxandroid2012的专栏 2800

揭秘大数据领域数据产品的开发流程

随着企业数字化转型加速,数据产品已成为驱动业务增长的核心载体。不同于传统软件产品,数据产品以数据为核心生产要素,通过数据采集、处理、分析与可视化,为用户提供决策支持或智能化服务。本文旨在系统性拆解数据产品开发的全生命周期,涵盖需求分析、数据工程、模型构建、产品设计、上线运维等关键环节,揭示各阶段的技术原理、实施路径与最佳实践,帮助技术团队与产品团队建立标准化开发流程。核心概念:定义数据产品本质,对比传统软件产品差异技术体系:拆解数据采集、处理、建模、可视化的技术栈与算法原理。

AI Agent Harness Engineering 481

lammps教程:非晶sio2建模方法

大家好,我是小马老师。 本文介绍非晶sio2的建模方法。 sio2的建模方法有很多,可以下载cif文件使用atomsk转为data文件,也可以直接在ms中导入sio2结构,这些方法建的sio2都是标准的sio2晶体。 如果要建立非晶状态的sio2,就是把排列规则的sio2变成无序排列的sio2。 非晶建模方法有很多,在lammps中,可以通过高温高压的方法打乱sio2的排列实现非晶建模。 代码中的温度和步数可根据需要自己调整。 下面给出in文件案例代码。 units metal atom

lammps_jiayou的博客 5270

s5pv210 uboot启动过程打印出来的信息

U-Boot 1.3.4 (Mar 7 2016 - 11:55:20) for x210 CPU: S5PV210@1000MHz(OK) APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz MPLL = 667MHz, EPLL = 96MHz Hcl...

brianen的博客 719

SCADA|KingSCADA通过组合框选择修改变量的值

《SCADA项目中组合框控件的使用方法》 本文详细介绍了SCADA系统中组合框(下拉框)控件的应用方法。通过具体示例演示如何实现:当选择"雷工笔记"时变量值为100,选择"雷工杂谈"时为200,选择"小李食代"时为300的功能。主要实现步骤包括:1)创建项目并添加组合框控件;2)设置Items选项及对应数值;3)创建内存变量;4)使用GetCurrentIndex()和GetItemData()方法;5)在选项变化事件中编写脚本。该控件在SCADA

做有价值的事,积累有价值的笔记! 867

uboot启动流程_s5pv210微处理器的启动过程

S5PV210支持从多种设备启动,如OneNAND、NAND、MMC等。S5PV210的启动框图如图所示,BL0是指S5PV210微处理器的IROM中固化的启动代码,BL1是指在IRAM自动从外存储器(NAND、SD、USB)中复制的uboot.bin二进制文件的头16KB代码,BL2是指在代码重定向后在内存中执行的UBOOT的完整代码。三者之间的关系是:BL0将BL1加...

weixin_39852121的博客 337

在Simulink中搭建一个基于IoT设备间通信协议栈的仿真模型

物联网(IoT)设备间的通信协议栈仿真对于理解不同层级的协议如何协同工作,以及优化网络性能至关重要。通过Simulink结合MATLAB的强大功能,我们可以模拟和分析从物理层到应用层的完整通信过程。下面详细介绍如何使用Simulink进行IoT设备间通信协议栈的仿真。

amy_mhd的博客 157

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

我的嵌入式LINUX学习.卷9------s5pv210芯片的uboot启动过程分解

一棹春风一叶舟,一纶茧缕一轻钩 187

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

三星s5pv210 uboot启动过程理解

uboot启动过程理解     对于2440而言,启动的方式不多。一般就是外界一个NAND FLASH ,2440内部有个NAND FLASH  Controller,会自动把NAND FLASH的前4K拷贝到2440的片内SRAM。2440这个片内SRAM就是所谓的  Stepping Stone刚好也是4K。      在制作启动代码时,就是uboot。一般会把uboo

barret xiong的博客 665

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

s5pv210 uboot 启动过程

u-boot的启动分为两个阶段: stage1: 系统上电后执行的汇编代码,完成系统初始化、代码搬移等操作。 stage2:搭建c环境,进入c语言执行。 stage1: 1.进入管理模式 7.禁止MMU和cache 8.读取启动信息 9.将启动信息分析后写入reg中 10.进入lowlevel.s 11.读取复位标志,如果是唤醒跳过硬件初始化 12.关闭看门狗

菜鸟笔记 669

(转)S5PV210之UBOOT-2011.06启动过程解析

//主题:S5PV210之UBOOT-2011.06启动过程解析 //作者:kevinjz2010@gmail.com //版权:kevinjz原创 //平台:S5PV210 ARMV7 TINY210 //发布日期:2012-05-24 //最后修改:2012-11-27 //注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分 //------------...

dianchixian5277的博客 101
上一篇: Android对Linux内核的改动你知道多少?
下一篇: 基于busybox-1.10.1的简易根文件系统制作
KerNEL.AC.CN
博客等级 码龄15年 100粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值