《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于VxBus的設備驅動開發
基于VxBus的設備驅動開發
來源:微型機與應用2010年第18期
趙永鋼, 韓國義
(哈爾濱威克科技股份有限公司, 黑龍江 哈爾濱150090)
摘要: 介紹了在VxWorks下,基于VxBus的設備驅動程序的開發。結合PCI2040,講述了VxBus原理、設備驅動開發步驟及具體實現過程。
Abstract:
Key words :

摘   要: 介紹了在VxWorks下,基于VxBus設備驅動程序的開發。結合PCI2040,講述了VxBus原理、設備驅動開發步驟及具體實現過程。
關鍵詞: VxWorks; VxBus; 設備驅動; BSP; PCI2040

    VxBus是風河公司新的設備驅動程序架構,是VxWorks新增的特性,它是在VxWorks6.2及以后版本被增加到VxWorks中的。在以前的版本中,驅動程序并沒有和工程配置集成到一起,如果要配置設備驅動,就要通過修改BSP目錄下的config.h和syslib.c文件來完成。而基于VxBus架構模型的好處是允許驅動的集成和配置在Workbench工程中完成。這就意味著在Workbench環境下,每個驅動程序都能通過可視化環境進行配置,都能夠按要求添加或刪除設備。本文結合基于PCI2040數據采集卡驅動的開發過程[1],分析了VxBus架構下驅動的設計實現。
1 VxBus簡介
 VxBus是指在VxWorks中用于支持設備驅動的特有的架構,這種架構包含對minimal BSP的支持。它包括以下功能:①允許設備驅動匹配對應設備;②提供驅動程序訪問硬件的機制;③軟件其他部分訪問設備功能;④在VxWorks系統中,實現設備驅動的模塊化。VxBus在總線控制器驅動程序服務的支持下,能在總線上發現設備,并執行一些初始化工作,使驅動與硬件設備之間正常的通訊。
 圖1是VxBus 在整個系統中的位置示意圖。從圖1中可以看到,VxBus起到了輔助總線的作用,提供了對總線控制驅動的支持。

    在VxWorks6.2版本發布前,設備驅動并不能被集成到VxWorks工程配置當中,為了添加或移出設備驅動,需要有豐富的BSP和驅動開發相關的知識[2]。并且在驅動被添加或移出時要去做一些管理VxWorks 工程的額外的工作。作為VxWorks系統組件的一部分,VxBus消除了上面遇到的一些難題,各種驅動和支持組件的添加與刪除完全可以在Workbench工程中進行,而不需要BSP和驅動相關的知識,也不會在添加、刪除驅動時增加管理VxWorks工程的額外工作。因此大大方便了BSP的開發。
2 硬件介紹
    TI公司推出的PCI2040是一款用于實現PCI局部總線與DSP之間無縫鏈接的專用芯片。在VxWorks實時操作系統環境下實現主機與DSP的通訊,系統利用PCI2040實現TMS320VC5410與主機的通訊。由于PCI2040是TI的配套專用芯片,硬件級的連接比較簡單,將對應的引腳連接即可。需要注意的是,未用的輸入信號線需要通過上拉電阻上拉至有效邏輯電平。TMS320VC5410的MCBSP0與TLC2548 連接,實現8路12位A/D數據的采集。TMS320VC5410將采集到的數據通過PCI2040傳輸到主機上,數據在主機上得到進一步的處理。硬件連接框圖如圖2所示。


3 驅動開發
    基于VxBus架構下PCI2040設備驅動的開發主要包括設備的初始化、設備控制以及設備驅動如何以組件形式添加到Workbench配置界面中。下面分步介紹它的實現。
3.1設備驅動初始化
    設備的初始化,包含在BSP的初始化過程中[3],主要分三個階段,如圖3所示。


