嵌入式系统可能支持多种文件系统,其中包括windows文件系统如fat, ntfs等。本文主要是将自己开发一个简单的只读FAT文件系统的经验与大家share.
本方法假设文件系统算法已经开发结束,然后设计文件系统模拟程序(本例中FileMonitor),此模拟程序将文件系统格式化到一个文件上。此文件通过filedisk程序(此程序是通用程序可以从网络下载)将此文件系统mount到windows路径下i盘,然后通过perl程序调用windows WMI 测试系统格式化是否满足windows操作系统。此方法由于是通过windos WMI测试,与windows兼容性完美。perl程序如下
#perl
#完成 WMI支持的验证
use Win32::OLE('in');
use constant wbemFlagReturnImmediately => 0x10;
use constant wbemFlagForwardOnly => 0x20;
$computer = ".";
$objWMIService = Win32::OLE->GetObject
("winmgmts:\\\\$computer\\root\\CIMV2") or die "WMI connection failed.\n";
$i = 0;
#定义测试文件系统的大小,此例子 为从100M-1G 大小的文件系统, 步调为100M, 可以自己定义
for( $i=100; $i<1000; $i+=100)
{
print "Test time $i\n\n\n";
system("filedisk /umount i:");
$j = $i*2;
#模拟程序将文件系统格式化到一个文件上
if ( system("FileMonitor e:\\temp\\filedisk.img $j") )
{
print "create drive file failed!\n";
exit 0;
}
#filedisk程序将此文件系统mount到windows路径下i盘
if ( system("filedisk /mount 0 e:\\temp\\filedisk.img $ik i:") )
{
print "create I: failed!\n";
exit 0;
}
$colItems = $objWMIService->Get("Win32_LogicalDisk.DeviceID='I:'");
if (!$colItems)
{
print "Drive is not exist\n";
exit 0;
}
#打印文件系统信息
print "DriveID($colItems->{DeviceID}) $colItems->{FileSystem} size = : $colItems-Size}\n";
print "Check...\n";
#验证文件系统
$errReturn = $colItems->ChkDsk(0);
if( $errReturn != 0)
{
print "Error code $errReturn\n";
exit 0;
}
else
{
print "Sucess\n";
}
system("filedisk /umount i:");
}
#
阅读(1073) | 评论(0) | 转发(0) |