s5pv210 uboot 源码分析 笔记版 转载请注明出处---crosskernel@gmail.com

TQ210学习笔记——uboot代码搬移 @专题9 代码搬移 copy_to_ram: ldr r0, =0xd0020000 @搬移起点 ldr r1, =0x20000000 @搬移终点 add r3, r0, #(1024*4) @r3=起点+复制的数据量(4KB) copy_loop: ldr r2, [r0], #4 @开始读数据,因为一次32位,所以读完后地址要后移4个字节 str r2, [r1], #4 @ 阅读详情
Uboot二进制镜像分析:


在文件board/samsung/smdkc110/config.mk里面定义了uboot的基地址:
TEXT_BASE = 0xc3e00000


在文件board/samsung/smdkc110/u-boot.lds里面定义了uboot链接格式:


OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x00000000;


. = ALIGN(4);
.text      :
{
 cpu/s5pc11x/start.o(.text)
 cpu/s5pc11x/s5pc110/cpu_init.o(.text)
 board/samsung/smdkc110/lowlevel_init.o(.text)
          cpu/s5pc11x/onenand_cp.o      (.text)                 
          cpu/s5pc11x/nand_cp.o (.text)                     
          cpu/s5pc11x/movi.o (.text) 
          board/samsung/smdkc110/flash.o (.text) 
          common/secure.o (.text) 
 common/ace_sha1.o (.text)
 cpu/s5pc11x/pmic.o (.text)
 *(.text)
}
…
}








S5pv210如果设置从SD卡启动,则IROM先探测channel 0和后探测channel 2,从中读取有效BL1(uboot的BL1跟Uboot是在一个文件里,对于wince eboot和bl1是分开的两个文件)。


BL1的分析


typedef u32(*copy_sd_mmc_to_mem)
void movi_bl2_copy(void)
{
ulong ch;
#if defined(CONFIG_EVT1)


//0xD0037488是位于IRAM的地址,尽管没有文档说明,但是,显然IROM把从channel 0还是channel 2启动的信息放在了0xD0037488
ch = *(volatile u32 *)(0xD0037488);
//BL1这么小显然没有实现SD驱动,但是IROM实现了SD驱动,而且把使用SD驱动拷贝的函数放在了地址(0xD0037F98),将函数指针copy_sd_mmc_to_mem copy_bl2指向这里。
copy_sd_mmc_to_mem copy_bl2 =
   (copy_sd_mmc_to_mem) (*(u32 *) (0xD0037F98));
…
#else
…
#endif
u32 ret;
// channel 0是启动盘
if (ch == 0xEB000000) {
//把uboot拷进DDR2内存
ret = copy_bl2(0, MOVI_BL2_POS, MOVI_BL2_BLKCNT,
CFG_PHY_UBOOT_BASE, 0);
…
}
// channel 2是启动盘
else if (ch == 0xEB200000) {
//把uboot拷进DDR2内存
ret = copy_bl2(2, MOVI_BL2_POS, MOVI_BL2_BLKCNT,
CFG_PHY_UBOOT_BASE, 0);
…
}
else
return;


…
}








跳入uboot的准备
Uboot代码使用的是虚拟地址,首先要把mmu打开,mmu_table在uboot_smdkv210/board/samsung/smdkc110/lowlevel_init.S里面,以静态数组的形式定义,其中虚拟地址:0xC000_0000 -- 0xC7FF_FFFF 映射到DDR2的起始地址,其中注释里面指出映射到0x30000000并不全对,如果是DDR2物理地址在0x30000000的board,的确是这样。但是DDR2物理地址在0x20000000的board被映射到0x20000000,注释有误。




after_copy:


#if defined(CONFIG_ENABLE_MMU)
enable_mmu:
/* enable domain access */
ldr r5, =0x0000ffff
mcr p15, 0, r5, c3, c0, 0@load domain access register


/* Set the TTB register */
ldr r0, _mmu_table_base
ldr r1, =CFG_PHY_UBOOT_BASE
ldr r2, =0xfff00000
bic r0, r0, r2
orr r1, r0, r1
mcr p15, 0, r1, c2, c0, 0


