关于多分区的加载问题

lxjlan 2009-12-21 09:46:04
目前的NAND 除了reserved 的 block(STEPLDR, TOC, EBOOT), MBR, 之后把剩下的NAND分成4个区, 一个BINFS分区, 3个FATFS分区。
MBR的4个分区的数据如下:
03 05 01 00 21 c4 00 00 40 01 00 00 00 30 00 00
00 c5 01 00 0b e4 00 00 40 31 00 00 00 08 00 00
00 e5 01 00 0b e4 00 00 40 39 00 00 00 40 00 00
00 e5 01 00 0b e4 00 00 40 79 00 00 00 40 00 00

注册表里的配置如下:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SMFLASH]
"Prefix"="DSK"
"Dll"="smflash.dll"
"Index"=dword:1
"Order"=dword:0
"Profile"="SMFLASH"
"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"Flags"=dword:00000014

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]
"PartitionDriver"="mspart.dll"
"Folder"="NAND_FLASH"
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1
"Name"="Microsoft Flash Disk"

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\BINFS]
"DLL"="binfs.dll"

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\FATFS]
"DLL"="fatfsd.dll"

这样能否在NK启动的时候把4个分区都mount上去呢?
由于我的NK,是无界面的 ,所以debug起来比较麻烦。
在系统默认的情况下, NAND在download NK的时候,被分成了2个区, 一个NK.bin大小的文件的BINFS分区和剩下的部分分成一个FAT的分区用于用户数据,这样的情况下, 在系统上看, NAND驱动器被识别为xxxx(不知道这个名字是靠哪个键值来定义的),分区一显示为Part00, 第二分区为Part01* (这里的*是什么意思?), 这个时候挂载到系统的路径是不是 \"Folder"\ (Folder取决于注册表的配置), 但是这样就有个问题了,如果像我这样的的3个分区都被挂载了,那路径是如何的?
...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxjlan 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 veabol 的回复:]
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDisk]
  "Prefix"="DSK"
  "Dll"="ONDisk.dll"
  "Order"=dword:1
  "Index"=dword:4
  "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
  "Profile"="FlashDisk"
  "BmlVolumeId"=dword:0 ; BML volume ID = 0
  "BmlPartitionId"=dword:8 ; BML parition ID = PARTITION_ID_FILESYSTEM
  "WMRStartSector"=dword:0
  "WMRNumOfSector"=dword:4000 ; 128MByte
  "Flags"=dword:11000 ; do not load again in boot phase 2 ;


[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk]
    "DefaultFileSystem"="FATFS"
    "PartitionDriver"="mspart.dll"
    "Name"="PocketMory MLC Disk"
    "Folder"="Documents and Settings"
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "AutoFormat"=dword:1
    "MountFlags"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk\FATFS]
    "FriendlyName"="PocketMory FAT FileSystem"
    "Dll"="fatfsd.dll"
    "Flags"=dword:00000014 ; FATFS_ENABLE_BACKUP_FAT | FATFS_DISABLE_AUTOSCAN
    "FormatTfat"=dword:1
    "EnableCacheWarm"=dword:0


;----------------------------------------------------------------------------
; 2nd FAT Area
;----------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDisk1]
  "Prefix"="DSK"
  "Dll"="ONDisk.dll"
  "Order"=dword:1
  "Index"=dword:3
  "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
  "Profile"="FlashDisk1"
  "BmlVolumeId"=dword:0 ; BML volume ID = 0
  "BmlPartitionId"=dword:A ; BML parition ID = PARTITION_ID_FILESYSTEM1
  "WMRStartSector"=dword:4000
  "WMRNumOfSector"=dword:4C000 ; last location
  "Flags"=dword:11000 ; do not load again in boot phase 2 ;

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk1]
    "DefaultFileSystem"="FATFS"
    "PartitionDriver"="mspart.dll"
    "Name"="PocketMory MLC Disk1"
    "Folder"="System"
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "AutoFormat"=dword:1
    "MountFlags"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk1\FATFS]
    "FriendlyName"="PocketMory FAT FileSystem1"
    "Dll"="fatfsd.dll"
    "Flags"=dword:00000014 ; FATFS_ENABLE_BACKUP_FAT | FATFS_DISABLE_AUTOSCAN
    "FormatTfat"=dword:0
    "EnableCacheWarm"=dword:0

;----------------------------------------------------------------------------
; 3rd FAT Area
;----------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDisk2]
  "Prefix"="DSK"
  "Dll"="ONDisk.dll"
  "Order"=dword:1
  "Index"=dword:1
  "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
  "Profile"="FlashDisk2"
  "BmlVolumeId"=dword:0 ; BML volume ID = 0
  "BmlPartitionId"=dword:9 ; BML parition ID = PARTITION_ID_FILESYSTEM1
  "WMRStartSector"=dword:50000
  "WMRNumOfSector"=dword:ffffffff ; last location
  "Flags"=dword:11000 ; do not load again in boot phase 2 ;

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk2]
    "DefaultFileSystem"="FATFS"
    "PartitionDriver"="mspart.dll"
    "Name"="PocketMory MLC Disk2"
    "Folder"="Storage Card"
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "AutoFormat"=dword:1
    "MountFlags"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk2\FATFS]
    "FriendlyName"="PocketMory FAT FileSystem2"
    "Dll"="fatfsd.dll"
    "Flags"=dword:00000014 ; FATFS_ENABLE_BACKUP_FAT | FATFS_DISABLE_AUTOSCAN
    "FormatTfat"=dword:0
    "EnableCacheWarm"=dword:0


