實時作業系統VxWorks下電子盤驅動程序的開發

2021-01-07 電子產品世界

       在某些特定的工業應用領域,普通的作業系統並不適用,需要採用實時作業系統。

       目前,已有許多實時作業系統如:VxWorks、pSOS、QNX、Hard-Linux、WinCE等等,其中美國Wind River System 公司的VxWorks是公認的性能最出色的一種實時作業系統。這是一個運行在目標機上的高性能、可裁減的嵌入式實時作業系統。它的軟體開發平臺是Tornado。
   

      本文以VxWorks作業系統為平臺,以M-System公司的DOC2000(144M)為例,說明在VxWorks下如何驅動並使用電子盤設備。

       1 系統結構
   

       DOC 系列的電子盤採用的都是TrueFFS(True Flash File System)。TrueFFS for Tornado II是Tornado II開發環境中的一個集成的快速快閃記憶體文件系統,它是使用一系列的嵌入式快閃記憶體設備來實現快速可靠的物理存儲的。通過VxWorks的TrueFFS仿真DOS文件系統下的硬碟驅動器,開發者可以使用標準的文件系統接口來產生和操作一個文件系統。這樣,在快閃記憶體設備上進行讀寫操作就與在DOS文件系統設備上是一樣的了。因此,對於電子盤驅動的介紹就需要分為上層作業系統的文件系統和底層的驅動器物理結構實現兩部分。

     1.1 VxWorks中的文件系統
   

       VxWorks是一種功能強大而且比較複雜的嵌入式作業系統,包括了進程管理、存儲管理、設備管理、文件系統管理、網絡協議及系統應用等幾個部分。VxWorks只佔用了很小的存儲空間,並可高度裁減,保證了系統能以較高的效率運行。
   

       VxWorks提供的快速文件系統適合於實時系統應用。它包括幾種支持使用塊設備(如磁碟)的本地文件系統。這些設備都使用一個標準的接口從而使得文件系統能夠被靈活地在設備驅動程序上移植。VxWorks也支持SCSI磁帶設備的本地文件系統。VxWorks支持四種文件系統:dosFs、rt11Fs、rawFs、tapeFs。
   

       VxWorks的I/O系統將普通數據文件、外部設備都統一作為文件處理。它們在用戶面前有相同的語法定義,使用相同的保護機制。這樣既簡化了系統設計又便於用戶使用。VxWorks I/O 體系結構甚至還支持在一個單獨的VxWorks系統上同時並存幾個不同的文件系統。VxWorks提供了一個快速靈活的與ANSI C 兼容的I/O 系統,包括:UNIX 標準的緩衝I/O、POSIX 標準的異步I/O。VxWorks包括以下驅動程序:網絡驅動、管道驅動、RAM 盤驅動、SCSI驅動、鍵盤驅動、顯示驅動、磁碟驅動、並口驅動。
   

      VxWorks的所有機制和功能都是基於「C子程序」這種簡單結構的,即:VxWorks的所有功能都是由C程序庫提供的。任何C程序都能夠從Tornado的命令和調試環境中交互式地調用;任何C程序都能夠作為VxWorks的一個任務從Tornado主機工具或者應用程式中產生,而且C程序能夠與中斷、看門狗定時器或輔助定時器相連。VxWorks的這種統一性使Tornado成為一種有效的開發系統。因為用戶不必再編寫特殊的代碼來與系統陷阱接口,也不需要進行特殊的處理來建立一個任務,更不需要編寫特殊的用戶接口程序或交互式的測試程序來測試新代碼,用戶只要編寫子程序就能夠完成所有這些工作。
   

       VxWorks的特性為編寫應用程式和設備驅動程序提供了極大的便利。在VxWorks下,設備驅動程序既可以嵌入內核隨系統一起啟動,也可以作為可加載模塊在系統啟動之後運行,無論採用哪一種方式編寫驅動程序,需要注意的一點就是:其使用不能依賴於還沒有啟動的功能模塊(例如c庫函數)或者未激活的設備。

     1.2 電子盤
   

      電子盤的內部存儲介質Flash是近年來發展最快的一種存儲晶片,它具有EEPROM可擦寫的特點,又同時具有EPROM 廉價的特點,它是一種高性能、低功耗、電可擦除的存儲器件。電子盤由於上述特點,現已經廣泛應用於信息存儲、機頂盒、瘦客戶機、瘦主機、網絡計算機、以及嵌入式計算機等很多系統。
   

       TrueFFS是M-System 公司開發出來的可用於電子盤設備的專利技術。TrueFFS的基本功能就是磁碟仿真。它提供像DOC一樣的塊設備的接口,從而方便了作業系統對電子盤設備的邏輯區的讀寫。通過TrueFFS可以對電子盤進行讀寫、分區、格式化等一系列操作。通過對作業系統的l/O控制的調用,就可以訪問TrueFFS的外部接口。電子盤設備的I/O控制並不局限於某一特定作業系統,所以可以兼容多種作業系統。通常,在作業系統下驅動電子盤有以下兩步:

       ①調用作業系統的GetDriverHandle()函數得到驅動器的句柄。它的返回值是一個能夠供I/O控制函數調用的TrueFFS驅動的描述符。這一步依賴於作業系統的文件系統。

        ②調用作業系統中文件系統的IOControl()函數。它將使TrueFFS具有其它文件系統的特性:

      1)文件系統狀態。它的值可以指示操作指令是否成功的傳遞給了驅動器或者驅動器對於操作指令有無響應,但它並不能確認操作的結果或狀態。一個操作的結果或狀態是由輸入輸出控制包(IO Package)來傳遞的。它們使用的是TrueFFS的標準狀態碼,這些狀態碼可以在IO控制的頭文件以及一些驅動包文件中查到。

      2)文件系統IO控制。它可以調用文件系統的擴展功能。

      3)輸入輸出請求包。所有的TrueFFS擴展功能都使用下列輸入輸出請求包,它的定義格式如下:
