FS2410重新分区nandflash

来源:互联网 发布:淘宝收藏量会下降吗 编辑:程序博客网 时间:2024/05/16 08:48

转载请注明出处

作者:小马


优龙的FS2410开发板. 这个板子默认配有linux和Wince两个系统. 两系统占了64m nandflash的大部分, 加上bootloader最后我能wince系统下能看到的可以留给我用的只有2m.

 

c#写完基于wince的应用程序后发现安装文件大于2m, 没办法,只能牺牲linux了. 我打算把放linux的那部分近30m的空间擦除,然后把这部分这间”移”到wince下给我当硬盘用.


从网上找了一些资料, 搞了两天没成功. 于是带着板子去了优龙公司,下面这个方法就是他们提供的,我在板子上实验成功. 把它贴在下面供有同样问题的朋友参阅(我加了一些注释以便于理解).


首先用ADS打开S3C2410_BIOS,这个是公司光盘提供的bootloader的源程序. 打开其中的Nand.c文件,原来的代码如下

static struct Partition NandPart[] = {         {0,             0x00040000, "bootloader"},          //256K         {0x00040000, 0x001c0000, "zImage"},//0.75M         {0x00200000, 0x01e00000, "cramfs"},            //30M         {0x02000000, 0x02000000, "WinCE"},    //32M         {0,                       0         , 0}};
//分区1用来放bootloader, 分区2是linux的内核,分区3是linux文件系统. 最后32m wince占了30m,剩下2m可以当硬盘用. 最后一个0是作结束标志的. 把它改成如下的形式:static struct Partition NandPart[] = {        {0,                  0x00040000, "boot"},        //256K        {0x00040000, 0x02000000, "kernel"},        //32M, 用来放wince        {0x02040000, 0x01fc0000, "flash"},//用来做硬盘, 31.75        {0,                         0         , 0}};


然后在nand.c文件里找到LoadRun函数

void LoadRun(int part_sel)函数里面的
if(part_sel == 3)
  size = 0x01e00000;

这两行代码注释掉.


void NandLoadRunW(void)里面的
LoadRun(3);

改成LoadRun(1);//这表示从flash第一分区加载.


在ADS下编译一下,可以得到S3C2410_BIOS.bin文件。

用sjf2410(flash 烧写工具)将上述bios烧写到NandFlash中,(用上述文件替换原来“flash烧写”文件夹下的.bin文件).


将“//SMDK2410/DRIVERS/NandFlsh/FMD”中的cfnand.h文件中的下面几个定义改动一下,如下所示:
#define  NUM_BLOCKS_NK   0x800       //  每个块有16384字节,和在nand.c中定义的大小相同即可,  用NUM_BLOCKS_NK*16384,得到的结果看是不是之前在nand.c里定义的用来存放wince映像的大小.

需要在bootload中修改WIN CE烧写的地址与引导WIN CE启动的地址,确保它们相同


.将“//SMDK2410/INC”文件下的loader.h中的下面几个定义改动一下,如下所示:

#define RESERVED_BOOT_BLOCKS        0xF80//改为如下:#define RESERVED_BOOT_BLOCKS       0x810  //  0x02040000/0x4000=0x810#define IMAGE_START_BLOCK           RESERVED_BOOT_BLOCKS


 这里Reserved_Boot_Blocks是指给bootloader和NK在NAND上保留多少块,剩下的就可以用作wince中的NandFlash了。我的前两个分区占了0x02040000的空间,共0x810个块。原文件中有这样的注释:(NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE + EBOOT_BLOCK_SIZE),其实根本不是那么回事,优龙用自己的bootloader装载wince,没用nboot,也没用eboot,所以不要看这个注释,否则想穿脑袋也想不通。


点“build and sygen”编译平台,得到NK.nb0,通过USB下载到Nandflash中,运行,进入wince系统后,如使用手册4.4.5的步骤格式化及重新分区,可以看到Nandflash的空间由原来的2M扩展到35.5M