Multi-Xip

最近在omap上实现了Ce6.0的MultiXip,其实是挺简单的,只是一些地方需要注意。首先心里得有个概况:

一般我们不使用BinFS时候布局如下:

增加BinFS后布局如下:

其实很多时候,我们有了BinFS,但并没有使用multi-xip功能的优点:节省上电拷贝时间和内存!下面是实现时候的注意地方:

1、Eboot

Eboot里面一定得支持分区PART_BINFS,用于存储OS(xip.nb0).我这分为两个分区PART_BINFS和PART_DOS32(用作文件系统)。源码如下:

        hPartition = BP_OpenPartition(NEXT_FREE_LOC, dwBootPartitionSectorCount, PART_BINFS, FALSE, PART_CREATE_NEW);
        if (hPartition == INVALID_HANDLE_VALUE)
        {
            OALLog(L"Error creating OS partition!!/r/n");
            goto cleanUp;
        }
        // Create FAT partition on remaining flash (can be automatically mounted)
        hPartition = BP_OpenPartition(NEXT_FREE_LOC, USE_REMAINING_SPACE, PART_DOS32, FALSE, PART_CREATE_NEW);
        if (hPartition == INVALID_HANDLE_VALUE)
        {
            OALLog(L"Error creating file partition!!/r/n");
            goto cleanUp;
        }

2、Hive文件系统

系统能够像PC一样,最好使用Hive,这样能够对设置信息等自动保存。增加进来比较简单,Catalog选择如下图:

Hive设置如下图:

按照微软的配置在:

[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles//<FileSystemName>]
   "MountBootable"=dword:1

这样来配置Hive存放位置,但未成功,故只好指定在文件系统ResidentFlash下面,这个是"Folder"="ResidentFlash".

上面的错误由于选择RAM和ROM,导致默认为对象存储作为根目录导致,需要更改为ROM Only即可。

 

3、配置config.bib

Binary ROM Iimage File System (BinFS)和Multiple XIP Support这两节的帮助已经说得清晰了,需要增加什么文件都清楚(How to Modify the MEMORY Section of the Config.bib File to Support BinFS),但自身还需要增加自己的驱动进入xipkernel,有个经验,可直接将platform.bib里面的内容全部拷贝过来,将NK更改为XIPKERNEL,再将认为不需要的删除即可,这样试验即可实现了。

4、platform.reg

配置binFS,这里需要用到binFS,增加进入作为一个profile.

碰到还有一个问题:

BootPhase:

0 Specifies that the locale has not been initialized.

1 Specifies that the locale has been initialized, but the full registry is not yet functional.

2 Specifies that the registry is functional.

BootPhase=dword:0则在FMD_Init里面读取注册表值不成功,表现为读取成功但值并未得到,为0。必需更改为1才能正常读取。

你可能感兴趣的:(Wince)