热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【求助】三星S3C2450IROM启动过程及代码抓取

在S3C2450开机会执行一段IROM代码,然后把BL1加载到IRAM的前8KB(也就是stepstone)的地址处然后执行它,这8KB的BL1会把整个bootloader再加载到外部SDRAM然后
在S3C2450开机会执行一段IROM代码,然后把BL1加载到IRAM的前8KB(也就是step stone)的地址处然后执行它,这8KB的BL1会把整个bootloader再加载到外部SDRAM然后执行它;

从手头的BL1(step stone)代码和BL2(bootloader)代码感觉还是不好理解S3C2450的启动过程的细节,有两个问题要请教各位


1> IROM是否是S3C2450的内存地址中以0x00000000为起始地址的一段内存呢?

2> 有什么办法把IROM代码抓取出来(二进制机器码),然后分析其行为呢?

10 个解决方案

#1


1)不是。是映射过去的。2)还不如阅读bootloader的汇编代码呢,何必费神

#2


引用 1 楼  的回复:
1)不是。是映射过去的。2)还不如阅读bootloader的汇编代码呢,何必费神


大侠,愿闻其祥啊,bootloader的汇编代码我有,也读了;可能对其中的映射关系感觉很头疼,能讲的详细点么?

我是否可以这么理解:
--------------------------------------------------------
S3C2450刚上电,IROM被映射进内存空间以0x00000000为起始地址
IROM code做完种种初始化,把step stone代码加载完毕后又把
step stone映射进内存空间以0x00000000为起始地址,跳转到step stone
去执行
step stone做完种种初始化,把整个bootloader加载到外部SDRAM后
把外部SDRAM映射到内存空间以0x00000000为起始地址,然后跳转到
外部SDRAM执行而后加载起OS来

#3


顶一下,希望大侠不吝赐教

#4


顶一下

#5


bootloader 上电代码的分析,网上到处都有吧!  

我手里有份详细的呢!   可惜一直没看过...

#6


引用 5 楼  的回复:
bootloader 上电代码的分析,网上到处都有吧!  

我手里有份详细的呢!   可惜一直没看过...

不是bootloader代码,是IROM代码

#7


IROM上就两个还是三个函数,似乎就只是一个简单的代码搬移函数,某本手册上有源码的我看到过,但具体是哪本手册记了……似乎是2410的手册上,还有图……实是记不得了……

#8


嗯找到了,手册名:SMDK2450_IROM_APPLICATION NOTE_REV 0.03
共三个函数:
Address       Name                
0x40004000    NF8_ReadPage         
0x40004004    NF8_ReadPage_Adv
0x40004008    CopyMovitoMem
定义:
/**
* This Function copies a block of page to destination memory.( 8-Bit ECC only )
* @param uint32 block : Source block address number to copy.
* @param uint32 page : Source page address number to copy.
* @param uint8 *buffer : Target Buffer pointer.
* @return int32 - Success or failure.
*/
#define NF8_ReadPage(a,b,c) (((int(*)(uint32, uint32, uint8*))(*((uint32 *)0x0C004000)))(a,b,c))

/**
* This Function copies a block of page to destination memory( 8-Bit ECC only )
* @param u32 block : Source block address number to copy.
* @param u32 page : Source page address number to copy.
* @param u8 *buffer : Target Buffer pointer.
* @return int - Success or failure.
*/
#define NF8_ReadPage_Adv(a,b,c) (((int(*)(uint32, uint32, uint8*))(*((uint32 *)0x40004004)))(a,b,c))

/**
* This Function copy MMC(MoviNAND/iNand) Card Data to memory.
* Always use EPLL source clock.
* This function works at 25Mhz.
* @param u32 StartBlkAddress : Source card(MoviNAND/iNand MMC)) Address.(It must block address.)
* @param u16 blockSize : Number of blocks to copy.
* @param u32* memoryPtr : Buffer to copy from.
* @param u32 extClockSpeed : External clock speed(per HZ)
* @param bool with_init : determined card initialization.
* @return bool(u8) - Success or failure.
*/
#define CopyMovitoMem (a,b,c,d,e)(((bool(*)(u32,u16,u32*,u32,bool)) \
(*((u32 *)0x40004008))) (a,b,c,d,e))