3.1.1內核預初始化階段
 系統上電啟動,CPU在上電時跳轉到一個指定的地址 ,開始執行指令,初始化內存和CPU,然后是VxWorks 的初始化處理。
 在VxWorks內核預初始化早期,BSP的sysHwInit( )函數被執行[4],在這個函數中,設備驅動初始化工作第一步被執行。sysHwInit( )函數執行一些早期的初始化,調用hardWareInterFaceInit( )函數,執行初始化硬件內存分配機制,這步允許在系統內存池初始化之前,限制為設備驅動分配內存,這個函數接著調用hardWareInterFaceBusInit( ),在hardWareInterFaceBusInit( )函數中完成所有設備驅動和模塊的注冊工作。PCI2040的注冊函數是vxbPci2040Register()。vxbPci2040Register()通過數據結構,向系統注冊一些設備初始化函數。其中涉及到三個數據結構:
LOCAL struct drvBusFuncs PciFuncs =
        {
        Pci2040InstInit,    /* devInstanceInit */
        Pci2040InstInit2,    /* devInstanceInit2 */
        Pci204InstConnect    /* devConnect */
        }
       在這個結構中,包含了初始化階段要調用的函數。下面的初始化過程會用到這些函數。
LOCAL struct vxbDeviceMethod Pci2040Methods[] =
       {
       DEVMETHOD(ReadHPID,    PCI2040ReadHPID),
       DEVMETHOD(WriteHPID,    PCI2040WriteHPID),
       DEVMETHOD(ReadHPIA,    PCI2040ReadHPIA),
       DEVMETHOD(WriteHPIA,    PCI2040WriteHPIA),
       DEVMETHOD(ReadHPIC,    PCI2040ReadHPIC),
       DEVMETHOD(WriteHPIC,    PCI2040WriteHPIC),
       DEVMETHOD(ReadCSR,    PCI2040ReadCSR),
       DEVMETHOD(WriteCSR,    PCI2040WriteCSR),
       { 0, 0 }
       }  
     這個結構提供了應用軟件操作硬件的一些函數及方法。
        LOCAL struct vxbPciRegister Pci2040DevPciRegistration =
        {
              {
              NULL,                        /* pNext */
              VXB_DEVID_DEVICE,        /* devID */
        VXB_BUSID_PCI,            /* busID = PCI */
              VXB_VER_4_0_0,                /* vxbVersion */
           LNPCI_NAME,                    /* drvName */
           &Pci2040Funcs,            /* 總線驅動函數*/
           Pci2040Methods,            /* 設備方法結構 */
           Pci2040Probe,                    /* 設備探測函數 */
           Pci2040ParamDefaults        /* 參數*/
           },
        NELEMENTS(PciPci204DevIDList),
        PciPci204DevIDList                /*設備資源列表*/
      };
  最后這個結構在vxbPci2040Registe()中被使用。這個結構包括幾個驅動的初始化入口,其中Pci2040Probe()是PCI2040采集卡的硬件探測函數,該函數在VxBus初始化過程中檢測采集卡的數量,當檢測到采集卡時,將采集卡與驅動結合,形成設備的一個實例,以便應用程序使用。Pci204InstanceInit( )函數在VxBus初始化的第一階段被調用, Pci204InstanceInit( )函數只是簡單地確保設備的中斷被禁止。
    當所有驅動在VxWorks注冊之后,hardWareInterFaceBusInit( )和hardWareInterFaceInit( ) 函數返回,sysHwInit( ) 完成非VxBus 驅動的初始化并返回。sysHwInit( ) 函數返回后,VxWorks內核被初始化。
3.1.2 內核自檢
    在這個階段,內核在sysHwInit2( )中執行,BSP調用Pci2040InstanceInit2( )函數[5]。在這個函數中,建立系統內存到設備空間的映射。關鍵部分代碼如下:
