Filesystems 我可以创建一个可从CE6.0和我的引导加载程序访问的文件系统吗?

Filesystems 我可以创建一个可从CE6.0和我的引导加载程序访问的文件系统吗?,filesystems,windows-ce,Filesystems,Windows Ce,我在PXA310上有一个CE6.0项目,我需要能够通过Wi-Fi下载操作系统更新(nk.bin),并安全地将新操作系统闪存到我的设备上。我愿意接受关于如何执行此操作的其他建议,但我正在考虑将nk.bin保存到NAND闪存中的文件系统中,然后重新启动并让引导加载程序在文件系统中找到该文件,并将其闪存到BINFS分区。这可能吗?如果可能的话,你能给我一个我需要做什么的概要吗 一个警告是,这需要非常健壮,因为这些设备部署在现场,不可现场维修。我需要确保,如果操作系统闪存出现故障(由于电源故障等原因),

我在PXA310上有一个CE6.0项目,我需要能够通过Wi-Fi下载操作系统更新(nk.bin),并安全地将新操作系统闪存到我的设备上。我愿意接受关于如何执行此操作的其他建议,但我正在考虑将nk.bin保存到NAND闪存中的文件系统中,然后重新启动并让引导加载程序在文件系统中找到该文件,并将其闪存到BINFS分区。这可能吗?如果可能的话,你能给我一个我需要做什么的概要吗


一个警告是,这需要非常健壮,因为这些设备部署在现场,不可现场维修。我需要确保,如果操作系统闪存出现故障(由于电源故障等原因),重启后引导加载程序可以重试。这就是为什么我希望将下载的图像存储在持久闪存中,并避免重新下载图像。

从技术上讲,任何事情都是可能的。对于此策略,您需要的是引导加载程序的代码,以便将NAND闪存作为驱动器安装,并具有FAT驱动程序,以便它能够遍历该文件系统并找到映像。如果你还没有的话,这是一个很大的工作

另一种选择是将其存储在文件系统外部的已知地址位置的闪存中。从引导加载程序的角度来看,这要容易得多,因为您所要做的就是映射到地址并复制。当然,这会使写操作更具挑战性,因为这样做是从操作系统进行的,在写操作时,您必须完全禁用任何其他闪存访问,以防止两个线程同时向芯片发送闪存命令而导致损坏


在任何一种情况下,如果您有足够的空间,最好也在其他地方存储一个“已知良好”映像,这样,如果新映像出现问题(校验和失败或x次加载尝试失败),那么您就有了一个可供引导加载程序使用的操作系统。

显然,很大程度上取决于您的硬件设置,但是,我们没有让引导加载程序支持Flash文件系统就完成了这项工作

在我们的产品中,操作系统映像是从闪存加载到RAM执行的——我认为现在大多数WinCE设备都是这样工作的。因此,为了更新操作系统,我们使用了一个特殊的闪存驱动程序,它让在WinCE下运行的应用程序更新闪存中的操作系统块——然后,您只需要硬重启,引导加载程序将新的闪存映像加载到RAM中以执行它。我们发现这在现场非常可靠(有些终端用户技术水平不高!)

需要一个特殊的闪存驱动程序,因为MS闪存文件系统驱动程序无法访问闪存的OS映像扇区,以防止意外损坏OS


您确实需要将NK.BIN加载到操作系统编程应用程序可以读取的内存中,通常是NAND闪存,但是如果您有足够的RAM,它可以直接加载到文件存储的根目录中。但是,无论哪种方式,您都可以在重新启动前完成操作系统扇区的编程后将其删除,因此这只是一项临时要求。

感谢您的快速响应,克里斯!对于我们基于PXA270/NOR的产品,我关闭MSFLASH,然后使用RFD将新操作系统闪存到辅助分区,然后引导加载程序将其闪存到真实的操作系统分区。这很好用,但它会消耗很多闪光灯。这就是为什么我希望一个特别工作组能承担双重责任。你能告诉我一些关于如何将NAND闪存作为驱动器安装在引导加载程序中的信息吗?我计划从Zylonite BSP的SD/MMC下载选项开始,因为这是一个FATF。这有意义吗?SD驱动程序或USB闪存驱动程序都有意义,因为它们都有FAT。您仍然需要提取低级闪存访问块,但如果它已经在读写闪存,则应该已经存在。对于此解决方案,您需要确保更新程序映像基于RAM,以便在访问闪存介质时不会出现任何注册表刷新