阅读:7481回复:31
nandflash分两个fat32分区???
大家好,我现在是用的K9F1G08U0A 128Mflash,目前是分了四个区,如下
NAND chip partitioning --------------------- NAND flash end FAT File System ---------------------- <variable based on OS image> OS (BINFS) ---------------------- EBOOT (Binary) 256 kB (round up to whole number of blocks) ---------------------- Unused 14 kB (May change according to block size) ---------------------- Nand Loader (Binary) 2 kB ---------------------- 我用的是ce5.0,现在的情况是我能将FAT File System分成一个FAT32的分区,显示的是盘符的形式,可以自动挂载,正常使用,但是我想把FAT File System分成两个FAT32的分区,就始终只能挂载第一个分区,第二个就挂不上,我是在eboot中分的,烧录os的时候eboot打出来的信息也是分区成功,大家有没有谁知道还要在别的地方设置什么吗? 附上我的分区代码和注册表设置 //~~~~~Creat the first FAT32 partition to use 20M flash to save applications add by cy~~~~~~~~~~~~ OALMSG(OAL_INFO, (TEXT("INFO: PREPARE TO CREATE THE 2M SPACE.\r\n"))); hPart = BP_OpenPartition(NEXT_FREE_LOC, NAND_IMAGE_NUM_SECTOR(0x01400000, g_FlashInfo.wDataBytesPerSector),//0x1400000 = 20M PART_DOS32, TRUE, PART_OPEN_ALWAYS); if(hPart == INVALID_HANDLE_VALUE) { OALMSG(OAL_ERROR, (TEXT("ERROR: failed to create/open FIRST FAT32 extended partition.\r\n"))); // return FALSE; } else OALMSG(OAL_INFO, (TEXT("INFO: SUCCESSFULLY CREATE 2M SPACE .\r\n"))); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Create an extended partition to use rest of flash to mount a filesystem. OALMSG(OAL_INFO, (TEXT("INFO: PREPARE TO CREATE THE 2nd(80M) SPACE.\r\n"))); hPart = BP_OpenPartition(NEXT_FREE_LOC, USE_REMAINING_SPACE, PART_DOS32, TRUE, PART_OPEN_ALWAYS); //hPart = BP_OpenPartition(NEXT_FREE_LOC, USE_REMAINING_SPACE, // PART_EXTENDED, TRUE, PART_OPEN_ALWAYS); ; HIVE BOOT SECTION IF BSP_NAND_FMD [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NAND_Flash] "Dll"="nandfmd.dll" "Order"=dword:0 "Prefix"="DSK" "Ioctl"=dword:4 "Profile"="FlashDisk" "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}" "FriendlyName"="NAND FLASH Driver" ; Override names in default profile [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk] "DriverPath"="Drivers\\BuiltIn\\NAND_Flash" "DefaultFileSystem"="FATFS" "PartitionDriver"="mspart.dll" "AutoMount"=dword:1 "AutoPart"=dword:1 "AutoFormat"=dword:1 "Name"="NAND FLASH" "Folder"="NAND Flash" "Ioctl"=dword:4 "MountFlags"=dword:4 [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk\FATFS] "Flags"=dword:00000014 "FormatTfat"=dword:1 ; Format partitions to be TFAT "MountAsBootable"=dword:1 |
|
沙发#
发布于:2007-07-13 15:32
我想这个问题应该困扰着很多人,第一个分区20M,第二个分区就是剩下的空间了,哪位大虾帮帮忙,先谢谢了。
自己顶一下 |
|
板凳#
发布于:2007-07-13 16:00
BP_OpenPartition应该没有问题,可能MBR中DPT部分已经满了吧。你不是创建了4个分区嘛,DPT最多就能保存4个分区的信息。这样的话再创建FAT就没法保留分区信息了。
你把MBR 的446-509字节数据打出来,看看内容是什么 |
|
|
地板#
发布于:2007-07-13 16:35
他其实DPT部分的3个区,以下这两个部分应该不占区的
EBOOT (Binary) 256 kB (round up to whole number of blocks) ---------------------- Unused 14 kB (May change according to block size) ---------------------- Nand Loader (Binary) 2 kB 我也碰到了同样的问题,只能挂载第一个FAT区 :( |
|
地下室#
发布于:2007-07-13 17:33
To cwl417 & saint_bxg & jasonshi :
三位好,我现在挂不上。 不知道开始的时候Read_Sector()的时候Psectorinfo怎么添?? |
|
|
5楼#
发布于:2007-07-13 18:02
zhuxiaofeng :
你说的挂不上是什么意思,是系统起来后看不到NAND盘?(存储管理器中也看不到分区) 那系统是已经烧到NAND中的吗? 如果是那样的话,可能是添加设备信息的时候最后一个 对连续页读的支持 不对。 比如我的 #define NAND_DEVICE_K9F2G08U0X \ { ID_MAKER_SAMSUNG, 0xDA, 8, SAMSUNG_LARGEPAGE_X08_BBI_OFFSET, 50000000, 2048, 64, 2048, 64, 0x01, 0x00, FALSE } 我的NAND 不支持连续页读,我同事之前写了TRUE,结果容量大小显示为8TB |
|
|
6楼#
发布于:2007-07-13 22:57
zhuxiaofeng :你的应该最好解决,你用的是小页,稍微修改下就可以了。看看fmd.h中的结构体,把那八个字节的添好了就行了
|
|
7楼#
发布于:2007-07-16 09:30
大家说的DPT满了不知道跟分区的数量有没有关系,我在bppriv.h中发现了有一个NUM_PARTS为4的宏定义,我把它改成了5,但是还是没有用。
而且我能保证BP_OpenPartition是没有问题的,因为我注释掉前面的20M的分区BP_OpenPartition函数,后面的80M的分区就能分出来,而且能挂上正常使用,大家多提些意见,谢谢了! |
|
8楼#
发布于:2007-07-16 11:10
各位大侠能不能讲讲在eboot下将nand分成一个BinFS分区和一个FAT分区的步骤?
是不是首先要调用BP_Init,然后调用BP_OpenPartition就可以了? 在BP_Init函数中的第一个参数BINFS_RAM_START地址应该如何确定呢?在BP_Init中调用了FMD_Init函数,是不是直接用驱动中的函数就可以了? 谢谢大家! |
|
9楼#
发布于:2007-07-16 14:04
to cwl417:
“注释掉前面的20M的分区BP_OpenPartition函数,后面的80M的分区就能分出来,而且能挂上正常使用” 那很有可能就是上面所说的DPT的问题。 单改bppriv.h中的NUM_PARTS是没有用的,因为DPT就那么大。真要起作用的话,可能改动比较大,我没有试过,不知道行不行。 你先看一下FAT磁盘结构的资料 |
|
|
10楼#
发布于:2007-07-16 16:03
to saint_bxg :
首先谢谢你的关注,我查看了一下我的bsp,里面涉及到eboot,os的起始地址和偏移量的地方有很多,也不知道该改什么地方,这些都是第三方做的,如果真是要我自己该起来还真的是很麻烦。 我曾经搜到过一篇帖子,作者也是这个问题,后来他自己解决了,只说了是要激活方式分区的问题,然后就没下文了。 |
|
11楼#
发布于:2007-07-16 20:02
谢谢jasonshi & saint_bxg.
谢谢大家。。 我的现在是,读写可以,自己在初始化之后测试了一下。 还有就是在控制面板里面可以看见nandflash的大小, 而且大小是对的。。 但是没有盘符?? 不知道怎么回事?? 是什么不对哪?? 怎么看分区哪??谢谢大家。。 |
|
|
12楼#
发布于:2007-07-16 20:04
谢谢jasonshi & saint_bxg.
谢谢大家。。 我的现在是,读写可以,自己在初始化之后测试了一下。 还有就是在控制面板里面可以看见nandflash的大小, 而且大小是对的。。 但是没有盘符?? 不知道怎么回事?? 是什么不对哪?? 怎么看分区哪??谢谢大家。。 |
|
|
13楼#
发布于:2007-07-16 20:12
这是偶得注册表部分的设置。
不知道有什么不妥的地方吗?? 我只要挂上文件系统就行。。谢谢大家。。 ; HIVE BOOT SECTION ; @CESYSGEN IF CE_MODULES_SDNPCID IF BSP_SMFLASH_WB910 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MSFlash] "Profile"="MSFlash" "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}" "Order"=dword:0 "FriendlyName"="MSFLASH Driver" "Dll"="smflash.dll" "Prefix"="DSK" [HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MSFlash] "DriverPath"="Drivers\\BuiltIn\\MSFlash" ; LoadFlags 0x01 == load synchronously "LoadFlags"=dword:2 "Order"=dword:0 "BootPhase"=dword:2 ENDIF BSP_SMFLASH_WB910 ; @CESYSGEN ENDIF CE_MODULES_SDNPCID ; END HIVE BOOT SECTION |
|
|
14楼#
发布于:2007-07-17 09:05
to zhuxiaofeng:
添加几个子键试试: [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NandFlash] "Dll"="nandfcd.dll" ;你的NAND驱动所生成的DLL "Order"=dword:1 ;have changed. from 0 to 1 "Prefix"="DSK" ;前缀 "Profile"="FlashDisk" "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}" "FriendlyName"="随便取个名字,将在存储管理器中看到" "BmlVolumeId"=dword:0 "BmlPartitionId"=dword:8 "Index"=dword:2 [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk] "Name"="SAMSUNG NAND " "Folder"="C" ;NAND盘符名称 "DefaultFileSystem"="FATFS" "AutoMount"=dword:1 ;自动挂载 "AutoPart"=dword:1 "AutoFormat"=dword:1 "PartitionDriver"="mspart.dll" "Ioctl"=dword:4 "BootPhase"=dword:0 [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk\FATFS] ; Override common setting to enable automatic formatting of unformatted volumes "Flags"=dword:00000024 "Dll"="fatfsd.dll" "Paging"=dword:1 "EnableCacheWarm"=dword:0 "CacheSize"=dword:0 ; "MountAsBootable"=dword:1 ;;have changed. add ; "MountAsRoot"=dword:1 |
|
|
15楼#
发布于:2007-07-17 10:44
saint_bxg : 如果挂两个FAT区注册表应该怎么设置呢?
|
|
16楼#
发布于:2007-07-17 12:14
我这里就这么设置的话他两个都给你挂上了,后一个名字自动编号2
也试过分开加载,但没有成功。有什么方法可以交流一下。 |
|
|
17楼#
发布于:2007-07-17 17:11
"BmlVolumeId"=dword:0
"BmlPartitionId"=dword:8 这两个字段是什么意思呢? |
|
18楼#
发布于:2007-07-17 17:52
我加上了,不过没反应,不知道怎么回事?
谢谢。。。 还是挂不上文件系统。 |
|
|
19楼#
发布于:2007-07-17 18:28
我手动格式化的时候,就会出现所有的block是bad的情况。
而先前已经扫描了过了,都是好的,为什么再次扫描会出现是bad的哪?? 不明白?? 还往大家指点一下,谢谢。。 |
|
|
上一页
下一页