LOCAL void Pci204InstInit2(VXB_DEVICE_ID pDev)
  {……
      for (i = 0; i < VXB_MAXBARS; i++)
          {
          if (pDev->regBaseFlags[i] == VXB_REG_IO)
              break;
          }
         if (i == VXB_MAXBARS)
         return;
    pDrvCtrl->Pci2040Bar = pDev->pRegBase[i];
      vxbRegMap (pDev, i, &pDrvCtrl->Pci2040Handle);
                            //設備I/O映射到系統內存
      ……
      }
    此時,完成內核服務初始化,并可以被驅動訪問。但是,中間層的服務仍然無效。
3.1.3 應用程序初始化驅動部分
  在devInstanceInit2( )函數最后,創建用戶的運行任務,并完成設備驅動的初始化。在這個階段,Pci2040InstanceConnect( )函數被調用,完成最后的初始化工作,在這個函數中,主要是建立中斷與中斷服務程序的連接。
 至此,設備驅動的初始化完成。
3.2驅動程序的配置
 采用VxBus驅動的一個主要優點是:設備的驅動程序可以被看成VxWorks 系統的一個組件,通過集成的Workbench開發環境來配置設備驅動。為了實現這一功能,開發的驅動需要增加一些額外的擴展文件。標準VxWorks設備驅動有一個最小的文件集,對于大多數VxWorks設備驅動,最小的設備驅動集要求有6個單獨的文件[6]。PCI2040數據采集卡需要有以下文件:
    · 一個驅動源文件PCI2040.c,執行驅動運行邏輯,包括PCI2040驅動的實現代碼。
    · 一個組件描述文件PCI2040.cdf,允許集成驅動到VxWorks開發工具Workbench當中。
    · 一個PCI2040.dc文件,提供驅動注冊函數原型。
    · 一個PCI2040.dr文件,提供一個調用注冊函數的C語言代碼段。
    · 一個readme文件 ,提供版本信息。
    · 一個makefile 文件,提供建立驅動的編譯規則。
    當上述文件在workbench環境下進行相應的配置后,PCI2040的設備驅動就會以組件的形式出現在開發工程的Kernel Configuration選項中,可以方便地進行PCI2040驅動配置。
4 應用程序與驅動的通信
    為了使設備和驅動能夠在VxWorks系統中使用,讓應用程序、中間件、VxWorks內核模塊訪問設備,執行一些操作,最基本的方法是在VxWorks中采用VxBus方法來實現硬件設備的訪問。VxBus方法是在驅動中公開一個入口,使VxBus中API函數可以調用這些入口函數。在PCI2040初始化階段,Pci2040Methods結構中注冊的函數就是在驅動中公開的函數,用于對PCI2040的操作。
    例如,通過PCI2040 完成對DSP數據寄存器的訪問
    struct vxbDriverControl ctrl;
    vxbDevMethodRun(DEVMETHOD_CALL(ReadHPID),&ctrl);
    vxbDevMethodRun( )函數夠被用于調用一個指定的驅動方法,這個函數反復查找所有的實例,并檢查每一個,看是否有指定公開申明的方法,如果實例有指定的方法,vxbDevMethodRun( )調用方法函數。
    為了避免重復遍歷在系統上的所有實例,可以用 vxbDevMethodGet( )函數找出驅動函數相對應的驅動方法 ,然后通過下面代碼完成函數調用。
    STATUS (*methodFunc)(VXB_DEVICE_ID devID, void * pArg);
    methodFunc = bDevMethodGet(devID,DEVMETHOD_CALL(ReadHPID));
    if(methodFunc != NULL )
    (*methodFunc)(devID, pArg);
    在PCI2040的數據采集卡中,通常是DSP在采集完數據后,通過中斷通知主機,去讀取數據。下面是中斷服務相關代碼。
void PCI2040Isr()
{ ……
    temp=*(PCI2040. instID.pRegister+0x4); //讀中斷寄存器
    if((tempr&0x1)!=0)               //檢查是否是該實例中斷
    { *(PCI2040. instID.pRegister +0x4)=0x1;
    temp= *(PCI2040. instIDpDspHpicRegister);
    *(PCI2040. instIDpDspHpicRegister)=temp|0x0808;
                              //通知DSP,清除HINT中斷
    semGive(semForPci2040Int);
   }
}
    采用基于VxBus架構來開發PCI2040數據采集卡的驅動,通過擴展文件實現驅動的配置。與簡單的非VxBus
