WinCE下NBoot编译

一.为什么需要NBoot

 

    WinCE操作系统从文件的组成来看一般分为两部分:BOOTLOADER和NK.bin。在WinCE中,BOOTLOADER一般为EBOOT。它的主要功能是初始化硬件设备,主要包括CPU内部的相关控制器、内存、网络、串口甚至USB口和LCD。在初始化完成后,它将通过网络或USB从外部下载NK.bin,或从本地Flash中加载NK.bin并执行,从而启动WinCE操作系统。可以看到Eboot虽然是启动代码,但它得完成相当多的工作,最终的映像文件也将超过4K。所以,我们不能直接将Eboot存放在NAND Flash的第一个4K字节中。我们需要一个更小的启动代码,这就是通常所说的NBOOT(NAND BOOT)。

    是否需要Nboot取决于硬件设计,当系统采用NORFlash+S3C2410架构时,上电时,NORFlash被映射到0x0000_0000-0x0800_0000地址,可以直接执行烧录在NORFlash的eboot,启动系统。但NORFlash比较昂贵,因此很多时候采用NandFlash+S3C2410。

     nboot是从NAND flash读eboot到内存SDRAM中并执行,eboot是从以太网(用tftp)下载image(nk.bin)到内存并执行。将nboot.nb0烧到第0块,将eboot.nb0烧到第2块。启动时nboot从flash读出eboot并执行之,如何就可以通过pb把nk.bin下载到目标板上执行了。

 

二.NBoot的工作内容

 

1.       初始化CPU内部相关控制器,如设置GPIO,关闭Watch Dog,关闭中断,设置系统时钟。

2.       初始化内存。

3.       初始化串口,主要用来输出调试信息。

4.       初始化NAND Flash,因为在MCU启动时默认是Auto Boot模式,为了从NAND Flash中读取EBOOT,需要将其配置成 NAND Flash Mode。

5.       读取NAND Flash中的EBOOT映像文件,并放在内存指定的位置,这个地址是跟EBOOT有关,介绍EBOOT时再详细说明。

6.       完成读取之后,跳转到EBOOT的起始位置,执行EBOOT代码。

一般来说,前面两个功能在startup.s中实现,汇编语言编写;后面四个功能可在main.c中实现。NBOOT的编译环境一般有两种,ADS1.2(或RVDS)、Platform Builder

三.如何创建NBoot

s3c2410/…/SRC/Bootloader下创建NBOOT目录,并创建makefilemakefile.incsourcesnboot.bib、 main.c文件,也可从EBOOT的目录下拷贝对应文件过来进行修改。

 

修改BSP的目录2410/…/SRC/Bootloader"dir文件,添加NBOOT,dir文件的内容:

 

DIRS=            /
        Nboot     /
         eboot    /

dir文件指定了哪些目录源码须被编译,加上Nboot,这样打开PB的FileView才能出现Nboot。

每个dir文件中指定的目录下,会有个sources文件,sources文件通过宏定义指定编译和链接涉及到的文件

TARGETNAME=nboot       ;生成的文件名
TARGETTYPE=PROGRAM   ;编译产生的文件类型PROGRAM=EXE,LIBRARY=LIB,KYNLINK=DLL
RELEASETYPE=PLATFORM ;
EXEENTRY=StartUp     ;程序的入口函数
NOMIPS16CODE=1

LDEFINES=-subsystem:native /DEBUG /DEBUGTYPE:CV /FIXED:NO

TARGETLIBS=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/fulllibc.lib

SOURCES=/                       ;需要编译的源文件
    startup.s /            
        main.c    /
        nand.s

WINCETARGETFILES=BootImage  ;编译之前先编译的镜像文件,BootImage出现在makefile.inc

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jonathandj/archive/2009/12/31/5113038.aspx


 

 

Makefile.inc文件的内容:

 

  BootImage:

!IF "$(NOLINK)" == ""

    romimage $(ROMIMAGE_FLAGS) nboot.bib   ;当前目录下bib文件

!IF "$(WINCEREL)"=="1"
    copy $(_PLATFORMROOT)
"$(_TGTPLAT)"target"$(_TGTCPU)"$(WINCEDEBUG)"nboot.* $(_FLATRELEASEDIR)
!ENDIF

!ENDIF

bib(Binary Image Builder)文件,指示如何构建系统二进制去镜像文件,说明哪些文件被打包到运行时镜像中。
nboot.bib文件的内容:

Code
MEMORY
;   Name      Start     Size      Type

;   -------   -------- -------- ----
    NBOOT   00000000 00003000 RAMIMAGE   ;RAMIMAGE运行时镜像会放到此段内存上
    STACK   31400000 00001000 RESERVED   ;RESERVED 系统保留
    RAM     31500000 00010000 RAM

CONFIG
       COMPRESSION=ON  ;是否压缩
       PROFILE=OFF
       KERNELFIXUPS=ON

       ROMSTART=00001000 ;启始地址
       ROMWIDTH=32
       ROMSIZE=00001000  ;表明生成文件的大小为4K

MODULES

;   Name        Path                                                                             Memory Type

;   ---------- --------------------------------------------------------------              -----------

    nk.exe      $(_TARGETPLATROOT)"target"$(_TGTCPU)"$(WINCEDEBUG)" nboot.exe       


 由于WinCE习编译出的nbx前4K是空的,所以需要将ROMSTART的地址在Nboot的Start地址上后移4K

 

接下来就是main函数,需要添加全局变量如下:

ROMHDR * volatile const pTOC = (ROMHDR *)-1;根据main函数的功能其中应该包括3个函数

InitDebugSerial();初始化串口

NF_Init();初始化NandFlash

NF_ReadSector();读Eboot.bin

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值