5871|18

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

OpenStore函数中写什么,大虾多多帮忙 [复制链接]

各位高手帮帮忙 函数里面我都不知道写什么能打开 bin分区的   下面是我注册表中的信息 \(^o^)/~[HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
        "21"="BINFS"

[HKEY_LOCAL_MACHINE\System\StorageManager\BINFS]
        "Folder"="BINFS"
        "FriendlyName"="Bin FileSystem"
        "Dll"="binfs.dll"
; MountFlags:
; 0x10 specifies that this file system is to be mounted as an external
;      ROM filesystem shadowing the \windows directory
; 0x1 specifies that the mountpoint \BINFS is to be hidden
;
        "MountFlags"=dword:11
        "BootPhase"=dword:0
        "Flags"=dword:1000
;
; Entries to load the block driver that BINFS uses
; This is dependent on what device is used
;

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\FlashDrv]
    "DriverPath"="Drivers\\BlockDevice\\FlashDrv"
    "LoadFlags"=dword:1
    "MountFlags"=dword:11
    "BootPhase"=dword:0
    "Flags"=dword:1000

[HKEY_LOCAL_MACHINE\Drivers\BlockDevice\FlashDrv]
    "Prefix"="DSK"
    "Dll"="FLASHDRV.dll"
    "Order"=dword:0
    "Ioctl"=dword:4
    "Profile"="FlashDrv"
    "FriendlyName"="MS Flash Driver"
    "MountFlags"=dword:11
    "BootPhase"=dword:0
    "Flags"=dword:1000

; Bind BINFS to the block driver
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDrv]
        "DefaultFileSystem"="BINFS"
        "PartitionDriver"="mspart.dll"
        "AutoFormat"=dword:1
        "AutoMount"=dword:1
        "AutoPart"=dword:1
        "MountFlags"=dword:11
        "Folder"="NandFlash"
        "Name"="Microsoft Flash Disk"
        "BootPhase"=dword:0
        "Flags"=dword:1000
        "MountHidden"=dword:0   ;
        "MountAsBootable"=dword:1
函数调用中不知道添嘛  一直都是 打印open store fail 。。。。。。。。。。。。
hDisk = OpenStore(L"DSK1:");
        if(hDisk == INVALID_HANDLE_VALUE)
        {
                RETAILMSG(1, (L"open store fail\r\n"));
        }

        hPart = OpenPartition(hDisk,L"FlashDrv");
        if(hPart == INVALID_HANDLE_VALUE)
        {
                RETAILMSG(1, (L"open part fail\r\n"));
        }
我的FLASH的注册表信息
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDrv]
   "Prefix"="DSK"
   "Dll"="FLASHDRV.dll"
   "Order"=dword:0
   "Ioctl"=dword:4
   "Profile"="FlashDrv"
谢谢 各位了  ·······  \(^o^)/~

最新回复

  详情 回复 发表于 2009-11-20 10:33
点赞 关注

回复
举报

57

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶下 ················
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
有个方法比较好,你直接用FindFirstStore以及FindNextStore把你的那个store给遍历出来
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 guopeixin 的回复:
有个方法比较好,你直接用FindFirstStore以及FindNextStore把你的那个store给遍历出来

  谢谢你  我是想格式化NK的bin分区
        HANDLE hDisk,hPart;
//        STOREINFO storeinfo;
    hDisk = OpenStore(TEXT("FlashDr"));
        if(hDisk == INVALID_HANDLE_VALUE)
        {
                RETAILMSG(1, (L"open store fail\r\n"));
                RETAILMSG(1, (TEXT("err: %d\r\n"),GetLastError()));
        }
        hPart = OpenPartition(hDisk,L"part00");
        if(hPart == INVALID_HANDLE_VALUE)
        {
                RETAILMSG(1, (L"open part fail\r\n"));
        }
        CloseHandle(hDisk);
        RETAILMSG(1, (L"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\r\n"));

        DismountPartition(hPart);
        if(FormatVolume(hPart,NULL,NULL,NULL,NULL) != ERROR_SUCCESS)
        {
                RETAILMSG(1, (L"```````````````````````````\r\n"));
                return;
        }
        CloseHandle(hPart);
  这里面的打开可以了  但是格式化的函数  FormatVolume(hPart,NULL,NULL,NULL,NULL) != ERROR_SUCCESS  有点不对  都不能编译过去
  麻烦给指点下     \(^o^)/~  
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 nx427 的回复:
引用 2 楼 guopeixin 的回复:
有个方法比较好,你直接用FindFirstStore以及FindNextStore把你的那个store给遍历出来

