zoukankan      html  css  js  c++  java
  • WINCE6.0 + S3C2443的启动过程nboot篇

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

     

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

     

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

     

     

     

    当系统上电启动或者复位后,nand flash控制器会自动把nandflash0block中的前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 flashID

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

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

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

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

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

     

  • 相关阅读:
    python class属性
    获取安卓系统日志输出
    深入理解C#中的IDisposable接口(转)
    Mac开启自带的Apache服务器
    【转】《Unity Shader入门精要》冯乐乐著 书中彩图
    AssetDatabase的方法总结
    C# 读写XML文件的方法
    tkinter模块常用参数(python3)
    Unity在Project视图里面显示文件的拓展名
    Git忽略提交规则
  • 原文地址:https://www.cnblogs.com/liang123/p/6325820.html
Copyright © 2011-2022 走看看