2011-04-08 驱动的写法

先规定驱动接口文件的特定格式:

DRV_XXX.c

DEV_XXX.c

drv_XXX_i.h

1.drv_XXX_i.h是对外接口.

 

2

DRV_XXX.c里面都是以下面的函数接口:

(开放在magic.c里面)

{                                     

     &DRV_DTOS_MInit,
     &DRV_DTOS_MExit,
     &DRV_DTOS_MOpen,
     &DRV_DTOS_MClose,
     &DRV_DTOS_MRead,
     &DRV_DTOS_MWrite,
     &DRV_DTOS_MIoctrl

}

DRV_DTOS_MInit是最先会被执行的函数(在结构体中的解释: //在install/reset模块时使用,若模块需要后台任务,可以在此启动)

DRV_DTOS_MIoctrl函数应该是在 esDEV_Plugin("//drv//dtos.drv", 0, 0, 1);时调用,并有一个DRV_CMD_PLUGIN命令进来(细节不管).

而通常在对DRV_CMD_PLUGIN命令进行处理时要用esDEV_DevReg("USERDTOS", "DTOS", &dtos_dev_ops, 0);将驱动注册,以便在程序中使用.

 

3

DEV_XXX.c

中也是下面的函数接口:

__dev_devop_t dtos_dev_ops =
{
    DEV_DTOS_Open,
    DEV_DTOS_Close,
    DEV_DTOS_Read,
    DEV_DTOS_Write,
    DEV_DTOS_Ioctrl
};
供上面esDEV_DevReg作参数用.

这样,在程序中,用下面方法:

{
  ES_FILE *p_tpfile;
  p_tpfile = eLIBs_fopen("b://USERDTOS//DTOS", "r+");
  if( !p_tpfile )
  {
   __err(" open dtos driver error /n");
   return EPDK_FAIL;
  }

  eLIBs_fioctrl(p_tpfile, DRV_DTOS_CMD_INIT, 0, NULL);
  eLIBs_fclose(p_tpfile);
 }
就可操作DEV_DTOS_Ioctrl函数了(上面的eLIBs_fioctrl(p_tpfile, DRV_DTOS_CMD_INIT, 0, NULL),肯定调用DEV_DTOS_Ioctrl来对DRV_DTOS_CMD_INIT命令进行处理).

真正驱动的初始化就是在DEV_DTOS_Ioctrl对DRV_DTOS_CMD_INIT命令进行处理时实现.

 

上面的结构就是为了封装,但个人认为过于繁琐,可能为了与系统其它方面兼容有关.

你可能感兴趣的:(2011-04-08 驱动的写法)