? 谢谢你? 我是想格式化NK的bin分区
HANDLE hDisk,hPart;
// STOREINFO storeinfo;
? ? hDisk = OpenStore(TEXT("FlashDr"));
if(hDisk == INVALID_HANDLE_VALUE)
{
RETAILMSG(1, (L"open store fail\r\n"));
RETAILMSG(1, (TEXT("err: %d\r\n"),GetLastError()));
}
hPart = OpenPartition(hDisk,L"part00");
if(hPart == INVALID_HANDLE_VALUE)
{
RETAILMSG(1, (L"open part fail\r\n"));
}
CloseHandle(hDisk);
RETAILMSG(1, (L"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\r\n"));

DismountPartition(hPart);
if(FormatVolume(hPart,NULL,NULL,NULL,NULL) != ERROR_SUCCESS)
{
RETAILMSG(1, (L"```````````````````````````\r\n"));
return;
}
CloseHandle(hPart);
? 这里面的打开可以了? 但是格式化的函数? FormatVolume(hPart,NULL,NULL,NULL,NULL) != ERROR_SUCCESS? 有点不对? 都不能编译过去
? 麻烦给指点下? ? \(^o^)/~?


FormatVolume的参数不对吧。
你可以换一种思路来进行格式化,擦出dbr,重新mount分区就ok了,呵呵,这个方法比较简单
如果快驱动上只有一个分区的话,直接干掉mbr,重新加载块驱动就ok了
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 guopeixin 的回复:
FormatVolume的参数不对吧。
你可以换一种思路来进行格式化,擦出dbr,重新mount分区就ok了,呵呵,这个方法比较简单
如果快驱动上只有一个分区的话,直接干掉mbr,重新加载块驱动就ok了

\(^o^)/~
  你好  擦除DbR ?  这个不怎么懂  现在还是个菜鸟  我的块驱动上面有3个分区  1bin 2个fat
整了个  应用程序升级NK的  现在就是想格式化掉  bin分区 从新写个NK  一直都整不懂  一直用这个函数FMD_EraseBlock()擦除的 现在感觉好像是分区的问题  
  希望给指点下    谢谢   
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
如果是你是想格式化掉bin分区的话,就直接按照你以前的思路FMD_EraseBlock()就可以了以,如果下面有binfs的话,直接掉bootpart中的接口也行
呵呵,俺也是菜鸟
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 guopeixin 的回复:
如果是你是想格式化掉bin分区的话,就直接按照你以前的思路FMD_EraseBlock()就可以了以,如果下面有binfs的话,直接掉bootpart中的接口也行
呵呵,俺也是菜鸟

