4759|6

854

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

wince 下实现多nandflash分区方法探讨 [复制链接]

1)eboot中


[cpp] view plaincopy


  • #define PART_MYFS1        0x11  
  • #define PART_MYFS2        0x12  
  •   
  •     // 创建第一个FAT分区 ,100M大小  
  •     hPartEx1 = BP_OpenPartition( NEXT_FREE_LOC,  
  •                                 SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(100*1024*1024))*PAGES_PER_BLOCK, // align to block  
  •                                 PART_MYFS1,  
  •                                 TRUE,  
  •                                 PART_OPEN_ALWAYS);  
  •   
  •     // create extended partition in whatever is left  
  •     //  
  •     hPartEx2 = BP_OpenPartition( NEXT_FREE_LOC,  
  •                                 USE_REMAINING_SPACE,  
  •                                 PART_MYFS2,  
  •                                 TRUE,//这里需要根据自己的需要,使用TRUE或这FALSE  
  •                                 PART_OPEN_ALWAYS);  


2)注册表配置
[HKEY_LOCAL_MACHINE\init\BootVars]
        "SYSTEMHIVE"="system.hv"
;        "Start DevMgr"=dword:1
        "ProfileDir"="Documents and Settings"
        "RegistryFlags"=dword:1
;        "Flags"=dword:3
        "DefaultUser"="default"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SMFLASH]
        "Dll"="nandflash.dll"
        "Prefix"="DSK"
        "Profile"="SMFLASH"
        "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
        "Order"=dword:0
        "FriendlyName"="S3C2440 NAND Driver"
        
[HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
        "11"="MYFS1"
        "12"="MYFS2"

; [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]
   ; "Name"="nand flash driver"   ;这一段不加也可以正常显示!!
   ; "Folder"="Hard Disk"
   ; "AutoMount"=dword:1
   ; "DefaultFileSystem"="EXFAT"
   ; "PartitionDriver"="mspart.dll"

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\MYFS1]
;        "FormatExfat"=dword:1
        "Flags"=dword:14
        "EnableWriteBack"=dword:1
    "FriendlyName"="MYFS1"
    "Folder"="DISK2"
    "Dll"="exfat.dll"
    "Util"="fatutil.dll"
    "DisableAutoFormat"=dword:1
    "DisableAutoScan"=dword:1
    "EnableCache"=dword:1
    "CacheSize"=dword:0
    "CacheDll"="diskcache.dll"


[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\MYFS2]
;        "FormatExfat"=dword:1
        "Flags"=dword:14
    "FriendlyName"="MYFS2"
    "Folder"="PART2"
    "Dll"="exfat.dll"
    "Util"="fatutil.dll"
    "DisableAutoFormat"=dword:1
    "DisableAutoScan"=dword:1
    "EnableWriteBack"=dword:1
    "EnableCache"=dword:1
    "CacheSize"=dword:0

    "CacheDll"="diskcache.dll"


转自:http://www.armce.com/bbs/thread-2882-1-1.html

最新回复

不是为了加快速度启动,上面明显是为了分出多个fat 分区而已,咋会这样呢,是吧。  详情 回复 发表于 2014-2-9 17:30
点赞 关注
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460

回复
举报

854

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
WINCE下创建多个文件分区

********************************LoongEmbedded********************************

作者:LoongEmbedded(kandi)

时间:2011.01.11

类别:WINCE驱动开发

********************************LoongEmbedded********************************

系统:WINCE6.0+S3C2443

实现分区的是在eboot\nand.cpp下面的WriteOSImageToBootMedia中实现的,

1.创建一个分区的代码如下所以

图1

关于这个函数的详细介绍,可以参考http://blog.csdn.net/LoongEmbedded/archive/2010/11/02/5981033.aspx,上面的代码就是在基于nandflash的剩余空间(除去存放系统映像占用的一部分空间)创建FAT32的文件分区。

2.创建两个分区

怎么实现呢?我在实现一个分区并且在系统启动后显示kandi这个盘符的platform.reg中下面的注册表信息

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NANDFLASH]

    "Prefix"="DSK"

    "Dll"="smflash.dll"

    "Index"=dword:1

    "Order"=dword:0

    "Profile"="NANDFLASH"

    "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"

IF IMGHIVEREG

    "Flags"=dword:00001000

ENDIF ;IMGHIVEREG

     

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\FATFS]

    "Flags"=dword:14

         "Folder"="kandi"

    "FormatExfat"=dword:1

    "CheckForFormat"=dword:1

    "EnableWriteBack"=dword:1

