《VxWorks7編程指南》筆記(六)——I/O系統:簡介

目錄

 

1.VxWorks I/O系統

2.VxWorks I/O功能配置

3.I/O設備、命名文件與文件系統

4.VxWorks遠程文件系統訪問


1.VxWorks I/O系統

VxWorks I/O系統可以爲任何類型的設備提供簡單、統一、與設備獨立的管理接口。這些設備包括:

  • 字符設備:如終端或通信線路;
  • 隨機訪問塊設備:如磁盤;
  • 虛擬設備:如任務間的管道pipes和sockets;
  • 監控設備:如數字和模擬I/O設備;
  • 網絡設備:如可進行遠程訪問的設備;

VxWorks I/O系統爲基礎I/O與帶緩衝的I/O均提供了標準的C庫。基礎I/O庫與Unix兼容;帶緩衝的I/O庫與ANSI兼容。

 

內核I/O

因其獨特的設計,使得VxWorks I/O系統比大多數的其他I/O系統更快、更靈活。這對實時系統是一個很重要的屬性。

下圖展示了VxWorks內核I/O系統中不同元素之間的關係。除了文件系統函數與網絡元素之外,其餘元素具有進行描述。

 

I/O系統與RTP應用程序

下圖展示了可供RTP使用的VxWorks I/O系統元素之間的關係。後續將對這些元素進行描述。

 

VxWorks I/O與主機系統I/O之間的區別

VxWorks I/O系統的使用與Unix和Windows的I/O系統使用是相同的,在源碼上基本是兼容的。但是仍然存在如下的區別:

  • 文件描述符;
  • I/O控制;
  • 設備配置;
  • 設備驅動函數;

類似於Unix和Windows,VxWorks中的文件描述符對於內核與每個進程而言也是獨有的。內核與每個進程具備其獨有的文件描述符集合。當進程創建後,它的文件描述符集合通過複製創建它的進程的文件描述符而得到(如果創建者是一個內核任務,僅能複製標準I/O描述符0,1,2)。之後,所有打開、關閉和複製操作僅能影響進程的文件描述符集合。對於內核和每個進程,文件描述符都是全局可見的。然而在內核中,標準輸入、標準輸出和標準錯誤可以被設置爲任務特有的。

在Unix與VxWorks中向ioct()函數傳遞的參數可能不同。

在VxWorks內核中,設備驅動可以動態的加載或卸載,但僅限於內核空間。

在Unix中,不能搶佔執行在系統模式下的設備驅動。在VxWorks中,因爲設備驅動執行在觸發它們的任務上下文中,所以驅動函數可以被強佔。

2.VxWorks I/O功能配置

VxWorks提供了多種I/O功能,操作系統可以按需引入或移除。

附加組件

INCLUDE_IO_SYSTEM組件提供了向後兼容。其中包括了上表中的所有組件。

3.I/O設備、命名文件與文件系統

VxWorks應用程序通過打開的命名文件訪問I/O設備。

一個命名文件可以參考如下:

  • 在一個包含文件系統,且具備結構化、可隨機訪問特點的設備中的邏輯文件;
  • 一個無結構的原始設備,如串行通信通道或任務間管道;

可以通過上述方式實現I/O。在VxWorks中,這些都被稱爲文件,儘管他們對應的是不同的物理對象。

 

設備命名

非塊設備在加入I/O系統時被命名,通常是在系統初始化時進行。塊設備則是在用於一個特定文件系統中開始初始化時才進行命名。VxWorks I/O系統對設備的命名沒有限制。除了在查找或匹配設備或文件名的過程中,否則I/O系統不會以任何方式對設備或文件名進行處理。

設備由設備驅動負責操作。通常使用I/O系統不需要對設備和驅動的實現有更深層次的理解。

 

文件名與設備名

一個文件名由一個字符串指定。一個無結構的設備由設備名定義。對於有文件系統的結構化的設備,設備名後將跟着一個文件名。例如:

/pipe/mypipe:用於一個命名管道。通常,管道名的開頭是/pipe

/tyCo/0:用於一個串口通道

/usr/myfile:用於一個名爲myfile的文件,位於磁盤設備/usr中

/ata0:0/file1:用於在/ata0:0磁盤設備上的文件file1

 

針對文件的默認I/O設備

當在一個I/O調用中指定了一個文件名,I/O系統將根據文件名查找對應的設備,至少需要匹配文件名的初始的子字符串。之後I/O函數將定位到相應的設備。

例如,如果文件名是mars:/usr/xeno/foo/myfile,I/O函數將定位到名爲mars的遠程主機。如果不能定位到指定名稱的設備,那麼I/O函數將定向到一個默認的設備。

可以將默認設備設置爲系統中任意的設備,也可以不設置(結果將導致設備匹配失敗,並返回錯誤)。爲了獲取當前的默認路徑,可以使用getcwd()函數。可以使用chdir()函數設置默認的路徑。

 

文件I/O

儘管所有的I/O可以定位到一個命名文件,但是還是可以按照兩個層次進行操作:基礎的I/O和帶緩衝的I/O。兩者的不同在於數據的緩衝方式以及可調用的函數類型。

4.VxWorks遠程文件系統訪問

根據連接協議的不同,從VxWorks訪問遠程文件系統需要特殊的考慮。

 

從VxWorks訪問NFS文件系統

通常,基於NFS的網絡設備在掛載時,其名字前都有一個斜槓/。爲了從VxWorks中訪問目錄和文件,需要使用從掛載點開始的路徑。

在VxWorks中,如果/usr/xeno/foo的掛載點是/foo,那麼就可以按/foo/myfile訪問/usr/xeno/foo/myFile。例如:

 

使用FTP或RSH從VxWorks訪問非NFS網絡文件系統

爲使用FTP或RSH從網絡訪問非NFS文件系統,必須在文件的系統路徑之前添加遠程主機名稱,中間用冒號隔開。

如果主機系統是Linux則例外,其不需要主機名和冒號。

需要注意的是,爲了能夠使用RSH或FTP訪問遠程主機的文件,必須在遠程主機與本地之間建立權限與用戶驗證鏈接。

如果Linux主機mars上的文件名爲/usr/xeno/foo/myfile,Windows主機jupiter上的文件名爲C:\bar\myotherfile,那麼這兩個文件將標識如下:

之後可以如下使用路徑:

因爲mars爲Linux主機,所以如下方式也可以正常工作:

 

遠程系統名定義

對於主機系統,其名稱由主機名的啓動參數定義(默認爲host)。對於其他遠程主機,一個網絡設備必須首先通過調用內核函數netDevCreate()進行創建。

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