zoukankan      html  css  js  c++  java
  • 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

    做这些修改更新系统后,真的可以看到kandikandi2这两个盘符,可是当我把A.exe拷贝到kandi文件夹中,而把B.exe拷贝到kandi2文件夹中,然后重启发现kandikandi2文件夹中都有A.exeB.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

  • 相关阅读:
    @property @synthesize的含义以及误区。
    OC中类的扩展介绍
    Thinking in Java第三、四章学习笔记----操作符与控制执行流程
    LeetCode之Easy篇 ——(12)Integer to Roman
    LeetCode之Easy篇 ——(9)Palindrome Number
    LeetCode之Easy篇 ——(7)Reverse Integer
    LeetCode之Easy篇 ——(1)Two Sum
    Java关键字汇总
    Thinking in Java 第二章学习笔记----一切都是对象
    php文件上传原理详解
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298819.html
Copyright © 2011-2022 走看看