zoukankan      html  css  js  c++  java
  • nboot通过DNW下载并运行eboot.nb0

     1.       stepldr/main.c下面的mian函数调用Uart_Init()对串口的初始化

    我们使用UART1来作为debug口。

     

    2.       实现nboot通过串口下载并运行eboot.nb0的函数体

     

    我们接下来分析其实现

    2.1   Uart_Getch()函数

    这个函数主要是在nboot启动的时候,判断是否有来之我们对键盘的操作,假如我们在等待的时间之内按下空格键,那么这时候nboot就处于等待用户通过DNW.exe下载并运行eboot.nb0的状态,假如我们在等待的时间内没有按键空格键,那么nboot会接下去运行eboot,继而由eboot来加载NK

     

    上图的第119行表示UART1RX buffer register是否接受到数据,如果有数据,就接下来执行第124行,也即读取接收到的数据

    #define RdURXH1()   (*(volatile unsigned char *)0x50004024)

    当然,我们按下键盘的空格键,这时候DNW.exe会接受到这个信息,然后DNW.exe会通过我们WINCE设备与PC实际的串口线来发送到UART1RX buffer register

    当我们按下键盘的空格键,nboot就处于等待我们下载eboot.nb0的状态,通过DNW.exe的“serial port -> transmit”来发送eboot.nb0,那么nboot是如何接受并运行eboot.nb0呢?接下来,我们来看看ComLoad()的函数体

    2.2 ComLoad()

     

     

    其中#define LOAD_ADDRESS_PHYSICAL   0x30038000

    上图的第87是把串口发送过来的数据保存到SDRAM中以0x0x30037FFC为起始的内存中,而地址0x30037FFC0x30037FFF用于记录eboot.nb0的文件大小,从0x30038000地址开始记录eboot.nb0的数据,这也是ebootSDRAM中的起始地址。

     

    90行到第93行是记录下eboot.nb0文件的大小,用4个字节来记录,为什么是4个字节?而且为什么是前面4个字节呢?这应该是由微软WINCE6.0编译生成eboot.nb0时,由其编译生成工具决定的。

     

    99行,为什么DownloadFileSize=fileSize-6呢?因为有4个字节是用于记录eboot.nb0的大小,那么另外2个字节应该是用于记录eboot.nb0的校验码。

     

    DNW.exe通过UART1eboot.nb0下载到以0x30038000为起始的内存中后,接下来做什么呢?接着看ComLoad()的函数体的后面部分

     

    从第102行到105行可以看出来,eboot.nb0的后两个字节是用于记录本身数据的校验码的。这几行代码也就是用来计算eboot.nb0的数据的校验码。

     

    107和第108这两行读取了eboot.nb0中记录的校验码。

    110行用于比较现在计算出来的校验码是否和保存在eboot.nb0中的校验码一样,如果不一样,那么nboot就会退出运行,从而eboot.nb0的代码就得不到运行,这样的现象我也遇到过(但很少出现),但如果重新来下载eboot.nb0就没有了,不知是否是因为DNW.exe本身有bug?如果校验码一直,那么接下来就在SDRAM中运行eboot.nb0

     

    181行,就是eboot.nb0SDRAM中开始运行了,也即从Src/Bootloader/Eboot/starup.s下面的StartUp函数开始运行,见下图

     

    接着就从ResetHandler处开始运行。

  • 相关阅读:
    10 个迅速提升你 Git 水平的提示
    git-自动补全
    Andriod Atom x86模拟器启动报错
    Android SDK Manager 无法更新SDK
    tiny4412 解决内核编译版本号问题
    Move resources allocated using unmanaged interface to managed devm interface
    原理图学习
    解决tiny4412在win7 64位上adb无法使用失败的问题
    popcount 算法分析
    linux中断申请之request_threaded_irq
  • 原文地址:https://www.cnblogs.com/liang123/p/6325819.html
Copyright © 2011-2022 走看看