天天看點

嵌入式linux産品USB裝置動态監控技術研究

嵌入式linux産品USB裝置動态監控技術研究

筆者最近在做PVR項目的開發工作,涉及到使用移動硬碟作為刻錄節目的存儲空間。目前市場上的PVR産品大多采取内置硬碟的方式,但是對于客戶來說不是很實惠,内置的硬碟客戶無法作為他用,是以開發用外置USB接口的移動硬碟的PVR産品在市場上是很有的競争力的,其他類似産品也是一樣。首先我們需要正确地挂載到系統中,鑒于目前使用者移動硬碟的檔案系統可能有FAT32/NTFS/EXT2等多種,還有就是使用者的移動硬碟可能有好幾個分區,也不知道各個分區的檔案系統格式,這就需要動态監控USB的狀态,比如USB裝置的插入、拔出、挂載情況等,但是怎樣能做到動态監控呢?下文将就筆者的開發實踐進行詳解。

在linux系統中,proc檔案系統是一個僞檔案系統,它隻存在記憶體當中,而不占用外存空間。它以檔案系統的方式為通路系統核心資料的操作提供接口。使用者和應用程式可以通過

proc得到系統的資訊,并可以改變核心的某些參數。由于系統的資訊,如程序,是動态改變的,是以使用者或應用程式讀取proc檔案時,proc檔案系統是動态從系統核心讀出所需資訊并送出的。系統啟動後,将proc系統挂載到/proc上,就可以通路該系統,挂載方法為:mount

–t proc proc /proc。挂載成功後,proc檔案系統的内容就可以通過/proc這個挂載點來通路。

Proc檔案系統下的Partitions檔案記錄了系統識别的分區表,一旦有USB裝置插入系統中,linux核心就會把發現的USB裝置的狀況資訊下入該檔案,比如裝置名、分區容量大小等。這樣就可以通過讀取該檔案,來分析有沒有USB裝置。USB裝置的裝置名配置設定的範圍為:sd[a-z]及sd[a-z][0-9]。在Partitions檔案,裝置名是以/dev/sd開頭的,是以在分析檔案時就可以以此為依據來判斷有無USB裝置存在。單一分區的USB裝置,隻有一個主裝置名;有多個分區的USB裝置,在Partitions檔案中首先記錄的是主裝置的資訊,緊接着就記錄了各個分區的資訊,如裝置名、分區容量大小,但是不管是哪種USB裝置,核心都沒有記錄它對應的檔案系統類型。因為這種現實條件,就決定了系統不能保證一次mount就能全部挂載成功,但是得益于前面分析出的各個裝置名,就可以采取輪詢的政策來完成系統的挂載。如果産品的系統中支援FAT、NTFS、EXT2等檔案系統,在程式中就可以把分區的檔案系統類型暫定位上述類型中的一種,如果挂載不上,就試圖挂載另外一種檔案系統類型,如果分區的檔案系統類型在産品所支援的範圍内,隻要該分區的檔案系統沒有被破壞,就可以挂載成功。對于對分區的USB裝置,各分區不能挂載在同一挂載點上,一般可以在/mnt/目錄下根據分區數動态建立一些作為挂載點的目錄,如USB[0-255]。

在挂載時可以記錄一下挂載的狀況,挂載成功與否,挂載的目錄名稱,分區大小,分區的裝置名,以便于其他控制,比如GUI現實USB裝置狀況的時候就需要。在挂載前可以先注冊一個CALLBACK函數,一旦挂載完畢可根據挂載的情況,調用一下CALLBACK函數通知應用已發現USB裝置;當然如果分析到在Partitions檔案中不再存在/dev/sd開頭的裝置資訊,同樣可以通過CALLBACK函數通知應用USB裝置已拔出。

筆者在實際項目中通過上面的解決方法,成功地實作了USB的動态監控,增加了産品在市場上的競争力。

【文章對你有益的話,請給個合适的評價】

繼續閱讀