typedef struct
{
FLHandle irHandle;
Unsigned irFlages;
FLSimplePath FAR1 *irPath;
Void FAR1 *irData;
Long irLength;
Long irCount;
}
       irHandle(句柄)主要用於確認一個操作究竟應該作用於哪一個分區。如果只有一個驅動器,那麼就不會出現衝突,則句柄的值可以設置為0。驅動器的句柄包含了物理驅動數(LSB 0-3)和分區數(LBB 4-7)。由於Binary Partition和Disk Partition的句柄都可以從0開始。所以,Binary Partition和Disk Partition總是通過不同的句柄來訪問,以免產生衝突。
   

       irFlags這個變量用來標識擴展功能的類型。每一個擴展功能都有一個枚舉類型的代碼標識。
   

       irData包含了一個指向fllOctlRecond記錄的指針。fllOctlRecond記錄包含了一些擴展功能的輸入輸出記錄的指針。
   

       DOC2000為M-System 公司DOC系列的第二代產品,它為32腳DIP封裝,具有體積小,封裝簡單的特點,通過將DOC2000插入DOC2000插槽,可以大量減少佔用的物理空間。

        如圖1所示,DOC2000由系統接口單元(System Interface)、系統引導模塊(Boot Block)、錯誤檢測與更正單元(EDC/ECC),快閃記憶體控制單元(Flash Control)以及Flash存儲介質組成。其中系統接口單元為DOC2000提供一個類SRAM 接口,使之能通過CPU的本地總線、ISA總線、SRAM 總線、EEPROM 接口建立與作業系統的連接。DOC提供片選信號(CE#)、讀寫信號(WE#)、使能信號(OE#)以及13位寬的地址線(A[0:12])和8位寬的數據總線(D[0:7])。每個DOC佔用系統8K的地址空間,通過地址窗的滑動來訪問整個DOC空間。系統引導模塊用來響應PC機結構中BIOS擴展設備的搜索。當BIOS檢測到DOC2000為擴展設備時,它可以執行保存在系統引導模塊中的TrueFFS的驅動程序,通過系統調用TrueFFS格式轉換軟體,系統可以把DOC2000映射為普通的硬碟從而方便地進行讀寫。DOC2000的錯誤檢測和更正模塊用來提供數據錯誤的檢測、更正以及數據保護。Flash控制模塊主要用來完成TrueFFS地址與Flash介質地址之間的轉換、數據傳輸控制等功能。

      2 電子盤設備驅動程序的基本結構流程
   

       在VxWorks下,設備驅動程序既可以嵌入內核隨系統一起啟動,也可以作為可加載模塊在系統啟動之後運行。

      2.1可選加載方式
   

       可選加載方式驅動電子盤是一種比較常用的方式。它是把驅動程序製作成一個可獨立運行的應用程式,當需要的時候可以選擇加載到用戶程序集中。利用可選加載方式驅動電子盤的第一步是要確定電子盤所佔用的系統地址窗的範圍。一般主機板都給出了幾個可以選擇的範圍,通過跳線可以設置電子盤的地址窗的起始、結束地址。啟動VxWorks下TrueFFS驅動程序,根據實際的地址將地址窗參數配置好。第二步將TrueFFS映射成DOS文件系統。調用tffsMakeHandle()函數得到驅動器的描述符。將此描述符傳遞給驅動器句柄。然後定義一個塊設備的指針用於保存一個虛擬DOS文件系統分區的信息。調用tffsDevCreate()函數將剛才檢測到句柄的TrueFFS驅動器映射成DOS文件系統分區,並將該函數的返回值傳遞給定義好的塊設備指針。至此,就完成了TrueFFS到DOSFS的映射過程。完成DOSFS設備初始化後,在Tornado的Shell環境下運行devs命令就可以看到tffs設備已經在系統設備列表中了。第三步,讀寫電子盤上的文件。設置好要讀寫的文件的文件名、路徑。利用標準C++的文件系統函數就可以方便的讀寫文件了。

      2.2嵌入系統方式
   

       嵌入系統方式比可選加載方式要複雜。它將驅動程序嵌入系統內核中,這樣電子盤可以在系統啟動的時候被驅動。這種方式主要應用於系統引導文件放在電子盤上的情況。嵌入系統方式又分為X86機的嵌入方式和其它(如PowerPC,MIPs等)嵌入方式。這裡以X86方式為例。
   

      第一步修改目標BSP目錄下的config.h文件,增加電子盤設備的定義,修改引導設備。第二步修改系統BSP目錄下的bootconfig.C文件,將電子盤的驅動程序加入。第三步修改系統BSP目錄下的usrconfig.h文件,調用電子盤的驅動程序。

      3 設備驅動程序示例
   

       下面給出DOC2000的可選加載方式的驅動程序的框架代碼,嵌入系統方式下的DOC2000的驅動程序涉及VxWorks系統內核,這裡不作詳細敘述。

       3.1定義頭文件、常量、全局變量
#include "fldrvvxw.h"
#include "dosFsLib.h"
long tfsAddresses[2]={0xd8000,0xdfff};
/*定義電子盤的地址窗範圍*/
int iSocket=0;
/*TrueFFS內部變量*/
int iDisk=0; /*電子盤數量(1個)*/
nt handle; /*驅動器句柄*/
nt flags=0;
/*將TrueFFS仿真成DOS FAT16的格式*/
BLK_DEV * tffs_blk_dev; /*塊設備指針*/
char FilePath[50]="/tffs0/test.txt"; /*文件路徑*/
File fp; /*文件指針*/

      3.2 驅動電子盤並將TrueFFS映射為DOSFS
DOCDriver()
{
tfsSetup(1,tfsAddresses); /*TrueFFS驅動程序*/
handle= tfsMakeHandle(iSocket,iDisk);
/{得到驅動器的句柄{/
tfs_ blk_dev=tfsDevCreate(handle,flags);
/*得到仿真DOSFS的塊設備信息*/
dosFsInit (20);
/*初始化DOSFS的參數*/
dosFsDevInit ("/tfs0/",tffs_blk_dev,NULL); /*初始化DOSFS設備*/
taskDelay(sysClkRateGet()/2); /*系統延時*/
}

      3.3 電子盤文件的讀寫
FileReadWrite()
{
fp=fopen(FilePath,"r+");
…… /*相關文件操作*/
fclose(fp);
}

相關焦點

  • vxworks嵌入式作業系統下串行設備驅動程序開發思路
    概 述 我們在基於vxworks嵌入式作業系統開發產品時,經常會根據自行設計的硬體電路開發專用的驅動程序。Vxworks下的驅動程序根據設備的不同特性,,大體可分為:char driver、serial driver、bLOCk driver、end driver、scsi driver等類型,其中以char driver最簡單,最基礎,以serial driver最常用。
  • 基於VxWorks實時作業系統的通信模型設計
    軟體設計中模塊化的思想已日益普遍,模塊化的設計能夠使程序結構清晰,便於維護,開發起來也更加高效。大型軟體通常由多個功能模塊構成,模塊的功能實現又是由多個線程所支撐的。諸如windows,Linux類型的作業系統自身能夠對線程間的通信進行較好的管理,不需要過多的關心底層。而VxWorks是一個多任務系統,任務是系統最基本的執行單元。
  • Windows CE.NET下ADC驅動開發設計
    多線性、多任務、全優先的作業系統環境是專門針對資源有限而設計的,它的模塊化設計使嵌入式系統開發者和應用者能夠將其應用於各種產品,例如家用電器、專門的工業控制和嵌入式通信設備等。Windows CE 支持各種硬體外圍設備及網絡系統,應用領域極為廣闊,是微軟專門為信息設備、移動通訊、電子產品、嵌入式應用等非 PC 領域而專門設計的一種戰略性作業系統產品。
  • 電腦常用的驅動程序的安裝與管理
    了解驅動程序驅動程序(Device Driver),全稱為「設備驅動程序」,是一種可以使電腦和設備通信的特殊程序,可以說相當於硬體的接口。作業系統只有通過這個接口才能控制硬體設備的工作,硬體設備需要在驅動程序的支持下才能被系統識別並發揮最佳性能。某個設備的驅動程序未能正確安裝,便不能正常工作。
  • AWorks如何編寫開發設備驅動程序
    本文導讀 本文詳細介紹了AWorks中開發設備驅動的一般方法。基於這些通用的方法,用戶可以嘗試獨立開發一些設備的驅動,以進一步加深對AWbus-lite的理解。同時,當後續遇到一些AWorks 暫不支持的設備時,也可以自行開發設備相應的驅動。
  • 基於Linux平臺下的FPGA的ARM驅動開發方法
    Linux作業系統的全稱是GNU/Linux,它是由GNU工程和Linux內核兩個部分共同組成的一個作業系統。在通信行業、傳輸網、醫療儀器、各種電子儀器、安防監控、電力系統、汽車電子以及消費類電子中都大面積使用。隨著產品研發周期的逐步縮短,定製型產品的開發使FPGA在後面的應用面越來越廣。例如在2G和3G通信,以及以後的4G通信和wimax等等通信類設備中,它與DSP、MPU一起將大量出現在其中。
  • 基於Android作業系統實現車載人機界面應用程式的設計
    車載虛擬儀表人機界面,是駕駛員獲取汽車工況數據的主要界面,便於駕駛員實時全面地掌握汽車工作狀態,有效地與汽車進行人機互動,對保障汽車安全穩定的行駛有著重要意義,目前普遍使用的是Windows CE和Linux作業系統。
  • 嵌入式作業系統是什麼_嵌入式作業系統有哪些
    嵌入式作業系統是什麼   嵌入式作業系統(Embedded OperatingSystem,簡稱:EOS)是指用於嵌入式系統的作業系統。嵌入式作業系統是一種用途廣泛的系統軟體,通常包括與硬體相關的底層驅動軟體、系統內核、設備驅動接口、通信協議、圖形界面、標準化瀏覽器等。
  • vxworks和linux有什麼區別
    自己目前開發的嵌入式開發所用的作業系統是VxWorks,以前讀大學的時候用的最多的是linux作業系統,但是,對於這兩種作業系統之間到底有什麼區別,還真沒有真正去細心的總結過,被別人問起時,難免有些尷尬的感覺 Linux是一類Unix計算機作業系統的統稱。Linux作業系統的內核的名字也是「Linux」。
  • 主打「無核構件化」技術,「光輪電子」研發可自動編程物聯網作業系統
    具體來說,光輪電子的物聯網作業系統具有以下特點:無核構件化技術:TreeOS平臺將軟體架構作為 「無形內核」,將內核功能、周邊設備驅動、中間件等物聯網組件分散在各個軟體構件之中,並將其統一至作業系統平臺。「這些構件可配置、可剪裁,能夠適應多樣化的MCU/MPU,擁有100%自主創新IP。」
  • Windows CE.Net下矩陣鍵盤開發設計詳解
    Windows CE.Net下矩陣鍵盤開發設計詳解 引言 隨著現代科技日新月異的發展,作為新興產業的嵌入式移動信息設備的應用越來越廣
  • 程序開發應知應會的MySQL使用之JDBC驅動
    MySQL使用之JDBC驅動驅動這個詞對於大部分使用電腦的人來說都不陌生,無論是哪個作業系統,都需要驅動的支持。硬碟、音效卡、顯卡、滑鼠、鍵盤、內存等等的硬體想要被作業系統調用,就必須要安裝相應的驅動程序。簡單來說,驅動程序將軟體與硬體連接起來,形成了一個紐帶!
  • USB驅動開發的步驟及方法解析
    隨著USB2.0設備的不斷增加,USB設備驅動開發在嵌入式開發中變的越來越重要。Windows CE支持USB 2.0更是對這一波新技術浪潮產生巨大的推動。近期我負責一個這樣的項目,在WinCE下開發USB接口的外圍設備驅動。當時做這個項目花費了我相當多的時間和精力,錯走許多冤枉路使我精疲力盡。
  • 實時內核的電動車電子差速仿真
    此外隨著電動輪技術和現場總線技術的發展,在電動車上更容易實現四輪獨立驅動控制,進而為剎車防抱死系統(ABS)、電子穩定系統(ESP)等主動安全系統的實現提供便利。本文介紹一種基於嵌入式實時內核ARTXl66的電子差速算法。
  • 巧用GPSID驅動 快速實現WinCE GPS開發
    這個基於WinCE平臺的GPS導航項目主要包括WinCE內核和GPS驅動的定製、電子地圖製作和嵌入式GIS應用軟體的開發等幾個方面。其中,我負責WinCE系統軟硬體平臺的搭建和底層驅動的開發。本文不涉及複雜的GIS地理信息應用程式,主要是結合本次項目的實踐,詳細介紹GPSID中間驅動層的運行機制和內部原理,以及如何使用GPSID驅動協議和底層接口來開發GPS導航設備。
  • 汽車作業系統的前世今生
    隨著阿里巴巴Alios和百度Apollo計劃的輪番登臺,「作業系統OperatingSystem」 似乎在一夜間成為了智能網聯汽車的標配。事實真是如此嗎?本文將簡單的介紹下汽車作業系統的前世今生。 車載系統和電控系統 要談汽車作業系統,首先得了解汽車電子。
  • ARM嵌入式工控電腦的作業系統是怎樣的
    並且和往常一樣,為了滿足桌面用戶群的需要,添加了一整套新的音頻和多媒體驅動程序,Linux 內核使用了由 Ingo Molnar 開發的新的調度器算法,稱為O(1)算法,它在高負載的情況下執行得極其出色,並且當有很多處理器時也可以很好地擴展;內核搶佔補丁在2.5系列中就已經被打上,接下來在2.6中也會打。這將顯著地降低用戶交互式應用程式、多媒體應用程式等類似應用程式的延遲。
  • 構造一個51單片機的實時作業系統的方法
    多年來我們一直想找一個合適的實時作業系統,作為自己的開發基礎。根據開發需求,整合一些常用的嵌入式構件,以節約開發時間,盡最大可能地減少開發工作量;另外,要求這個實時作業系統能非常容易地嵌入到小容量的晶片中。畢竟,大系統是少數的,而小應用是多數而廣泛的。
  • 基於VxWorks的嵌入式系統複合通信模式
    摘要:在嵌入式系統與VxWorks實時作業系統應用愈加廣泛的背景下,結合嵌入式系統對於各類實時通信方式的不同需要,提出基於控制應用的複合通信模式;以Radstone公司的PPCx系列單板機為例,給出實現方法,並對數據通信的產時性與安全性作了研究。片對於各類嵌入式作業系統的數據測驗具有很大的參考價值。
  • 英偉達推出由AI驅動的實時降噪程序 效果拔群但多數用戶無法使用
    支持主動消除用戶背景噪音或別人的背景噪音:這款實時降噪軟體最主要的特點就是實時消除用戶環境背景噪音,比如鍵盤敲擊記錄聲或者主機風扇運行的聲音。例如對方並沒有使用這款軟體因此輸入過來的是嘈雜的聲音,當使用該軟體時同樣可以實時過濾輸出純淨的人聲。此外如果用戶使用的並不是耳機而是外放的揚聲器,該軟體還可以抑制回聲讓用戶傳送給別人的聲音也更加純淨。最後該軟體會智能識別噪音和正常的聲音,例如你在聽歌或者看視頻輸出的音頻就不算是噪音因此不會被過濾掉。