5490|5

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于wince下 KernelIoControl [复制链接]

想问下,下面这个KernelIoControl调用什么意思啊,查了下pb下的解释看不怎么明白啊

#define IOCTL_POCKETSTOREII_CMD        CTL_CODE(FILE_DEVICE_HAL, 4080, METHOD_BUFFERED, FILE_ANY_ACCESS)

typedef struct {
        UINT            nCtrlCode;
        UINT            nVbn;
        UINT            nVpn;
        Buffer          *pBuf;
        UINT            nSrcVpn;
        UINT            nDesVpn;
        BOOL32         bCleanCheck;
        BUFType        eType;
} VFLPacket;
  
VFLPacket   stPacket;

  stPacket.nCtrlCode  = PM_HAL_VFL_INIT;
  。。。。。。。。。 stPacket的 一些初始化。
   
        KernelIoControl(IOCTL_POCKETSTOREII_CMD,  /* Io Control Code */
                        &stPacket,                /* Input buffer (Additional Control Code) */
                        sizeof(VFLPacket),        /* Size of Input buffer */
                        NULL,                     /* Output buffer */
                        0,                        /* Size of Output buffer */
                        &nResult);                /* Error Return */

之后还有一些
stPacket.nCtrlCode  = PM_HAL_VFL_BUF_GET;
        。。。。。。。。。。 stPacket的 一些设置。

  KernelIoControl(IOCTL_POCKETSTOREII_CMD,  /* Io Control Code */
                        &stPacket,                /* Input buffer (Additional Control Code) */
                        sizeof(VFLPacket),        /* Size of Input buffer */
                        NULL,                     /* Output buffer */
                        0,                        /* Size of Output buffer */
                        &nResult);                /* Error Return */

请指教啊。谢谢拉。
此帖出自WindowsCE论坛

最新回复

结了的帖子就不能刷新到讨论里的首页了啊?   详情 回复 发表于 2008-8-4 10:24
点赞 关注
 

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
应用层打开一个流驱动后,通过KernelIoControl向对应设备发送控制指令。

CTL_CODE就是控制指令,比如配置,读,写,修改,应答等等,每个设备有不同的指令。
input buffer/output buffer就是传给设备驱动的2个buffer地址,一个输入一个输出。
size of分别就是输入输出buffer的大小了。

你不理解的是这个函数的用途?还是具体驱动的控制码呢?
此帖出自WindowsCE论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢shuiyan的解释,函数用途算是明白了。

我是在看eboot代码,BP_Init->FMD_Init->WMR_Init->VFL_Init中有以上代码。(VFL层是virtual flash layer)
可是这里没有打开某个流驱动啊,流驱动加载应该没有开始吧还。

现在是,还没有找到这个iocontrol的对象?不知道它到底对哪个东东实现了什么?
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
这样理解:这个函数用来给应用层(Application)与核心(Kernel)层进行交互。
此帖出自WindowsCE论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
虽然结了帖子,不过有东东还是想过来讨论下。

shuiyan说的,是不是deviceIoControl啊。
先用createfile打开设备如XXX,再调用deviceIoControl对其进行读写等io操作,这个io操作最终会在该设备的 XXX_IoCtrl()中实现相应的操作。

这个kernelIoControl似乎是不需要打开设备的操作的,比如在设置中断时,关联逻辑中断号与物理中断号,
        if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &Irq, sizeof(UINT32), &gIntrIIC, sizeof(UINT32), NULL))
再通过在 const OAL_IOCTL_HANDLER g_oalIoCtlTable[]中找到对应的handler进行处理。
。。。。
{ IOCTL_HAL_TRANSLATE_IRQ,                  0,  OALIoCtlHalRequestSysIntr   },
{ IOCTL_HAL_REQUEST_SYSINTR,                0,  OALIoCtlHalRequestSysIntr   },
{ IOCTL_HAL_RELEASE_SYSINTR,                0,  OALIoCtlHalReleaseSysIntr   },
。。。。。
这个OALIoCtlHalRequestSysIntr   应该是内核实现的吧?

这个是这两天看到的,不知道理解的对不对。

此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

6
 
结了的帖子就不能刷新到讨论里的首页了啊?

此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表