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命令進行處理時實現.

 

上面的結構就是爲了封裝,但個人認爲過於繁瑣,可能爲了與系統其它方面兼容有關.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章