⊙﹏⊙
BOOL FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize, PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned)
{

#if 1
        volatile LPBYTE pReadBuffer;
        volatile LPBYTE pWriteBuffer;
//        static volatile
        pflReadWriteInput pBufMsg_Input = (pflReadWriteInput)pInBuf;
//        static volatile
        pflReadWriteOutput pbufMsg_Output = (pflReadWriteOutput)pOutBuf;

    switch(dwIoControlCode)
        {
                case IOCTL_FMD_READ:
                        pReadBuffer = (LPBYTE)MapPtrToProcess(pbufMsg_Output->pSectorBuff,GetOwnerProcess());
                        Sleep(1);
                        return FMD_ReadSector(pBufMsg_Input->startSectorAddr, pReadBuffer, pbufMsg_Output->pSectorInfoBuff, 1);
                case IOCTL_FMD_ERASE:
                        return FMD_EraseBlock(pBufMsg_Input->blockID);
                case IOCTL_FMD_WRITE:
                        pWriteBuffer = (LPBYTE)MapPtrToProcess(pBufMsg_Input->pSectorBuff,GetOwnerProcess());
                        Sleep(1);
                        return FMD_WriteSector(pBufMsg_Input->startSectorAddr, pWriteBuffer, pbufMsg_Output->pSectorInfoBuff, 1);
                case IOCTL_FMD_GET_STATUS:
                        if(FMD_GetBlockStatus(pBufMsg_Input->blockID) != BLOCK_STATUS_BAD)
                                return FALSE;
                case IOCTL_FMD_SET_STATUS:
                        return FMD_SetBlockStatus(pBufMsg_Input->blockID, BLOCK_STATUS_BAD);
                default:
                        DEBUGMSG(1, (L"FMD_OEMIoControl: unrecognized IOCTL (0x%x)\r\n",dwIoControlCode));
                        return FALSE;
        }
#endif

    return(TRUE);
}
这个是我flash驱动中加的代码  FMD_EraseBlock() 完之后 写进的东西也对 , 就是系统不能起来 用的是K9F1G08nandflash  我感觉好像是把分区信息也格掉了 现在这个问题困扰我好长时间了
  写EBOOT LOGO 等都没有问题  所以感觉是分区的 问题
%>_<%
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
想确认两个问题:
1. 你在哪里执行你那些擦除以及写入的代码?
2. 你的os是直接放到flash上还是通过bootpart的接口

--------------------------------
能不能不你那部分代码粘贴出来,或者详细描述一下
--------------------------------
呵呵,俺也是想好好学习一下,呵呵
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

10
 
学习~~

编译不过去,报啥错
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

11
 
为什么要先格式化一遍?写的时候不就是每块先擦再写吗?
做好一个和你的NK分区一样大的文件,然后从头写到尾不就行了?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 codewarrior 的回复:
为什么要先格式化一遍?写的时候不就是每块先擦再写吗?
做好一个和你的NK分区一样大的文件,然后从头写到尾不就行了?

