WINCE6.0 + S3C2443的启动过程---nboot篇

我们启动WINCE6.0的方式是:nboot+eboot+NK。那么是如何启动WINCE6.0系统映像的呢?首先是nboot把eboot拷贝到SDRAM中执行的地址处运行,接着eboot把NK.bin拷贝到SDRAM指定的地址处运行。

首先,我们需要通过JTAG把我们nboot文件编译生成的stpldr.nb0文件烧录到nandflash的第0个block中。那么系统复位或者上电启动的动作产生之后,是如何从nboot开始执行的呢?我们先看S3C2443的datasheet中nandflash控制器的相关部分:

当系统上电启动或者复位后,nand flash控制器会自动把nandflash第0个block中的前4KB的启动代码(也即nboot的代码)拷贝到S3C2443配备的名为“stepping stone”的SRAM中,然后在stepping stone启动代码就自动运行了,也就是nboot在这时候就开始运行了,那么入口点是哪里呢?从/Src/Bootloader/Stepldr/sources的如下内容

TARGETNAME=stepldr

TARGETTYPE=PROGRAM

RELEASETYPE=PLATFORM

EXEENTRY=StartUp

NOMIPS16CODE=1

可以看出nboot的入口函数是StartUp。

1.StartUp函数

这个函数就在/Src/Bootloader/Stepldr/startup.s中定义,如下所示:

也即nboot从StartUp开始执行,接着就直接跳转到ResetHandler执行了,这个函数主要是做了下面一些工作

⑴设置GPIO,关闭watchdog,关闭所有的中断。

⑵设置系统时钟,关于系统时钟的详细设置,我打算另外再写一篇来介绍。

⑶初始化内存控制器。

⑷通过寄存器RSTSTAT的值来判断当前的动作是正常的启动还是从睡眠中唤醒,如果是从睡眠中唤醒,就直接跳转到NK在SDRAM的开始地址处0x30200000(也即NK.bin在SDRAM中的存放地址处,也即0x80200000),然后会从NK.bin的start address处(假如是0x80205394),这个地址就是NK.exe,也即是Oal.exe的开始地址处,也就是从/Src/Oal/Oallib/startup.s下面的函数StartUp开始执行,而0x80205394 - 0x80200000 =0x5394这个偏移值应该是NK.bin打包各个文件之后NK.exe在NK.bin中的偏移值;如果是正常的启动,将会跳转到nboot的main(),其中关于睡眠和唤醒,可见我的另一篇博客:http://cky0612.blog.163.com/blog/static/27478916201051793355837/

2.main()

Main函数实现了下面的内容:

⑴通过Uart_Init()函数来初始化串口,编译debug。

⑵通过NF_Init()函数来初始化nand flash控制器。

⑶通过ReadFlashID()来读取当前nand flash的ID,

其中0xEC是maker code(厂家识别代码),0xA0是device code(设备代码),这些值是在/Src/Common/Smartmedia/fmd/cfnand.h中的如下数组定义的:

上图我只是截了这个数组的一小部分,后面的nandflash驱动中会用到这个数组用于判断当前系统使用的nandflash是否在这个表中。

⑷从nandflash的第2个block中把eboot的映像文件读取到SDRAM中指定的地址处(0x30038000),这个地址有eboot/boot.bib来指定,实现部分如下:

⑸从nandflash中读取eboot到SDRAM之后,接着就在指定的地址处执行,也即eboot的起始地址处执行eboot,如下所示:

其中LOAD_ADDRESS_PHYSICAL=0x30038000,从此nboot的工作就完成,转而开始eboot的执行了。

WINCE6.0 + S3C2443的启动过程---nboot篇相关推荐

  1. WINCE6.0+S3C2443的启动过程---eboot1

    WINCE6.0+S3C2443的启动过程---eboot 我们知道从nboot把eboot从nandflash中拷贝到内存指定的地址后,就接着在这个地址处开始运行eboot了,之后,nboot的工作 ...

  2. WINCE6.0+S3C2443的启动过程---内核启动

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  3. WINCE6.0+S3C2443的启动过程---eboot6

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  4. WINCE6.0+S3C2443的启动过程---eboot2

    1.3系统时钟设置 我的另一篇博客介绍了S3C2443的时钟管理http://blog.csdn.net/chinesedragon2010/archive/2010/09/24/5903553.as ...

  5. WINCE6.0+S3C2443的启动过程---eboot5

    2.3.5 SD卡控制器的相关初始化 一个相关的帖子http://topic.csdn.net/u/20100812/16/d0d5108b-dce1-4535-9e15-6f87bad57e43.h ...

  6. WINCE6.0+S3C2443的启动过程---eboot4

    http://blog.csdn.net/chinesedragon2010/archive/2010/10/05/5922489.aspx 2 main函数 void main(void) { // ...

  7. WINCE6.0+S3C2443的启动过程---eboot3

    1.6 OEMAddresstable只是用来初始化一级页表,就是所谓的段(section)描述,每个段是1MB,分为4096个段,总共4G--虚拟内存空间4G就是由此而来. 并且这个OEMAddre ...

  8. Android深入四大组件(五)Android8.0 根Activity启动过程(后篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

  9. Android深入四大组件(六)Android8.0 根Activity启动过程(前篇)

    相关文章 Android深入四大组件系列 Android系统启动系列 Android应用程序进程系列 Android深入解析AMS系列 前言 在几个月前我写了Android深入四大组件(一)应用程序启 ...

最新文章

  1. 新网 云服务器,新网云服务器的优势包括什么?
  2. 修改系统density适配
  3. 成功跳槽百度工资从15K涨到28K,BAT大厂面试总结
  4. cassandra——可以预料的查询,如果你的查询条件有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现...
  5. software engineering interview domain
  6. 如何用SPSS做协方差分析?超详细图文教程
  7. mysql避免回环复制_【20181204】 MySQL 双主复制是如何避免回环复制的
  8. 【C++深度剖析教程10】C++中的字符串类
  9. 【LightOJ - 1027】A Dangerous Maze(概率dp,数学期望)
  10. python 抽奖器_兄弟连学python (02) ----简易抽奖器
  11. VS当前不会命中断点 还没有为该文档加载任何符号
  12. 20162302 第七周作业
  13. 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
  14. Unity3d C# Socket 下载文件 (同步到)
  15. python之numpy之方差numpy.var
  16. 怎么把ppt弄成链接的形式_ppt链接excle表格:如何在ppt中超级链接到指定的excel工作表...
  17. 谷歌云指南_Google材料设计指南的10个重要要点
  18. 【案例分析-初探】美国有多少家加油站?
  19. H5打开QQ聊天窗口
  20. 【水果识别】基于matlab GUI苹果分级系统(带面板)【含Matlab源码 1827期】

热门文章

  1. 阿里云物联网平台python开发手册_阿里云物联网平台体验(树莓派+Python篇)
  2. java中的排序算法——插入排序详解
  3. VMware 修改虚拟机网络_虚拟机问题解决
  4. Oracle OFA目录结构
  5. js时间搓化为今天明天_打乒乓球的搓球技巧!你掌握了吗?
  6. 粒子群算法matlab多元,进化算法之粒子群算法和Matlab实现(多维)
  7. 家庭NAS搭建实战之samba共享
  8. 计算最大回撤_看专业分析研究员如何一步步解读外汇市场结构,实现交易最大化盈利化!...
  9. sihpostreboot 权限_记一次使用post请求重启TP-LINK TL-WDR7661路由
  10. linux系统硬盘数据恢复软件下载,Linux硬盘数据恢复软件