PDF下不到可以联系我,JQGuardian@qq.com

#9


引用 8 楼  的回复:
嗯找到了,手册名:SMDK2450_IROM_APPLICATION NOTE_REV 0.03
共三个函数:
Address       Name                
0x40004000    NF8_ReadPage         
0x40004004    NF8_ReadPage_Adv
0x40004008    CopyMovitoMem
定义:
/*……

这个我也有。。。
这三个函数只是IROM code的一部分吧

#10


s3c6410x的代码是这样的:
Nand Flash Copy Function Address (8-Bit ECC Check, 512Page Size Only)
=====================================================================
/**
* This Function copies a block of page to destination memory.( 8-bit ECC only )
* @param uint32 blcok : Source block address number to copy.
* @param uint32 page : Source page address number to copy.
* @param uint8 *buffer : Target Buffer pointer.
* @return int32 - Success or failure.
*/
#define NF8_ReadPage(a,b,c) (((int(*)(uint32, uint32, uint8*))(*((uint32 *)0x0C004000)))(a,b,c))

Nand Flash Copy Function Address (8-Bit ECC Check, 2K and 4K Page Size Only)
============================================================================
/**
* This Function copies a block of page to destination memory( 8-bit ECC only )
* @param uint32 blcok : Source block address number to copy.
* @param uint32 page : Source page address number to copy.
* @param uint8 *buffer : Target Buffer pointer.
* @return int32 - Success or failure.
*/
#define NF8_ReadPage_Adv(a,b,c) (((int(*)(uint32, uint32, uint8*))(*((uint32 *)0x0C004004)))(a,b,c))

SD/MMC Copy Function 
====================
/**
* This Function copies SD/MMC Card Data to memory.
* Always use EPLL source clock.
* @param channel : HSMMC Controller channel number ( Not support. Depend on GPN15, GPN14 and GPN13 )
* @param StartBlkAddress : Source card(SD/MMC) Address.(It must block address.)
* @param blockSize : Number of blocks to copy.
* @param memoryPtr : Buffer to copy from.
* @param with_init : reinitialize or not
* @return bool(unsigend char) - Success or failure.
*/
#define CopyMMCtoMem(z,a,b,c,e) (((bool(*)(int, unsigned int, unsigned short, unsigned int*, bool)) \
(*((unsigned int *)0x0C004008)))(z,a,b,c,e))

OneNAND Copy Function Address
=============================
/**
* Single Word Transfer.
* @param uint32 Controller - OneNAND Controller Number ('0' fixed)
* @param uint32 uBlkAddr - Block Number to read
* @param uint8 uPageAddr - Page Number to read
* @param uint32* aData - Destination Address
* @return bool(uint8) - Success or failure.
*/
#define ONENAND_ReadPage(a,b,c,d) (((bool(*)(uint32,uint32, uint8,uint32*)) \
(*((uint32 *)0x0C00400C)))(a,b,c,d))

OneNAND Copy Function Address (4-Burst)
=======================================
/**
* 4 burst word transfer (for enhanced Read performance)
* @param uint32 Controller - OneNAND Controller Number ('0' fixed)
* @param uint32 uBlkAddr - Block Number to read
* @param uint8 uPageAddr - Page Number to read
* @param uint32* aData - Destination Address
* @return bool(uint8) - Success or failure.
*/
#define ONENAND_ReadPage_4burst(a,b,c,d) (((bool(*)(uint32,uint32,uint8,uint32*)) \
(*((uint32*)0x0C004010))) (a,b,c,d))

OneNAND Copy Function Address (8-Burst)
=======================================
/**
* 8 burst word transfer (for enhanced Read performance)
* bool ONENAND_ReadPage_8burst(u32 Controller, u32 uBlkAddr, u8 uPageAddr, u32* aData)
* @param Controller - OneNand Controller Number ('0' fixed)
* @param uBlkAddr - Block Number to read
* @param uPageAddr - Page Number to read
* @param aData - Destination Address
* @return bool(unsigend char) - Success or failure.
*/
#define ONENAND_ReadPage_8burst(a,b,c,d) (((bool(*)(uint32,uint32,uint8,uint32*)) \
(*((uint32*)0x0C004010))) (a,b,c,d))

推荐阅读
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
author-avatar
Jump_jiedB0_666
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有