下面是我应用程序中操作NANDFLASH的代码  检查 擦 写 设置 操作   麻烦给指点下  ⊙﹏⊙ 谢谢  
        for(j=0 ;j         {
                for(;;)//
                {
                        if(pBufMsg1->blockID > 15)     //  CKECK NK BLOCK
                        {
                                if(DeviceIoControl(hFirm,
                                   IOCTL_FMD_GET_STATUS,
                                           (PBYTE)pBufMsg1,
                                         sizeof(pBufMsg1),
                                       NULL,
                                       0,
                                           (LPDWORD)firstcom,
                                       NULL) == TRUE)
                                {
                                        RETAILMSG(1, (L"~~~~~~~~~~~~~ bad block %d ~~~~~~~~~~\r\n",pBufMsg1->blockID));
                                    pBufMsg1->blockID += 1;
                                    continue;
                                }
//                                else
//                                        break;
                        }
//.............. erase block ...............
                    if(DeviceIoControl(hFirm,
                                   IOCTL_FMD_ERASE,
                                           (PBYTE)pBufMsg1,
                                         sizeof(pBufMsg1),
                                       NULL,
                                       0,
                                           (LPDWORD)firstcom,
                                       NULL) == FALSE)
                        {
                                RETAILMSG(1, (TEXT(" ERROR: EraseBlock[%d] \r\n"), pBufMsg1->blockID));
                        }
//............. get the flash status ...............
            if(DeviceIoControl(hFirm,
                                   IOCTL_FMD_GET_STATUS,
                                           (PBYTE)pBufMsg1,
                                         sizeof(pBufMsg1),
                                       NULL,
                                       0,
                                           (LPDWORD)firstcom,
                                       NULL) != TRUE)
                        {
                            break;
                        }

                        pBufMsg1->blockID += 1;
                }
//..........................
                pBufMsg1->startSectorAddr = (pBufMsg1->blockID)*64;
                if(dwNumSector > 64)
                {
                        dwSectorOFBlock = 64;
                }
                else
                        dwSectorOFBlock = dwNumSector;
//............operate a block 64 sector.................
            for(i=0 ;i                 {
                    memset(pBufMsg1->pSectorBuff ,0 ,2048);
                        memset(pBufMsg4->pSectorBuff ,0 ,2048);
                    BOOL ret = ReadFile(hFile ,(LPVOID)pBufMsg1->pSectorBuff ,2048 ,&k ,NULL);
                    if(!ret)
                        {
                            RETAILMSG(1, (L" read the file is failure !\r\n"));
                                break;
                        }
                        if(DeviceIoControl(hFirm,
                                                   IOCTL_FMD_WRITE,
                                                   (PBYTE)pBufMsg1,
                                                     sizeof(pBufMsg1),
                                                   (PBYTE)pBufMsg2,
                                                   sizeof(pBufMsg2),
                                                   (LPDWORD)firstcom,
                                                   NULL) == FALSE)
                        {
                            RETAILMSG(1, (L" write the file is failure .....%d !\r\n",pBufMsg1->startSectorAddr));
                                Sleep(3);
                        }
                        Sleep(1);
                        pBufMsg3->startSectorAddr = pBufMsg1->startSectorAddr;
                        if(DeviceIoControl(hFirm,
                                   IOCTL_FMD_READ,
                                   (PBYTE)pBufMsg3,
                                     sizeof(pBufMsg3),
                                   (PBYTE)pBufMsg4,
                                   sizeof(pBufMsg4),
                                   (LPDWORD)firstcom,
                                   NULL) == FALSE)
                        {
                                RETAILMSG(1, (L"~~~~~~ read the file is failure %d !\r\n",pBufMsg1->startSectorAddr));
                                Sleep(3);
                        }
                        Sleep(1);
                        for(m=0 ;m<2048 ;m++)
                        {
                                if(pBufMsg1->pSectorBuff[m] != pBufMsg4->pSectorBuff[m])
                                {
                                        RETAILMSG(1, (L" * \r\n"));
                                        SetDlgItemText(IDC_EDIT2,_T("...operate Flash failure..."));
                                        MessageBox(_T(" please write the file to flash once "),NULL,MB_YESNO);
                                        return;
                                }
                        }
                        ((CProgressCtrl *)GetDlgItem(IDC_PROGRESS1))->StepIt();
                        pBufMsg1->startSectorAddr += 1;
                }
//...............set bad block....................
                if(pBufMsg1->blockID < 8)
                {
                        Ret = DeviceIoControl(hFirm,
                                 IOCTL_FMD_SET_STATUS,
                                         (PBYTE)pBufMsg1,
                                       sizeof(pBufMsg1),
                                     NULL,
                                     0,
                                         (LPDWORD)firstcom,
                                     NULL);
            if(Ret != TRUE)
                        {
                        RETAILMSG(1, (L"~~~~~~~~~~~~~bad block can not is set~~~~~~~~~~\r\n"));
                                return;
                        }
            RETAILMSG(1, (L"~~~~~~~~~~~~~bad block %d is set~~~~~~~~~~\r\n",pBufMsg1->blockID));
                }
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

13
 
看你的程序,你应该是想在ap中去升级nk,是这样的么?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

14
 

  但是  升级NK 之后就不能启动wince了
   这个问题整我的很苦恼  ⊙﹏⊙  能帮看看 是怎么回事嘛 ~  谢谢  
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 nx427 的回复:

? 但是? 升级NK 之后就不能启动wince了
? 这个问题整我的很苦恼? ⊙﹏⊙? 能帮看看 是怎么回事嘛 ~  谢谢  

在ap中升级nk流程上可以做的通,以前我们也做过
确认个问题,你的os是直接放到块驱动上,还是通过binfs放的?
如果是前者,直接通过你上面的方式进行操作没问题,
如果是后者,就要改改了
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

16
 
放在binFS中   需要怎么改下  \(^o^)/~  麻烦给指点下 谢谢
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 nx427 的回复:
放在binFS中? 需要怎么改下? \(^o^)/~? 麻烦给指点下 谢谢

我意思是说你现在eboot下的升级方式是怎么样的?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

18
 
  结账了  
     在此谢谢 guopeixin   thank you !
问题我解决了  是nand flash分区块中 的附加信息 我写错误 导致的  
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

19
 
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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