快捷搜索:

WinCE5.0 BSP BOOTLOADER开发详解-生成bin和nb0

一,天生EBOOT.exe

1,在D:\WINCE500\PLATFORM\Sun2410\SRC\BOOTLOADER\EBOOT目录下,建扬名为Startup.s的汇编文件。

源代码如下:

OPT 2

INCLUDE kxarm.h

OPT 1

OPT 128

STARTUPTEXT

LEAF_ENTRY StartUp

nop

END

2,在D:\WINCE500\PLATFORM\Sun2410\SRC\BOOTLOADER\EBOOT目录下,建扬名为sources的文件。

源代码如下:

TARGETNAME=EBOOT

TARGETTYPE=PROGRAM

RELEASETYPE=PLATFORM

EXEENTRY=StartUp

SOURCES=startup.s

3,在D:\WINCE500\PLATFORM\Sun2410\SRC\BOOTLOADER\EBOOT目录下,建扬名为makefile的文件。

源代码如下:

!INCLUDE $(_MAKEENVROOT)\makefile.def

4,DOS状态中进入D:\WINCE500\PLATFORM\Sun2410\SRC\BOOTLOADER\EBOOT目录,输入Build-c编译这三个文件。

5,看过MSDN的同伙应该发明,以上的几步是严格的遵循MSDN的描述进行的。可是却又发生差错了。这是由于我们在汇编文件中 include kxarm.h,但在我们所在的目录下并没有这个文件。建立一个Inc目录,在D:\WINCE500\PUBLIC\COMMON\SDK\INC目录下拷贝kxarm.h文件到这个目录。改动sources文件。

改动后的sources文件源代码如下:

TARGETNAME=EBOOT

TARGETTYPE=PROGRAM

RELEASETYPE=PLATFORM

EXEENTRY=StartUp

INCLUDES=.\Inc

SOURCES=startup.s

6,再次Build -c。这时我们就可在D:\WINCE500\PLATFORM\Sun2410\target\ARMV4I\debug目录下望见EBOOT.exe文件了。

二,天生EBOOT.bin

1,由MSDN可知Bootloader是由OEM Startup Code和Main Code组成的。以是在本部分,我们将构成一个Main Code的基础框架

2,新建两个空文件main.c,flash.c。改动Startup.s文件。使其可以跳转到Main.c文件中。

Startup.s源代码如下:

OPT 2

INCLUDE kxarm.h

OPT 1

OPT 128

TEXTAREA

IMPORT main

STARTUPTEXT

LEAF_ENTRY StartUp

b main

ENTRY_END

END

Main.c源代码如下:

void main(void)

{

}

3,建立一个boot.bib文件。

源代码如下:

MEMORY

FILLER A0000000 00030000 RESERVED

EBOOT A0030000 00020000 RAMIMAGE

RAM A0050000 00010000 RAM

CONFIG

COMPRESSION=OFF

PROFILE=OFF

KERNELFIXUPS=ON

ROMSTART=A0030000

ROMWIDTH=32

ROMSIZE=20000

MODULES

nk.exe $(_TARGETPLATROOT)\target\$(_TGTCPU)\$(WINCEDEBUG)\EBOOT.exe EBOOT

4,建立一个makefile.inc文件。

源代码如下:

BootImage:

romimage boot.bib

5,在sources文件的着末面添加一句话。WINCETARGETFILES=BootImage

6,再次Build -c。这时我们就可在D:\WINCE500\PLATFORM\Sun2410\target\ARMV4I\debug目录下望见EBOOT.bin文件了。

留意:这里我的开拓流程和MSDN的标准做法是不一样的。主如果由于我在摸索的历程中,想只管即便的削减代码和代码间的依附关系,以是主要的 Startup.s、Main.c、Flash.c文件基础上都是给的空文件。但这里可以成功的天生EBOOT.bin文件,至少阐明的我们在前三步的摸索是成功的。其次,小我感觉这里只天生了EBOOT.bin文件,彷佛可能阐明的bin文件和nb0文件的不合。MSDN上的说法是:nb0文件用于第一次用JTAG对象将EBOOT.nb0写入到Flash中,bin文件用于更新Flash中的bootloader映象。

三,天生EBOOT.nb0

1,慢慢完成main.c文件。这里我的做法是每添加一段话就build一次,小我感觉这样做可以加深对法度榜样调用历程的理解。当然您也可以一次完成。

源代码如下:

#include

#include

BOOL OEMDebugInit(void)

{

return(TRUE);

}

BOOL OEMPlatformInit(void)

{

return(TRUE);

}

DWORD OEMPreDownload(void)

{

return(0);

}

void OEMLaunch(DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr, const ROMHDR *pRomHdr)

{

}

BOOL OEMReadData(DWORD cbData, LPBYTE pbData)

{

return(TRUE);

}

void OEMShowProgress(DWORD dwPacketNum)

{

}

void OEMWriteDebugByte(unsigned char c)

{

}

static void SpinForever(void)

{

while(1);

}

void main(void)

{

BootloaderMain();

SpinForever();

}

2,慢慢完成flash.c文件。

源代码如下:

#include

#include

BOOL OEMStartEraseFlash (DWORD dwStartAddr, DWORD dwLength)

{

return(FALSE);

}

void OEMContinueEraseFlash (void)

{

}

BOOL OEMFinishEraseFlash (void)

{

return(FALSE);

}

BOOL OEMIsFlashAddr (DWORD dwAddr)

{

return(FALSE);

}

BOOL OEMWriteFlash(DWORD dwStartAddr, DWORD dwLength)

{

return(FALSE);

}

LPBYTE OEMMapMemAddr (DWORD dwImageStart, DWORD dwAddr)

{

return((LPBYTE)dwAddr);

}

3,改动sources文件。

源代码如下:

TARGETNAME=EBOOT

TARGETTYPE=PROGRAM

RELEASETYPE=PLATFORM

EXEENTRY=StartUp

INCLUDES=.\Inc

TARGETLIBS=.\Lib\blcommon.lib \

.\Lib\fulllibc.lib

SOURCES=startup.s \

main.c \

flash.c

WINCETARGETFILES=BootImage

4,往Inc文件夹中添加需要的头文件。

5,建立Lib文件夹,添加blcommon.lib ,fulllibc.lib两个链接库和与之以来的其他文件。

阐明:这里我的做法也不合于MSDN的标准做法,由于我其实是看不明白那些情况变量。以是只能用原始的,最笨措施来引用这里头文件和库。假如您是牛人,请用MSDN的措施,并请顺便教教我。假如您跟我一样是新人,请耐心去找这些互相依附的头文件,并把他们复制到我们得文件夹里。我一共傻傻的在INC文件夹里找了244个,Lib文件夹中5个。

6,再次Build -c。这时我们就可在D:\WINCE500\PLATFORM\Sun2410\target\ARMV4I\debug目录下望见EBOOT.nb0文件了。

WinCE5.0 BSP BOOTLOADER开拓详解-天生bin和nb0_www.fengfly.com

现在exe、bin、nb0三个文件都有了,阐明我们已经搭好了基础的框架平台,后面只要来实现这里文件的内容就可以了。

至此,我们已经完成了MSDN中的前十二步。

您可能还会对下面的文章感兴趣: