最近在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才能正常读取。