三星官方2440 CE5.0 BSP编译的一些问题

到BSP后,直接按照《[WinCE50]S3C2440A_Installation Manual_V1.1.pdf》中的方法添加BSP到PB中,添加必要组件并编译。

编译后生成六个文件:STEPLDR.nb0, STEPLDR.bin, EBOOT.nb0, EBOOT.bin, NK.nb0, NK.bin。 

由于开发板上只有NAND Flash,因此只能使用三星的stepstone技术来引导系统。stepstone的作用是系统上电复位时,将NAND Flash前4K的数据复制到内部的SRAM运行,可以在这4K里实现直接引导操作系统的功能,也可以复制eboot到外部SDRAM运行,再由eboot来烧写、引导操作系统。这前4K的程序称为nboot(NAND bootloader),WinCE 5.0中的stepldr其实就是nboot。 

编译完成后,使用SJF2440将nboot/stepldr.nb1烧写到NAND Flash的0 block位置,将eboot.nb0烧写到2 block的位置(修改stepldr的NAND_COPY_PAGE_OFFSET宏可更改此位置)。或者烧写NK.nb0到2 block位置,直接引导系统(需要修改stepldr的LOAD_SIZE_BYTES)。

关于编译选项

Build OS菜单中有三种编译选项: 

    Sysgen 

        若只是添加删除Catlog item,则只需要Sysgen,是三种方式中最快的。 

    Build and Sysgen 

        若修改过public下的代码或者配置文件,则必须用这种方式。

    Build and Sysgen Current BSP 

        若修改了BSP中的代码,则可以用这种方式。

推荐是使用Clean Before Building编译选项,此选项会清空先前编译的结果,编译时间很长,因此可以在需要的时候才选上,一般是更改了环境变量的设置时选上。第一次编译时必须选上。 

另外,若是只修改某个工程的代码,可以直接使用Build Project + Make Run-Time Image After Build。这样速度最快,不必每次都重新编译系统。

 

关于nb0文件与bin文件

nb0文件是可以直接烧写到内存中运行的二进制映像文件,可以通过修改相应BIB文件里的ROMSIZE参数,来改变生成的nb0文件大小,若实际大小大于ROMSIZE,则会生成nb1, nb2等等,大小均等于ROMSIZE。

bin文件具有特定的格式,是压缩过的映像文件。必须使用eboot来读取bin文件。bin格式文件主要是为了实现BinFS,后面配置Multi-Bin会用到。 

stepldr大于4K的问题 

出现的第一个问题是:PB编译出来的stepldr.nb0大小是12K,不能直接烧写进NAND Flash运行。即使更改ROMSIZE大小,烧写stepldr.nb0也无法运行。这个其实是PB的一个BUG,不能生成完整的小于4K的nb0文件。 

解决方法有两种: 

1 打开PLATFORM\SMDK2440A\Src\Bootloader\Stepldr\stepldr.bib文件,修改CONFIG节下的ROMSIZE参数:ROMSIZE=00001000。重新编译后生成三个4K的nbx文件:stepldr.nb0, stepldr.nb1, stepldr.nb2。烧写stepldr.nb1即可。 

2 使用ADS编译的nboot。 

最后,如果已经烧写了eboot,则可以直接烧写stepldr.bin文件来更新stepldr。

无法生成NK.nb0的问题 

    编译完成后发现没有生成NK.nb0文件。 

    在CSDN论坛上找到解决方法: 

    方法1、把工程目录和PB放在同一个磁盘下。 

    方法2、使用WinHex或UltraEdit等十六进制编辑器修改 PUBLIC\COMMON\OAK\BIN\I386\romimage.exe文件,把偏移地址0x25a7b上的“6A  01”改成“6A  03” 

转自:http://blog.csdn.net/xy1001/archive/2008/12/04/3444905.aspx

posted @ 2010-05-09 21:28  gmh  阅读(537)  评论(0编辑  收藏  举报