驅動相比,顯然增加了工作量,然而對于基于多個BSP設備的復雜的驅動,VxBus驅動是優于非VxBus驅動的。通過實際運用證明,所開發采集卡的驅動能夠穩定運行,并且能很方便地將該驅動移植到其他的系統。
參考文獻
[1]     高超,郝燕玲,吳潤.VxWorks下網卡驅動程序的開發[J].微計算機信息.2004(9):18-20.
[2]     周啟平,張楊. VxWorks下設備驅動程序及BSP開發指南[M]. 北京.中國電力出版社,2004.
[3]     VxWorks Device Driver Developer′s Guide Wind River Systems, Inc.2007.1,6.6
[4]     VxWorks Device Driver Developer's Guide Volume 2, 6.6. Wind River Systems, Inc.2007.2,6.6
[5]     VxWorks Device Driver Developer's Guide Volume 3,6.6. Wind River Systems, Inc.2007.3,6.6
[6]     BSP Developer's Guide,6.6 Wind River Systems,Inc.2007.
 

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          免费观看成人| 欧美精品 国产精品| 国产婷婷97碰碰久久人人蜜臀| 亚洲午夜在线观看视频在线| 国产欧美日韩精品一区| 欧美日韩第一区日日骚| 国产欧美日韩专区发布| 久久精品主播| 最新中文字幕亚洲| 国产美女精品| 亚洲欧美成人一区二区三区| 欧美日韩视频专区在线播放| 在线观看视频一区二区| 国产三区精品| 亚洲第一免费播放区| 欧美日韩精品一本二本三本| 亚洲激情影院| 亚洲香蕉视频| 国产精品视频网站| 亚洲激情综合| 午夜伦欧美伦电影理论片| 欧美成人精品1314www| 午夜精品福利电影| 亚洲一区二区在线免费观看视频| 99综合在线| 亚洲激情社区| 亚洲午夜小视频| 欧美激情小视频| 国产精品无码专区在线观看| 国产精品v片在线观看不卡| 欧美揉bbbbb揉bbbbb| 亚洲激情专区| 亚洲综合999| 欧美日韩国产精品| 久久综合中文色婷婷| 日韩视频在线播放| 亚洲欧洲一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 久久琪琪电影院| 亚洲麻豆av| 韩国av一区二区三区| 一区二区三区久久久| 一区二区欧美精品| 欧美猛交免费看| 国产伦一区二区三区色一情| 国产亚洲欧美激情| 欧美日韩国产美| 亚洲麻豆一区| 亚洲人成精品久久久久| 99综合在线| 亚洲欧美日本日韩| 久久国产精品久久久久久| 国产精品久久婷婷六月丁香| 韩国福利一区| 亚洲欧美色一区| 极品尤物av久久免费看| 国产亚洲毛片| 国产女人精品视频| 亚洲国产精品毛片| 亚洲精选中文字幕| 久久av红桃一区二区小说| 亚洲国产精品va在线看黑人动漫| 欧美电影免费观看高清完整版| 亚洲欧美精品中文字幕在线| 亚洲欧美成人综合| 久久高清国产| 欧美图区在线视频| 欧美与黑人午夜性猛交久久久| 国产三区二区一区久久| 亚洲欧美综合| 国产欧美精品国产国产专区| 免费久久99精品国产自在现线| 玖玖在线精品| 1769国产精品| 国产精品美腿一区在线看| 另类专区欧美制服同性| 1769国产精品| 99国产成+人+综合+亚洲欧美| 久久高清国产| 欧美激情国产高清| 欧美区在线播放| 欧美韩国日本一区| 国产精品v欧美精品v日韩| 国产精品萝li| 欧美国产视频日韩| 久久久亚洲精品一区二区三区| 欧美日韩成人综合天天影院| 亚洲永久网站| 国产精品美女久久久久久久| 亚洲国产日韩欧美在线图片| 国产精品自在欧美一区| 日韩视频精品| 久久精品一区二区国产| 亚洲精品乱码久久久久久| 欧美久久久久| 99re成人精品视频| 国产精品黄页免费高清在线观看| 欧美精品一区在线观看| 国产精品久久久久国产a级| 国产精品免费区二区三区观看| 欧美高清在线精品一区| 国产一区在线播放| 欧美日本韩国| 亚洲精品一区二区三区四区高清| 欧美欧美全黄| 久久精品国产欧美亚洲人人爽| 国产精品一区久久久| 欧美激情视频网站| 国产精品每日更新在线播放网址| 一区二区三区日韩| 欧美亚洲一区在线| 国产日本欧美一区二区三区在线| 久久久久久夜| 激情亚洲网站| 欧美一区二区三区视频在线观看| 久久久亚洲人| 136国产福利精品导航网址应用| 欧美高清视频免费观看| 国产伦精品免费视频| 一区二区三区**美女毛片| 欧美日韩高清在线一区| 激情亚洲一区二区三区四区| 国产精品亚洲视频| 国产视频亚洲精品| 欧美乱在线观看| 国产亚洲综合在线| 欧美高清视频一区二区三区在线观看| 99在线热播精品免费| 一区二区三区精品久久久| 久久久久久亚洲综合影院红桃| 亚洲影院色在线观看免费| 亚洲中午字幕| 欧美sm极限捆绑bd| 在线不卡a资源高清| 在线亚洲电影| 欧美三级在线视频| 久久精品国产亚洲一区二区| 久久一本综合频道| 亚洲一区图片| 在线亚洲+欧美+日本专区| 亚洲黄一区二区| 激情综合色综合久久| 国产喷白浆一区二区三区| 欧美大片免费看| 中日韩午夜理伦电影免费| 欧美日韩中文字幕精品| 欧美美女福利视频| 欧美午夜电影完整版| 久久成人久久爱| 欧美日韩久久不卡| 久久久久久999| 免费成年人欧美视频| 国产精品视频免费| 国产自产v一区二区三区c| 久久久久国产一区二区三区四区| 欧美四级在线观看| 亚洲乱码国产乱码精品精可以看| 亚洲视频福利| 国产亚洲一级高清| 男女激情视频一区| 久久综合九九| 一区二区亚洲精品国产| 国产欧美日韩在线观看| 国产一区二区三区久久悠悠色av| 亚洲永久免费观看| 国产精品高潮久久| 亚洲一区国产视频| 欧美日韩三区四区| 欧美成人精品1314www| 欧美成人综合在线| 黄色成人免费网站| 欧美一区1区三区3区公司| 影音先锋中文字幕一区二区| 亚洲欧美在线免费| 狠狠色狠狠色综合系列| 亚洲欧洲在线视频| 美日韩精品视频免费看| 国产精品一区二区a| 亚洲精品久久久久久下一站| 狠狠久久综合婷婷不卡| 欧美日韩性视频在线| 亚洲香蕉在线观看| 日韩亚洲欧美一区二区三区| 国产欧美日韩综合一区在线播放| 国产女人水真多18毛片18精品视频| 亚洲一区高清| 国产精品一区二区三区四区五区| 一本一道久久综合狠狠老精东影业| 欧美午夜久久久| 久久精品在线| 亚洲高清免费| 亚洲视频免费| 亚洲三级观看| 国产精品第十页| 老司机午夜免费精品视频| 亚洲精品在线观看免费| 欧美福利在线观看| 国产乱码精品一区二区三区五月婷| 欧美一区二区黄| 国内成人精品2018免费看| 亚洲精品激情| 欧美激情在线观看| 欧美国产视频在线| 国产精品毛片va一区二区三区| 亚洲欧美日韩综合aⅴ视频| 欧美日韩成人在线观看| 国产精品视频精品视频| 在线不卡中文字幕| 香蕉久久精品日日躁夜夜躁| 国产精品少妇自拍| 欧美aaaaaaaa牛牛影院| 欧美va亚洲va日韩∨a综合色| 国产精品毛片大码女人| 欧美日韩不卡| 亚洲第一中文字幕在线观看| 久久丁香综合五月国产三级网站| 久久国产欧美精品| 亚洲欧洲精品一区二区三区不卡| 欧美日韩一区二区三区在线视频| 鲁鲁狠狠狠7777一区二区| 国产一区激情| 国产精品美女一区二区| 免费在线亚洲欧美| 亚洲精选在线观看| 国产精品视屏| 欧美一区免费视频| 国产精品乱人伦一区二区| 欧美日韩美女在线| 国产午夜精品视频免费不卡69堂| 亚洲一区观看| 国产精品一区二区欧美| 久久色在线观看| 国产日韩精品综合网站| 欧美在线1区| 亚洲剧情一区二区| 久久精品国产久精国产思思| 欧美在线日韩在线| 欧美黄色片免费观看| 欧美日韩亚洲一区三区| 亚洲午夜在线| 久久精品久久99精品久久| 国内成人精品视频| 一区二区三区在线高清| 国语精品一区| 国产精品高清网站| 欧美三级免费| 美女精品网站| 欧美在线视频观看免费网站| 国产精品成人va在线观看| 国产精品福利在线观看| 又紧又大又爽精品一区二区| 国产专区欧美专区| 久久久一二三| 欧美有码视频| 亚洲电影免费观看高清完整版| 国产亚洲精品自拍| 国产在线观看一区| 欧美一区二区在线免费观看| 国产精品久久久久99| 欧美激情精品| 欧美日韩18| 欧美大色视频| 在线观看日韩av电影| 欧美成年人视频| 亚洲午夜一区二区| 国产午夜精品全部视频播放| 亚洲精品欧美激情| 国产精品美女视频网站| 欧美系列亚洲系列| 在线亚洲国产精品网站| 亚洲福利在线看| 国产伦精品一区二区三区| 亚洲福利专区| 国产日韩在线一区| 国产综合av| 亚洲欧美激情精品一区二区| 亚洲美女在线观看| 激情小说另类小说亚洲欧美| 国产精品一区二区久激情瑜伽| 亚洲永久精品大片| 在线欧美日韩精品| 久久久噜噜噜| 国产精品美女一区二区在线观看| 欧美日韩免费在线视频| 国产精品久久九九| 国产精品女人网站| 国产精品av久久久久久麻豆网| 欧美三级免费| 另类av导航| 欧美 亚欧 日韩视频在线| 欧美一区二粉嫩精品国产一线天| 欧美在线3区| 亚洲成人资源| 国产精品一二| 国产精品主播| 欧美日韩在线大尺度| 国产一区二区三区电影在线观看| 狠狠色丁香久久综合频道| 国产性猛交xxxx免费看久久| 欧美日韩中字| 亚洲视频电影在线| 欧美精品 国产精品| 亚洲第一页自拍| 欧美专区一区二区三区| 久久久久国产精品麻豆ai换脸| 午夜欧美电影在线观看| 精品福利免费观看| 国产精品稀缺呦系列在线| 亚洲欧美韩国| 中文精品在线| 欧美日韩美女一区二区| 欧美性感一类影片在线播放| 国产精品久久久久久五月尺| 亚洲激情小视频| 国产精品黄色| 美日韩丰满少妇在线观看| 在线中文字幕不卡| 欧美亚洲综合久久| 新片速递亚洲合集欧美合集| 欧美成人精品三级在线观看| 欧美日韩一区二区三区在线看| 欧美日本亚洲| 欧美视频一区在线| 久久亚洲影院| 国产一区av在线| 久久久久国产精品www| 久久精品一区二区三区中文字幕| 国产精品久久久久婷婷|