Linux系統中的gadgetfs介紹

2021-06-26 16:55:01 字數 1308 閱讀 9065

linux提供了一套api,使得嵌入式的linux系統軟體可以以usb外設的方式工作。kernel中提供了gadget的framework及相關的demo,開發者可以參考用於開發自己的usb gadget driver。但並非所有的開發者都希望在kernel中程式設計,或者依賴於linux提供的kernel api,所以kernel中還提供了一套稱為gadgetfs的檔案系統,用於user mode的**直接與usb host側通訊。另外,使用gadgetfs實現的使用者空間的驅動還可以避免版權的問題。

要使用gadgetfs,首先需要在kernel中開啟gadgetfs的支援;之後,開發者需要手動掛載這個檔案系統,一般命令如下:

$mkdir /dev/gadget

$mount -t gadgetfs gadgetfs /dev/gadget

掛載成功後,可以在/dev/gadget下看到乙個檔案,該檔案的名稱與硬體平台提供的usb device controller有關,在這兒以$chip的替代。該檔案相當於usb device的control endpoint0,host諸如setup, get descriptor操作都會由gadgetfs通過此檔案**到使用者程式中。使用者在虛擬gadget driver之前,需要寫入此gadget的基本配置資訊,該資訊由以下部分構成:

tag:4位元組,當前版本該值必須為0;

config descriptor:長度不定,必須包括config descriptor + n個inte***ce descriptor + 各inte***ce包含的low/full speed的endpoint descriptor,根據不同的硬體配置,可能還要提供n個inte***ce descriptor + 各inte***ce包含的high speed的endpoint descriptor。gadgetfs只提供乙個configuration的支援。

device descriptor:18位元組,按usb標準提供。

以上資料通過write方式寫入到$chip中,gadgetfs會在/dev/gadget/目錄下生成endpoint的檔案,檔名同樣與底層的usb device controller有關,我們在這兒以$ep替代。

一旦gadget接入到host中,裝置會被列舉。可以通過poll操作,獲取$chip是否有資料寫入,通過read操作,取得host發起的動作資訊,如,get descriptor,或者set configuration等。set configuration時,需要將endpoint descriptor資訊寫入到相關的$ep中,之後就可以使用$ep(read/write)與host側通訊了,資料的內容根據usb協議來打包(bulk, interrupt和iso傳輸沒有指定的資料格式)。

linux中的定時系統

修改 etc crontab,將游標移動至最後一行,按o鍵新開一行輸入以下內容 20 root rm rf root febhost dat root febhost log 給你解釋下此行的含義吧,前五個以4個空格分隔開的值依次表示 分 時 日 月 周,如果取所有值就是打 號,如果你想週期性的執行...

Linux系統中的訊號

訊號 signal 是linux系統中用於程序之間相互通訊或操作的一種機制。訊號是乙個相當廣泛的課題 在這裡,我們僅僅 幾種最重要的訊號以及利用訊號控制程序的技術。訊號是乙個傳送到程序的特殊資訊。訊號機制是非同步的 當乙個程序接收到乙個訊號時,它會立刻處理這個訊號,而不會等待當前函式甚至當前一行 結...

linux系統中的時間

朱老師物聯網大講堂 學習筆記 linux系統中的時間,jiffies的引入,是linux核心中的乙個全域性變數,記錄核心節拍時間的數值,核心在開機啟動的時候會讀取rtc獲取乙個時間作為基準值,這個基準時間對應乙個jiffies jiffies值的獲取方式是rtc時間減去1970 01 01 00 0...