Nboot和Eboot中的虚拟地址与物理地址的关系

基于Nandflash的Bootloader开发简介 S3C2410支持直接从Nand Flash启动,所以要用到Nand Bootloader。大多数Nand Bootloader都分为Nboot和Eboot两部分。依赖于CPU体系结构的代码,放在Nboot中,通常用汇编语言+C语言实现;而Eboot通常用C语言实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。Nboot:硬件设备初始化: 屏蔽所有中断。可 阅读详情

大家在看Nboot与Eboot的源程序时,会发现里面有两种地址:虚拟地址与物理地址,虚拟地址是你在程序中用的地址,而物理地址则是RAM中的实际地址。在Bootloader里,可以直接使用物理地址,但当WinCE启动之后,则只能使用虚拟地址了。

 

在Bootloader中,一般通过一个宏定义函数来互相转换,如:

 

 

其中的参数定义为:(基于S3C2410A的例子)

 

_RAM_STARTADDRESS为RAM的实际物理起始地址。

VA_BASE是定义在OEMAddressTable中的。这个OEMAddressTable,在WinCE4.2中,定义在map.a(位于$(_WINCEROOT)/PLATFORM/USERPLATFORM/KERNEL/HAL/ARM/)这个文件中,在WinCE5.0则定义于oemaddrtab_cfg.inc(位于$(_WINCEROOT)/PLATFORM/USERPLATFORM/SRC/INC/)。

 

如:

                    虚拟地址                物理地址               大小

 

OEMAddressTable:

dd             0x8C000000          0x30000000        64M

dd             0                            0                          0

 

有两点注意:

  1. S3C2410的RAM被定义到从0x30000000开始的地址;
  2. 虚拟地址不是随便定义的,WinCE中有规定,必须在0x80000000 - 0x9FFFFFFF。实际上WinCE创建了两套虚拟地址空间,一个是0x80000000 - 0x9FFFFFFF,是Cache Enabled。另一个是0xA0000000---0xBFFFFFFF,是Cache Disabled。
          如果我们访问的这个空间只是一段内存空间(比如SDRAM),那么就可以用Cache Enabled的空间来访问,这样存取数据的速度会比较快,因为数据被保存在Cache中。

    如果我们访问的这个空间是一个外设的地址,那么我们就要使用Cached Disabled的空间来访问,这样才能使CPU与外设同步。

 

 

下面介绍S3C2410芯片的的内存控制器物理地址分配:

 

来看一个g_oalAddressTable的例子:

 

 

按照S3C2410芯片内置的内存控制器的设计,从0x48000000到0x5FFFFFFF范围内的系统物理地址空间被命名为SFR(Special Function Register)的片内外设寄存器(包括控制寄存器、状态寄存器、数据缓冲区等),由上表可以看出,有USB、LCD等外设。

可供CPU芯片外接的外设控制器或者存储设备使用的物理地址范围是0x00000000到0x3FFFFFFF这1GB的地址空间。这1GB共被分为8个Bank,每个Bank享有128MB的物理地址空间。其中只有Bank6和Bank7可以支持RAM存储类型。

物理地址0x30000000到0x3FFFFFFF这一块长达256MB的区域被物理RAM使用,这实际上是用满了S3C2410内存控制器的Bank6和Bank7。由上表可以看出,尽管物理地址是连续的,但是虚拟地址可以不连续,即分为了64MB和192MB的两块。

物理地址0x00000000到0x05FFFFFFF区域被Nor Flash存储占用,其总容量为96MB。

存储控制器的Bank2被一块32MB的存储类型PC卡外设占据。

存储控制器的Bank3被外置的以太网控制器芯片占用。

深度解析大语言模型中的词向量 ​ 在学习完语言模型中的编码器与解码器知识后,让我们继续深入学习大语言模型中一个非常关键的技术:词向量表示,以及如何通过Transformer模型实现对next token的预测。 ​ 阅读详情

相关推荐

用Arduino Mega2560和TB6612驱动MG513电机,我踩过的坑和最佳实践

本文详细介绍了使用Arduino Mega2560和TB6612驱动模块控制MG513直流电机的实战经验,包括硬件连接、PWM配置、编码器信号处理等关键技巧。通过优化电源系统、信号线布局和软件控制算法,有效解决了电机抖动、转速不稳等常见问题,为机器人底盘和自动化项目提供了可靠解决方案。

weixin_42520573的博客 201

C/C++ 使用 CRC32 检测内存映像完整性

前面的那一篇文章中所使用的技术只能有效抵抗解密者直接修改硬盘文件,当我们使用动态补丁的时候,那么内存中同样不存在校验效果,也就无法抵御对方动态修改机器码了,为了防止解密者直接对内存打补丁,我们需要在硬盘校验的基础上,增加内存校验,防止动态补丁的运用。

