阅读:3558回复:21
NAND 驱动已经挂载在文件系统下后,如何在应用程序中调用FMD_OEMIoControl函数
各位大侠,知道的请指点一下,谢谢。
|
|
沙发#
发布于:2007-09-13 17:21
定义个IOCTL的值,例如
#define IOCTL_DISK_ACCESS_FMDOEMIOCTL \ CTL_CODE(IOCTL_DISK_BASE, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) 在你的FMD_OEMIoControl()针对这个值处理, 应用程序调用DeviceIoControl(...)函数. |
|
板凳#
发布于:2007-09-14 09:23
谢谢zhengshijie 的回复。
你所说的我知道,问题在于我无法创建DSK的设备,那么DeviceIoControl根本就无法调用了 NandHandle = CreateFile(L"DSK1:", GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH, NULL); 此函数调用后无法创建DSK设备,不知道咋回事啊? 大家有没有碰到过这样的问题,非常感谢 |
|
地板#
发布于:2007-09-14 10:46
Re:NAND 驱动已经挂载在文件系统下后,如何在应用程序中调用FMD_OEMIoCont
HANDLE hNand;hNand = CreateFile( TEXT("\\NAND FLASH\\Vol:"), GENERIC_WRITE|GENERIC_READ, 0, // exclusive access NULL, // no security attrs OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); "NAND FLASH" 可以换成你在Windows CE下看到的名字,CE5.0 就是NAND FLASH |
|
地下室#
发布于:2007-09-14 11:17
谢谢shaohui99 ,你这种方式是创建一个文件,得到是文件句柄,我试试看。
CE代码中有用DSK的,但是我老是不成功,莫名其妙。 郁闷,那个大侠知道。 |
|
5楼#
发布于:2007-09-15 18:24
CreateFile的用法有问题:
第三个参数得用:FILE_SHARE_READ|FILE_SHARE_WRITE, attribute得为0,它不是普通文件,不能用这些东西. |
|
|
6楼#
发布于:2007-09-15 20:41
我的方式 是AP直接把FLASHDRV.DLL加载近来,直接呼叫各子程序
|
|
7楼#
发布于:2007-09-19 13:15
; HIVE BOOT SECTION
; @CESYSGEN IF CE_MODULES_SDNPCID IF BSP_SMFLASH_WB910 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MSFlash] "Profile"="FlashDisk" "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}" "Order"=dword:0 ;"FriendlyName"="MSFLASH Driver" "Dll"="smflash.dll" "Prefix"="DSK" "FriendlyName"="WB910_NANDFLASH" "BmlVolumeId"=dword:0 "BmlPartitionId"=dword:8 "Index"=dword:7 [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDisk] "Name"="WB910NAND " "Folder"="NANDFLASH" "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] "Flags"=dword:00000024 "Dll"="fatfsd.dll" "Paging"=dword:1 "EnableCacheWarm"=dword:0 "CacheSize"=dword:0 ;"MountAsBootable"=dword:1 ;;have changed. add ;"MountAsRoot"=dword:1 [HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MSFlash] "DriverPath"="Drivers\\BuiltIn\\MSFlash" ; LoadFlags 0x01 == load synchronously "LoadFlags"=dword:1 "Order"=dword:0 "BootPhase"=dword:0 ENDIF BSP_SMFLASH_WB910 ; @CESYSGEN ENDIF CE_MODULES_SDNPCID ; END HIVE BOOT SECTION 如果注册表的设置如上面所示,我该将CreatFile()的第一个参数设置成什么? 因为CETK测试的时候有个参数 /disk DSKx: 需要设置,但是始终设置不对,不管设置成:NANDFLASH还是DSK7都不行。 谢谢。。 |
|
|
8楼#
发布于:2007-09-19 13:18
那位知道CETK下面Flash Memory Read/Write and Performance Test
用来测试NAND Flash的时候,命令行参数怎么设置? 还望指点,谢谢。 |
|
|
9楼#
发布于:2007-09-19 15:15
把创建的代码修改了一下,当然也修改了属性,但是还是无法创建成功。
从DSK0 ~ DSK9,都没有戏。 for ( i = 1; i <= 9; i++ ) { // Create device name _stprintf( szTemp, TEXT("DSK%u:"), i ); // Attempt to open the device hDiskFile = CreateFile(szTemp, // file to open GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); if (hDiskFile == INVALID_HANDLE_VALUE) { //RETAILMSG(1,(_T("Could not open I2C device\n"))); } else { RETAILMSG(1,(_T("Succeed in creating DISK device\n"))); break; } } |
|
10楼#
发布于:2007-09-19 15:41
它好像不是DSK设备,不能用DSk来打开。
我也尝试过不行的。 在存储管理里面他前面根本就不是DSK. 不像SD卡前面就是DSK1或者什么的。 |
|
|
11楼#
发布于:2007-09-19 15:47
但是生成的DLL文件,都是以DSK为前缀的,并且在注册表中,prefix也是DSK。
真是郁闷ing |
|
12楼#
发布于:2007-09-20 11:43
Re:NAND 驱动已经挂载在文件系统下后,如何在应用程序中调用FMD_OEMIoCont
你试过我的方法没有?怎么不试一下?正确的方法居然没人认识 |
|
13楼#
发布于:2007-09-20 20:33
兄弟,你好好看一下CreateFile每一个参数的含义再做,起码你得与别的程序共享啊,你想想是不是
|
|
|
14楼#
发布于:2007-09-21 09:24
Re:NAND 驱动已经挂载在文件系统下后,如何在应用程序中调用FMD_OEMIoCont
共不共享这个问题不是重点,如果是自己的系统并且确定其他的程序没有同时调用它就可以了。何况你调用完了就关闭它。问题的重点是调用 FMD_OEMIoControl 的方法。 |
|
15楼#
发布于:2007-09-21 09:29
Re:NAND 驱动已经挂载在文件系统下后,如何在应用程序中调用FMD_OEMIoCont
更重要的是,如果楼主想通过FMD_OEMIoControl 往NAND FLASH中写一些自己的数据或者更新OS,在这个过程中不允许其他的程序再调用 FMD_OEMIoControl ,以免打断烧写流程。 |
|
16楼#
发布于:2007-09-21 09:58
我的方法是把nand驱动重新以别的prefix再加载一次。比如FLY,只要注册表里面加载了。再CreateFile肯定是可以的。
|
|
|
17楼#
发布于:2007-09-21 10:37
HANDLE hNand;
hNand = CreateFile( TEXT("\\NAND FLASH\\Vol:"), GENERIC_WRITE|GENERIC_READ, 0, // exclusive access NULL, // no security attrs OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); 谢谢shaohui99 ,试了你的方法,在调用DeviceIoControl时,在FAT层就返回来了。 还没有到达FAL这一层。 |
|
18楼#
发布于:2007-09-21 10:56
shuiii ,你的方法我一直在尝试,老是出现错误,加载DLL时,出现以下怪错误。
50841 PID:400002 TID:de0002 nand_flash.DLL DLL_PROCESS_ATTACH 50846 PID:400002 TID:de0002 Kernel DLL 'fmd.dll' needs thread creation/deletion notification 50854 PID:400002 TID:de0002 DEVICE!CreateDevice: illegal entry point combination in driver DLL 'nad.dll' 50859 PID:400002 TID:de0002 NAD.DLL DLL_PROCESS_DETACH 50873 PID:400002 TID:de0002 CreateDevice: creation of type 'NAD', index 1, lib 'nad.dll' returning 0x00000000, error code 1 50880 PID:400002 TID:de0002 DEVICE!I_ActivateDeviceEx: couldn't activate: prefix NAD, index 1, dll nad.dll, context 0x1 |
|
19楼#
发布于:2007-09-21 12:55
我是参照流驱动重新写的nand驱动,里面加了一些标准的API。
|
|
|
上一页
下一页