/* Enable the MMU */
mmu_on:
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #1
mcr p15, 0, r0, c1, c0, 0
nop
nop
nop
nop
#endif


skip_hw_init:
/* Set up the stack   */
stack_setup:
#if defined(CONFIG_MEMORY_UPPER_CODE)
ldr sp, =(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0x1000)
#else
ldr r0, _TEXT_BASE/* upper 128 KiB: relocated uboot   */
sub r0, r0, #CFG_MALLOC_LEN/* malloc area                      */
sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */
#if defined(CONFIG_USE_IRQ)
sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
sub sp, r0, #12/* leave 3 words for abort-stack    */


#endif


clear_bss:
ldr r0, _bss_start/* find start of bss segment        */
ldr r1, _bss_end/* stop here                        */
mov r2, #0x00000000/* clear                            */


clbss_l:
str r2, [r0]/* clear loop...                    */
add r0, r0, #4
cmp r0, r1
ble clbss_l
//从这里跳入uboot
ldr pc, _start_armboot
//这里放着uboot的入口地址
_start_armboot:
.word start_armboot



S5PV210(裸机程序).zip S5PV210(裸机程序)对学习Cortex A8架构的ARM-linux帮助非常大,里面涉及的程序非常齐全(串口,LCD,led,SDRAM,nand等程序)。 立即下载

相关推荐

s5pv210启动代码

基于TQ210开发板,将镜像写到SD卡第一扇区(扇区以0开始,用winhex写),设置开发板从SD启动,可以从串口或SD启动裸机程序。代码初始化时钟,DDR内存,电源控制芯片。包括了IIC驱动。

在s5pv210开发板上移植官方2101310版本的uboot

uboot官方标准uboot移植  解决烧录运行问题: 输出错误信息分析:第一个SD checksum Error是第一顺序启动设备SD0(iNand)启动时校验和失败打印出来的;第二个SD checksum Error是第二顺序启动设备SD2(外部SD卡)启动时校验和失败打印出来的,所以外部SD卡校验失败,经过对比两份b-boot.bin的二进制文件发现当前u-boot.bin前面少了16字

wpx201314的博客 2259

u-boot-2017.07移植到s5pv210教程(含对应源码)

u-boot-2017.07移植到s5pv210教程(含对应源码),注意这只是移植了单板信息,还没有其他驱动,其他驱动以后慢慢补上,新手的东西肯定更适合新手,欢迎下载。

S5PV210-uboot源码分析-uboot的硬件驱动部分

1、裸机中本身是没有驱动概念的。狭义上的驱动的概念是操作系统中用来具体操控硬件的那部分代码叫驱动。广义上讲,只要是操控硬件的都算是驱动。2、裸机程序中是直接操控硬件的,但是在操作系统中我们必须通过驱动操控硬件。(1)这两个有什么区别呢?本质区别就是分层的问题3、uboot的虚拟地址对硬件操作的影响(1)操作系统(linux)下,MMU肯定是开启的。也就是说Linux驱动中肯定...

weixin_34405925的博客 170

S5PV210 UBOOT源码 bsp

Android_V210_uboot_RTM10_1009.tar.gz

s5pv210移植可用的uboot

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

S5PV210-uboot源码分析-第二阶段

由第一阶段,已经将在SD卡的整个uboot重定位拷贝到了DDR的链接地址中去后,又回到了调用这个函数的位置。接着往下执行遇到了这个start_armboot函数(uboot启动的第二阶段)。uboot启动的第二阶段分析:6、1、start_armboot函数(1)一个很长的函数,从444行到908行。这个函数不仅仅只有这么长,这个函数的内部还调用了一些函数,所以说这个函数是很...

weixin_34273481的博客 342

如何用 OBProxy 实现 OceanBase 的最佳路由策略

