天天看點

作業系統的完整代碼——YCOS驅動程式

YCOS驅動程式

    YCOS是微核心的,它的大部分功能可以由外部驅動程式提供,隻有少數幾個功能由核心檔案ycker.cpp提供。

    下面介紹如何編寫、安裝、調用驅動程式。

1. 設計驅動程式

#define YCORG -1          //該設定使編譯器生成頭部為YCEXE結構的可執行檔案
#include "ycio.cpp"       //提供字首為ycio_的函數和C/C++标準函數

struct drvCLASS     //本驅動程式的接口結構及其實作
{
        virtual char *stdcall nice_day(int aa)
          {
              printf("%d\n",aa);
              return "It is a nice day!";
          }
        virtual char *stdcall hello()
          {
              return "Hello wordl!";
          }
};

drvCLASS DRV;   //聲明接口對象
void main(void **pObj)
{
    *pObj = &DRV;   //将接口對象DRV的位址傳給調用者
}
           

                        C/C++代碼檔案 drv.cpp

2. 安裝驅動程式

#define YCORG -1          //該設定使編譯器生成頭部為YCEXE結構的可執行檔案
#include "ycio.cpp"

void main()
{
    ycfsCLASS *YCFS;
    ycio_get_driver(&YCFS,"ycfs");  //擷取檔案管理接口指針
    byte *codeptr = YCFS->get_file_code("drv.sys");  //獲得drv.sys檔案的代碼
    int rv = ycio_set_driver(codeptr, "nice");  //安裝驅動程式(取名為nice)到核心
    if(rv == 0)   printf("\ndrv.sys installed.\n");   //安裝成功
    else          printf("\ndrv.sys: has been installed before! - %d\n",rv);
}
           

                        C/C++代碼檔案 dra.cpp

    在YCOS提示符下,鍵入dra後,驅動程式便被安裝到核心了,應用程式就可以通過名字

“nice”獲得驅動程式drv.cpp的函數接口指針。

3. 調用驅動程式

#define YCORG -1          //該設定使編譯器生成頭部為YCEXE結構的可執行檔案
#include "ycio.cpp"

struct drvCLASS   //drv.cpp的接口結構
{
        virtual char *stdcall nice_day(int aa);
        virtual char *stdcall hello();
};

void main()
{
    drvCLASS  *DRV;
    ycio_get_driver(&DRV,"nice");  //通過名字nice獲得驅動程式接口指針
    if(!DRV)
      {
        printf("\nError: drv.sys not installed! Run dra.exe first.\n");
        return;
      }
    printf("\nDriver: drv.sys\n");
    printf("%s\n",DRV->nice_day(2019));  //調用驅動程式drv.cpp的nice_day()函數
    printf("%s\n",DRV->hello());         //調用驅動程式drv.cpp的hello()函數
}
           

                        C/C++代碼檔案 drb.cpp

在YCOS提示符下,鍵入drb,将顯示下列文字:

    Error: drv.sys not installed! Run dra.exe first.

    2019

    It is a nice day!

    Hello wordl!

繼續閱讀