其中,"WMRStartSector"=dword:0
  "WMRNumOfSector"=dword:4000 ; 128MByte
是设置每个分区的起始地址及分区大小,驱动从注册表中读取这个数据
[/Quote]

这样设置了其实的扇区和大小的方式, 系统的能识别他们是同一个MBR上所定义的吗?
还有一个疑问的地方,"AutoMount"=dword:1 这个参数,我在手册上看到, 如果定义了这个会自动mount所有的分区, 这个会和上面的设置冲突造成紊乱吗?
lxjlan 2009-12-22
  • 打赏
  • 举报
回复
啊。。 是要3组的呀? 我好好研究下你的 reg信息, 非常感谢各位。
博说医械研发 2009-12-22
  • 打赏
  • 举报
回复
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDisk]
"Prefix"="DSK"
"Dll"="ONDisk.dll"
"Order"=dword:1
"Index"=dword:4
"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"Profile"="FlashDisk"
"BmlVolumeId"=dword:0 ; BML volume ID = 0
"BmlPartitionId"=dword:8 ; BML parition ID = PARTITION_ID_FILESYSTEM
"WMRStartSector"=dword:0
"WMRNumOfSector"=dword:4000 ; 128MByte
"Flags"=dword:11000 ; do not load again in boot phase 2 ;


[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk]
"DefaultFileSystem"="FATFS"
"PartitionDriver"="mspart.dll"
"Name"="PocketMory MLC Disk"
"Folder"="Documents and Settings"
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1
"MountFlags"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk\FATFS]
"FriendlyName"="PocketMory FAT FileSystem"
"Dll"="fatfsd.dll"
"Flags"=dword:00000014 ; FATFS_ENABLE_BACKUP_FAT | FATFS_DISABLE_AUTOSCAN
"FormatTfat"=dword:1
"EnableCacheWarm"=dword:0


;----------------------------------------------------------------------------
; 2nd FAT Area
;----------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDisk1]
"Prefix"="DSK"
"Dll"="ONDisk.dll"
"Order"=dword:1
"Index"=dword:3
"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"Profile"="FlashDisk1"
"BmlVolumeId"=dword:0 ; BML volume ID = 0
"BmlPartitionId"=dword:A ; BML parition ID = PARTITION_ID_FILESYSTEM1
"WMRStartSector"=dword:4000
"WMRNumOfSector"=dword:4C000 ; last location
"Flags"=dword:11000 ; do not load again in boot phase 2 ;

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk1]
"DefaultFileSystem"="FATFS"
"PartitionDriver"="mspart.dll"
"Name"="PocketMory MLC Disk1"
"Folder"="System"
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1
"MountFlags"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk1\FATFS]
"FriendlyName"="PocketMory FAT FileSystem1"
"Dll"="fatfsd.dll"
"Flags"=dword:00000014 ; FATFS_ENABLE_BACKUP_FAT | FATFS_DISABLE_AUTOSCAN
"FormatTfat"=dword:0
"EnableCacheWarm"=dword:0

;----------------------------------------------------------------------------
; 3rd FAT Area
;----------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDisk2]
"Prefix"="DSK"
"Dll"="ONDisk.dll"
"Order"=dword:1
"Index"=dword:1
"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"Profile"="FlashDisk2"
"BmlVolumeId"=dword:0 ; BML volume ID = 0
"BmlPartitionId"=dword:9 ; BML parition ID = PARTITION_ID_FILESYSTEM1
"WMRStartSector"=dword:50000
"WMRNumOfSector"=dword:ffffffff ; last location
"Flags"=dword:11000 ; do not load again in boot phase 2 ;

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk2]
"DefaultFileSystem"="FATFS"
"PartitionDriver"="mspart.dll"
"Name"="PocketMory MLC Disk2"
"Folder"="Storage Card"
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1
"MountFlags"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk2\FATFS]
"FriendlyName"="PocketMory FAT FileSystem2"
"Dll"="fatfsd.dll"
"Flags"=dword:00000014 ; FATFS_ENABLE_BACKUP_FAT | FATFS_DISABLE_AUTOSCAN
"FormatTfat"=dword:0
"EnableCacheWarm"=dword:0


其中,"WMRStartSector"=dword:0
"WMRNumOfSector"=dword:4000 ; 128MByte
是设置每个分区的起始地址及分区大小,驱动从注册表中读取这个数据
博说医械研发 2009-12-22
  • 打赏
  • 举报
回复
仅仅这些注册表内容吗?
如果想实现三个FAT分区,那么FAT分区部分的注册表就要写三个,且驱动要支持。不同的路径都是通过每个folder来设置的
k414588408 2009-12-22
  • 打赏
  • 举报
回复
学习下
unsway123 2009-12-22
  • 打赏
  • 举报
回复
在存储管理器上看你的nandflash的名字就是name Microsoft Flash Disk,你挂在上去的part00是挂载上去的名字,也就是那个folder,所以你的路径应该是\Microsoft Flash Disk\floder

如果是APP来读写数据都是需要靠这样的路径来寻找文件的。

我不知道你的注册表是基于hive还是基于RAM,如果是基于hive我敢打包票你的注册表肯定是起不来的。如果是RAM我就不好说了。因为我没有试验过。。如果兄台想要验证你的想法。。不用debug也可以看到你的分区时否挂上啊。。。可以telnet啊。。。
lxjlan 2009-12-22
  • 打赏
  • 举报
回复
顶下。。。 为啥没人帮忙呢? 难道是我的问题描述得有问题?
kyzf 2009-12-21
  • 打赏
  • 举报
回复
MARK,顶下。
学习下

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