cwl417
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:7481回复:31

nandflash分两个fat32分区???

楼主#
更多 发布于:2007-07-13 15:27
大家好,我现在是用的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

cwl417
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-13 15:32
我想这个问题应该困扰着很多人,第一个分区20M,第二个分区就是剩下的空间了,哪位大虾帮帮忙,先谢谢了。

自己顶一下
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-13 16:00
BP_OpenPartition应该没有问题,可能MBR中DPT部分已经满了吧。你不是创建了4个分区嘛,DPT最多就能保存4个分区的信息。这样的话再创建FAT就没法保留分区信息了。
你把MBR 的446-509字节数据打出来,看看内容是什么
努力! 成功就在不远处....
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
地板#
发布于: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区 :(
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-13 17:33
To cwl417 & saint_bxg & jasonshi :
三位好,我现在挂不上。

不知道开始的时候Read_Sector()的时候Psectorinfo怎么添??
做一个出色的程序员!
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
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
努力! 成功就在不远处....
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-07-13 22:57
zhuxiaofeng :你的应该最好解决,你用的是小页,稍微修改下就可以了。看看fmd.h中的结构体,把那八个字节的添好了就行了
cwl417
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-07-16 09:30
大家说的DPT满了不知道跟分区的数量有没有关系,我在bppriv.h中发现了有一个NUM_PARTS为4的宏定义,我把它改成了5,但是还是没有用。
而且我能保证BP_OpenPartition是没有问题的,因为我注释掉前面的20M的分区BP_OpenPartition函数,后面的80M的分区就能分出来,而且能挂上正常使用,大家多提些意见,谢谢了!
hzwwin
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2008-01-16
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-07-16 11:10
各位大侠能不能讲讲在eboot下将nand分成一个BinFS分区和一个FAT分区的步骤?
是不是首先要调用BP_Init,然后调用BP_OpenPartition就可以了?
在BP_Init函数中的第一个参数BINFS_RAM_START地址应该如何确定呢?在BP_Init中调用了FMD_Init函数,是不是直接用驱动中的函数就可以了?
谢谢大家!
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-07-16 14:04
to cwl417:
“注释掉前面的20M的分区BP_OpenPartition函数,后面的80M的分区就能分出来,而且能挂上正常使用”
那很有可能就是上面所说的DPT的问题。
单改bppriv.h中的NUM_PARTS是没有用的,因为DPT就那么大。真要起作用的话,可能改动比较大,我没有试过,不知道行不行。
你先看一下FAT磁盘结构的资料
附件名称/大小 下载次数 最后更新
磁盘结构.txt (5KB)  9 2007-07-16 14:04
努力! 成功就在不远处....
cwl417
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-07-16 16:03
to saint_bxg :
     首先谢谢你的关注,我查看了一下我的bsp,里面涉及到eboot,os的起始地址和偏移量的地方有很多,也不知道该改什么地方,这些都是第三方做的,如果真是要我自己该起来还真的是很麻烦。
     我曾经搜到过一篇帖子,作者也是这个问题,后来他自己解决了,只说了是要激活方式分区的问题,然后就没下文了。
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-07-16 20:02
谢谢jasonshi & saint_bxg.
谢谢大家。。
我的现在是,读写可以,自己在初始化之后测试了一下。
还有就是在控制面板里面可以看见nandflash的大小,
而且大小是对的。。
但是没有盘符??
不知道怎么回事??
是什么不对哪??
怎么看分区哪??谢谢大家。。
做一个出色的程序员!
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-07-16 20:04
谢谢jasonshi & saint_bxg.
谢谢大家。。
我的现在是,读写可以,自己在初始化之后测试了一下。
还有就是在控制面板里面可以看见nandflash的大小,
而且大小是对的。。
但是没有盘符??
不知道怎么回事??
是什么不对哪??
怎么看分区哪??谢谢大家。。
做一个出色的程序员!
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
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
做一个出色的程序员!
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
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
努力! 成功就在不远处....
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-07-17 10:44
saint_bxg : 如果挂两个FAT区注册表应该怎么设置呢?
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-07-17 12:14
我这里就这么设置的话他两个都给你挂上了,后一个名字自动编号2
也试过分开加载,但没有成功。有什么方法可以交流一下。
努力! 成功就在不远处....
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-07-17 17:11
    "BmlVolumeId"=dword:0
    "BmlPartitionId"=dword:8
这两个字段是什么意思呢?
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-07-17 17:52
我加上了,不过没反应,不知道怎么回事?
谢谢。。。
还是挂不上文件系统。
做一个出色的程序员!
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-07-17 18:28
我手动格式化的时候,就会出现所有的block是bad的情况。
而先前已经扫描了过了,都是好的,为什么再次扫描会出现是bad的哪??
不明白??
还往大家指点一下,谢谢。。
做一个出色的程序员!
上一页
游客

返回顶部