本文基于业务中一类常见的路由问题展开,对OceanBase的路由功能及对应配置项做详细介绍,指导用户在业务实践中如何正确的配置路由策略及快速排查路由问题

OceanBase分布式数据库的博客 1695

linux MMU分析+s5pv210 ubot的mmu分析

由于csdn系统bug,写个笔记也要等人工审核(你有那么多审核员么)?所以MMU的原理请参考

laotang365的专栏 1307

C语言 在合并编译 ( 多.c文件 ) 情况下 实现 linked list ( 链表 ) 教程 . 更新ing

写在前面  依旧是参考借鉴了 浙江大学 温老师 的视频教程,很不错,在中国大学MOOC上,强力推荐!  虽说有借鉴,但是能保证的是每一行代码都是我自己经过理解后手敲出来的,所以才来做了这部分的教程。  最后,带 * 字符是我个人觉得可以添加的功能,按理来讲是可以不看的,而且大概率是可以有更好的改进的。  PS: 文章还在更新,如果文字蓝了(有超链接),说明写完了,如果没蓝,说明我在开军舰.jpg 源代码:  这里→源代码. 第一步:前置工作  先说一下每一篇都会出现 main 函数的,stage1 只是给没

weixin_47287635的博客 527

工业级Modbus ASCII实时监控系统(WinForms完整实现)

本文介绍了一个基于WinForms的工业级Modbus ASCII实时监控系统实现方案。该系统采用经典工控界面布局,包含串口配置、数据采集控制和实时数据显示三大区域。核心功能包括:串口通信参数设置、Modbus从站地址配置、寄存器数据采集、实时数据表格展示和趋势图绘制。系统通过ModbusAsciiClient类实现通信核心,采用定时器轮询机制采集数据,支持最多100个数据点的历史趋势显示。界面设计注重用户体验,配置区位于左侧,主显示区在右侧,底部为状态和日志区,符合工业控制系统的操作习惯。代码示例展示了窗

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 279

ARM 汇编指令 MOV32用法

ARM 汇编指令的学习: MOV32的用法

坚韧与专注 2942

目标检测: yolo26在RK3588上部署

YOLO26发布:端到端目标检测新突破 摘要:Ultralytics最新发布的YOLO26算法采用原生端到端设计,无需NMS后处理,显著提升推理效率。该模型基于三大核心原则: 简洁性:消除NMS步骤,实现直接预测 部署效率:简化集成流程,降低延迟 训练创新:引入MuSGD混合优化器,加速收敛 部署教程显示,YOLO26可适配RK3588等边缘设备,通过ONNX转换和RKNN工具链实现高效部署。其创新架构特别优化了分割、姿态估计等专业任务,标志着目标检测技术的重要革新。 (字数:149)

qianxun 1454

S5PV210-uboot源码分析-第一阶段

uboot源码分析1-启动第一阶段1、starts.S是我们uboot源码的第一阶段:从u-boot.lds链接脚本中也可以看出start.S是我们整个程序的入口处,怎么看出的呢,因为在链接脚本中有个ENTRY(_start)声明了_start是程序的入口。所以_start符号所在的文件,就是我们整个程序的起始文件,_start所在处的代码就是我们整个程序的起始代码。2、我们...

weixin_34203426的博客 258

YOLOv8【第十一章:视频追踪与流处理篇·第16节】一文搞懂,DeepStream 部署入门:NVIDIA 视频分析 SDK 与 YOLOv8 结合!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 841

《低功耗方法学》翻译——前言

前言

记录所学,分享知识,结识挚友 1209

S5PV210-uboot解析(二)-start.S解析

start.S解析(一) 首先是头文件包含 #include  #include  #if defined(CONFIG_ENABLE_MMU) #include  #endif #include    #ifndef CONFIG_ENABLE_MMU #ifndef CFG_PHY_UBOOT_BASE #define CFG_PHY_UBOOT_BASE C

ldzq_sue的博客 1239

NVIDIA Omniverse 技术浅析(三):NVIDIA RTX 技术