IF IMGHIVEREG   

    "MountAsBootable"=dword:1

ENDIF ;IMGHIVEREG

在上面的注册表的基础上添加下面的内容:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NANDFLASH2]

    "Prefix"="DSK"

    "Dll"="smflash.dll"

    "Index"=dword:9

    "Order"=dword:0

    "Profile"="NANDFLASH2"

    "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"

IF IMGHIVEREG

    "Flags"=dword:00001000

ENDIF ;IMGHIVEREG

     

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH2\FATFS]

    "Flags"=dword:14

         "Folder"="kandi2"

    "FormatExfat"=dword:1

    "CheckForFormat"=dword:1

    "EnableWriteBack"=dword:1

IF IMGHIVEREG   

    "MountAsBootable"=dword:1

ENDIF ;IMGHIVEREG

做这些修改更新系统后,真的可以看到kandi和kandi2这两个盘符,可是当我把A.exe拷贝到kandi文件夹中,而把B.exe拷贝到kandi2文件夹中,然后重启发现kandi和kandi2文件夹中都有A.exe和B.exe,说明没有真正实现两个分区,还只是同一个分区,后来想到到在eboot\nand.cpp下面的WriteOSImageToBootMedia中实现,就加参考实现一个分区的代码做了一下修改

图2

但是这样实现也只能看到kandi一个盘符,问题出现在哪里呢?原来是调用BP_OpenPartition函数会调用GetPartitionTableIndex函数,来识别BP_OpenPartition创建的文件分区是否已经创建过,如果创建过,WINCE50就不会再创建新的同种类型的文件分区。因为GetPartitionTableIndex函数的缘故,所以理论上同种类型的文件分区只能创建一个,但是也可以通过修改第二个BP_OpenPartition函数的第4个参数(由TRUE改为FALSE)再创建一个两个同种类型的文件分区,如下所示

图3

经过图3的修改,我们更新系统启动后可以看到下面的两个盘符:

图4

3.实现三个分区

有了上面的基础之后,我们不难实现3个分区,代码如下:

图5

修改更新系统之后,可以看到3个盘符:

图6

4隐藏分区

实现如下:

图7

这样的系统起来后就看不到分区了

图8

参考链接:

在wince50里创建多个文件分区的方法

http://hi.baidu.com/galloncity/blog/item/c6553700b67d7c081c958336.html

 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 

回复

854

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
不知道怎么回事,第一种方法我试过,没成功。
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

854

帖子

0

TA的资源

五彩晶圆(中级)

4
 
// Flags for Part_FileSystem

#define PART_UNKNOWN            0
#define PART_DOS2_FAT           0x01    // legit DOS partition
#define PART_DOS3_FAT           0x04    // legit DOS partition
#define PART_EXTENDED           0x05    // legit DOS partition
#define PART_DOS4_FAT           0x06    // legit DOS partition
#define PART_DOS32              0x0B    // legit DOS partition (FAT32)
#define PART_DOS32X13           0x0C    // Same as 0x0B only "use LBA"
#define PART_DOSX13             0x0E    // Same as 0x06 only "use LBA"
#define PART_DOSX13X            0x0F    // Same as 0x05 only "use LBA"
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

854

帖子

0

TA的资源

五彩晶圆(中级)

5
 
[HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
    "01"="FATFS"
    "04"="FATFS"
    "06"="FATFS"
    "07"="MSIFS"
    "0B"="FATFS"
    "0C"="FATFS"
    "0E"="FATFS"
    "0F"="FATFS"
    "20"="BOOT"
    "21"="BINFS"
    "22"="RAWFS"
    "23"="RAWFS"
    "25"="IMGFS"
    "26"="BINARY"
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

6
 
其实要multi-nand才有意义,你这样分出来的区不能加快启动速度

点评

不是为了加快速度启动,上面明显是为了分出多个fat 分区而已,咋会这样呢,是吧。  详情 回复 发表于 2014-2-9 17:30
 
 
 

回复

468

帖子

0

TA的资源

纯净的硅(高级)

7
 
xiaoyaodid 发表于 2013-12-26 22:36
其实要multi-nand才有意义,你这样分出来的区不能加快启动速度

不是为了加快速度启动,上面明显是为了分出多个fat 分区而已,咋会这样呢,是吧。
 
个人签名
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表