讀Linux那些事兒之我是U盤筆記(一)

2021-09-21 08:17:36 字數 1222 閱讀 4461

我是u盤

1、 模組

insmod 裝置插入,module_init())被稱為驅動程式的初始化入口

rmmod 裝置拔出, module_exit()

2、 usb core

什麼是usb core?她負責實現一些核心的功能,為別的裝置驅動程式提供服務,比如申請記憶體,比如實現一些所有的裝置都會需要的公共的函式;

3、 host controller(主機控制器)

分類:ehci(enhance),uhci(universer),ohci(open)

4、 bus,device,driver關係

bus裡面有devices和drivers兩個鍊錶,device裡面有bus和driver,driver裡邊有bus和device,device裡邊的bus告訴裝置是屬於那條匯流排,driver說明裝置擁有那個驅動,driver同理;driver和device能夠配對是靠const struct usb_device_id *id_table;這個結構體相當於乙個人的身份證,如果能夠匹配,device_bind_driver使得driver和device聯絡起來;

5、 usb的四類描述符

device:整個裝置的特點

configerion:裝置的配置

inte***ce:乙個inte***ce對應乙個usb裝置驅動程式.

重要巨集:inte***ce_to_usbdev將struct usb_inte***ce轉換成struct usb_device結構

endpoint:

u盤至少有乙個控制端點,兩個bulk端點

endpoint齊名的有乙個叫做管道,或者有文化的人管這個叫 pipe.endpoint 就是通訊的傳送或者接收點,你要傳送資料,那你只要把資料傳送到正確的端點那裡就可以了.它是有方向的:乙個端點是你的目的地,路線是pipe,另乙個端點是host controller

bulk in(裝置到主機)------------------------------>bulk out(主機到裝置)

6、 usb四種通訊方式

控制傳輸(c),中斷傳輸(i),批量傳輸(b),等時傳輸(t)

cbi就是control/bulk/interrupt,即控制/批量/中斷,使用這種協議的裝置有兩種通訊方式,一是控制傳輸,二是批量傳輸,,控制傳輸是任何一種 usb 裝置都必須支援的,它專門用於傳輸一些控制資訊;bulk 傳輸,它就是 u盤的主要工作了,讀寫資料;

u盤使用bulk-only的傳輸協議

讀Linux那些事兒之我是U盤筆記(八)

37 錯誤處理 device reset 在這裡對應的就是登出,bus reset 對應的就是重起 功能 給裝置傳送乙個 reset 的 request,然後clear掉halt feature,保證裝置的端點沒有停止.就這些,這就夠了.bus reset usb lock device for r...

Linux那些事兒之我是U盤 24 心鎖

如果大家沒意見的話,我們繼續usb stor acquire resources函式.761至764行,這沒啥好說的吧.就是剛才urb申請了之後判斷是否申請成功了,如果指標為null那麼就是失敗了.直接返回 enomem.別往下了.767行,哦,又乙個傢伙閃亮登場了,dev semaphore,這是...

Linux那些事兒之我是U盤 5 外面的世界很精彩

看 之前,我曾經認真的思考過這麼乙個問題,我需要關注的僅僅是drivers usb storage 目錄下面那相關的3000多行 嗎?就是這樣幾個檔案就能讓乙個個不同的u盤在linux下面工作起來嗎?像一開始那樣把這個目錄比作乙個小城的話,也許,城裡的月光很漂亮,她能夠把人的夢照亮,能夠溫暖人的心房...