微软技术分享 1万+

FC游戏Hack实战:从零开始修改游戏数据

本文以《忍者神龟3》为例,详细介绍了从零开始进行FC游戏Hack的完整实战流程。通过使用FCEUX模拟器和调试器,结合“递减法”精准定位生命值内存地址,并利用十六进制编辑器修改关键指令,最终实现“无限生命”效果。文章旨在引导读者理解游戏数据修改的核心原理与操作技巧,重温经典的同时深入计算机程序运行机制。

weixin_28366353的博客 356

uboot中的虚拟地址映射

1、虚拟地址映射关系2、DRAM有效范围

主要记录嵌入式学习与开发过程。 3574

棋牌App逆向工程实战:透视风险分析与反作弊加固思路

在移动应用安全领域,逆向工程是一项关键的攻防技术,它通过静态分析、动态调试与协议抓包等手段,深入还原客户端真实逻辑。这项技术的核心原理,是从已编译的安装包中提取数据流,验证服务端下发的信息是否超出了客户端应有的可见范围。从技术价值看,安全测试人员可以借此定位协议层、内存层与缓存层的潜在风险,为反作弊体系提供精准的加固建议。在棋牌类App等实时对局场景中,逆向工程常被用于排查牌局信息泄露类隐患,而合规授权与测试环境是开展此类研究的必要前提。本文结合一次棋牌App的安全评估实践,梳理了从环境准备到数据流还原的完

weixin_29326909的博客 173

USB_TYPE-C 母座电路设计

本文详细介绍了USB Type-C接口(C2765186)的电路设计要点,重点解析了电源、识别和数据三部分的关键连接方案。电源部分需并联VBUS和GND引脚并加宽走线以承载3A电流;识别部分必须为CC1/CC2引脚配置5.1kΩ±1%精度的下拉电阻,这是触发PD充电的核心条件;数据部分通过短接正反插引脚实现盲插功能。文档还提供了完整的引脚对照表,并强调PCB布局需注意ESD防护、差分走线阻抗控制等要点,为Type-C接口设计提供了实用指导。

在读研究生,FPGA电路设计与功能开发。 581

UBOOT启动流程详解

第一阶段(汇编语言阶段)1.设置异常向量表,当系统发生异常时总会接入到一个固定地址。2.硬件初始化。设置时钟(内核时钟,总线时钟,IO接口时钟)3.关闭看门狗。看门狗用于防止程序跑飞,但是在 uboot启动阶段,还没有加载 操作系统,只有在 加载操作系统后,如果没有喂狗的过程的话,就会判定程序已经跑飞,需要重启系统。4.关闭MMU,MMU是用于虚拟地址向物理地址进行映射的一个结构。在 uboot阶段操作的就直接是 物理地址,所以不需要转换。5.关闭中断。uboot引导linux起到的过程中本身就是一个完成的

weixin_54191451的博客 1673

把 ABAP writable CDS view entity 讲透:从只读建模到可写模型的 ABAP CDS 新能力

摘要:SAP引入的writable CDS view entity突破了传统CDS视图只读的限制,允许通过ABAP SQL直接进行数据修改。该特性通过WRITABLE关键字定义,使CDS视图成为与数据库表同等级别的可写对象。其核心价值在于为数据集成、中间层同步等场景提供结构化写入入口,但需注意不应绕过业务规则。最佳实践建议保持底层表结构简单映射,避免复杂变形。这一特性标志着CDS从单纯消费模型向双向数据交互能力的演进,为ABAP开发提供了新的数据边界设计思路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1313

嵌入式之初步硬件驱动学习笔记

注:以下内容出自朱老师物联网大讲堂课件 1.uboot与linux驱动 1.1 uboot本身是裸机程序 (1)裸机本来是没有驱动的概念的(狭义的驱动的概念就是操作系统中用来具体操控硬件的那部分代码叫驱动) (2)裸机程序中是直接操控硬件的,操作系统中必须通过驱动来操控硬件。这两个有什么区别?本质区别就是分层。 1.2 uboot的虚拟地址对硬件操作的影响 (1)操作系统(指的是linux)下MMU肯定是开启的,也就是说linux驱动中肯定都使用的是虚拟地址。而纯裸机程序中根本不会开MMU,全部使用的是物理

donke_dong 714

【Proteus仿真】51单片机+DAC0832+LM358放大电路波形发生器

【Proteus仿真】51单片机+DAC0832+LM358放大电路波形发生器

perseverance51博客 5785

C#与欧姆龙PLC 通信——fins udp协议