NVIDIA RTX 技术是 NVIDIA 推出的革命性图形渲染技术,旨在通过硬件加速和软件优化,实现高质量的实时图形渲染。RTX 技术在 NVIDIA Omniverse 平台中扮演着至关重要的角色,为其提供了强大的渲染能力。

m0_75253143的博客 352

s5pv210三星官方Uboot分析(USB启动方式)

首先要了解210板子的内存配置情况,我的板子是512M内存,DMC0上接了256M,DMC1接了256M,为了保证地址连续,内存地址只能是0x30000000 ~ 0x4FFFFFFF 第一步运行start.S:

laotang365的专栏 4204

全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中)

QCC3040开发笔记之基本介绍(0) QCC3040开发笔记之开发环境搭建(1) QCC3040开发笔记之debug调试(trb调试,usbt调试,adb调试,WIFI调试)(2) QCC3040开发笔记之按键配置(3) QCC3040开发笔记之按键切换(4) QCC3040开发笔记之按键逻辑(5) QCC3040开发笔记之tone(6) QCC3040开发笔记之提示音(7) QCC3040开发笔记之bitserial接口(8) QCC3040开发笔记之双mic+AEC+ANC(9...

心跳包的博客 3万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

s5pv210 uboot-2012-10移植(一) 之分析Alex Ling的linaro-2011.10 for mini210

好久好久前就买了s5pv210的开发板,一直都是东搞搞西搞搞,一点收获也没有,这次下决心来移植最新的uboot到u-boot-2012.10上,并通过这个博客记录下来以防时间长给忘了,我的开发板是QT210的。s5pv210的启动分为BL0,BL1,BL2,BL0是出厂的时候就固化在IROM里的,所以我们的uboot就要实现BL1和BL2,BL1在uboot里叫做u-boot-spl.bin,BL

者高的专栏 6387

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

S5PV210 uboot启动过程

按照三星《S5PV210_UM_REV1.1》手册上说明的启动流程,S5PV210上电将从IROM处执行固化的启动代码,对时钟等初始化、对启动设备进行判断,并从启动设备中复制BL1(最大16KB)到IRAM(0xd002_0000处,其中0xd002_0010之前的16个字节储存的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,校验OK转入BL1进行执行;BL1继续初始化,并将BL2复制到I

心核智慧科技 360度人脸识别开放算法 新零售系统定制 950

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

(1)在C语言中,整个项目的入口就是main函数(这是C语言规定的),所以譬如说一个有10000个.c文件的项目,第一个要分析的文件就是包含了main函数的那个文件。(2)在uboot中因为有汇编阶段参与,因此不能直接找main.c。整个程序的入口取决于链接脚本中ENTRY声明的地方。ENTRY(_start)因此_start符号所在的文件就是整个程序的起始文件,_start所在处的代码就是整个程序的起始代码。(1)当前状况:我们知道在uboot中的1000多个文件中有一个符号叫_start,但是我们不知道

小嵌同学的博客 1044

S5PV210之uboot的start.S

前言 start.S解析 首先是头文件包含 #include <config.h> #include <version.h> #if defined(CONFIG_ENABLE_MMU) #include <asm/proc/domain.h> #endif #include <regs.h> #ifnd

sh的博客 412

uboot之启动文件start.S的分析

一、程序开头的确定 当我们接收拿到一个项目的源代码,我们一般都会从main函数开始,进行分析。但是在uboot中,程序的入口不是main函数,那么我们怎么找到程序的入口。在uboot中,我们可以从uboot的链接脚本中,找到程序的入口,在链接脚本中,通过关键字ENTRY(_start)指定程序的入口为_start函数,这时候我们通过SI工具的搜索功能,找到该函数的所在的路径为./cpu/s5pc...

qq_35480173的博客 1840
上一篇: mt6577驱动开发 笔记版 转载请注明出处---crosskernel@gmail.com
下一篇: SMP多核处理器omap4启动分析 笔记版 转载请注明出处---crosskernel@gmail.com
crosskernel
博客等级 码龄18年 14粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值