目錄
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()進行創建。