该调试助手专门为了帮助大家学习以及测试Fins-Udp通信,下面进行详细介绍。

qq_34059233的博客 2872

【原创】关于WinCE中bootloader:nboot/eboot的那点事儿

预备文章://-----------------------------------------------------------------------//《S3C2410&&WINCE6.0&&NBOOT》《WinCE6.0的EBOOT概要》By: cnblogs-HJB//---------------------------------------------

这个世界乱纷纷,先把自己锻炼成器 1897

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【转】关于WinCE中bootloader:nboot/eboot的那点事儿

转自:http://www.cnblogs.com/mercuryxu/archive/2009/12/18/1627528.html 预备文章: //-----------------------------------------------------------------------// 《S3C2410&&WINCE6.0&&NBOOT》...

weixin_30435261的博客 123

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

2440(wince5.0)eboot调试

搞了一段时间的eboot,今天终于可以跑到主菜单这边了。 想想这段时间,自己太委琐了。前段时间的问题是:每次eboot跑到mmu使能之后就挂掉了。在这里兜了很多圈,首先想是不是mmu映射的问题,但是通过看代码和比较几个文档,觉得是没有问题的。其次感觉是sdram设置的问题,但是经过几次更改之后还是老样子。 由于资源问题和eboot比较大,烧...

weixin_34391854的博客 167

WINCC7.3破解文件

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

wince系统下s3c6410的bootloader初接触

一、概述       引导加载程序(bootloader)就是在操作系统内核运行前执行的一段小程序。通过这段小程序,我们可以初始化必要的硬件设备,创建内核需要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,真正起到引导和加载内核的作用。    在DDR系统中,该部分的代码位于IDR400-2_SMDK6410/SRC/BOOTLOADER文件夹下。该文件夹下有五个子文件夹NBL1.LSB,NBL2,EBOOT.WHIMORY,Eboot.SDFu

代码的纯真 1993

第六章——uboot for tiny4412中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 ldr r1, =CONFIG_PHY_UBOOT_BASE

张小尘的专栏 874

解读物理地址、虚拟地址关系

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33796205的博客 253

#SC2440虚拟地址到物理地址的转换

虚拟地址到物理地址的映射 本文得出的结论皆来自于《嵌入式linux完全开发手册》,是在尝试自己理解其含义之后用自己的语言总结出来的,以便于更好的去理解本节内容。

YellowMax 2011

【ARM】虚拟地址映射理解

1、关于虚拟地址和物理地址: 物理地址(记为PA)是设计生产的时候确定的,是一种硬件编码生产的物理地址。虚拟地址对于操作系统或者软件层面来说的。虚拟地址与物理地址之间有一个虚拟地址转换层建立了一个从虚拟地址映射到物理地址的映射表(也就是映射原理中所说的页表)。物理地址是根据具体需求来确定大小的,通常情况下会比虚拟地址小。 例如:对于 32 为 ARM 处理器,最大寻址空间为 4GB(2^32)...

baidu_37973494的博客 3248

uboot的虚拟地址映射学习

虽然不确定对错,但是也算是一种思考,先记录下来 这个截图是课程讲到虚拟地址映射的时候课件里面给的。 我之所以有疑问的原因是在课程2.10.1.2里面讲到了这样一句话 (2)uboot早期也是纯物理地址工作的,但是现在的uboot开启了MMU做了虚拟地址映射,这个东西驱动也必须考虑。查uboot中的虚拟地址映射表,发现除了0x30000000-0x3FFFFFFF映射到了0xC0000000-0xCFFFFFFF之外,其余的虚拟地址空间全是原样映射的。而我们驱动中主要是操控硬件寄存器,而S5PV210的S

fsczp的博客 1270

Nboot程序详细分析

基本上吧Nboot的程序看完了,总结一下。 主要包含以下文件: 2410init.s2410slib.snand_s.s2410loader.c2410lib.cnand.c  其中最重要的是2410init.s和2410loader.c。2410init.s是汇编程序,所作的工作有:屏蔽所有中断、设置CPU的速度和时钟频率、RAM的初始化、LE

昔日之的专栏 4609

TOC(Table of Content)数据结构

TOC(Table Of Content)是整个Nand Flash中存储内容的一个列表,这里面储存了有关启动和系统内核的一些相关存储信息,需要写在Nand Flash的block1中由Nboot里的函数读取。之后Nboot会按照读取的内容进行配置和跳转到不同的地址。 TOC是一个只有512字节的结构,具体定义如下:typedef struct _TOC { DWORD

昔日之的专栏 3745
上一篇: bin、nb0的区别
下一篇: Nboot程序详细分析
formerman
博客等级 码龄20年 58粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值