原创 《Linux那些事兒之我是USB》我是U盤(16)冬天來了,春天還會遠嗎?(二)

打開unusual_devs.h吧,之前我們看了它的最後幾行,但是如果你仔細看的話會發現最後幾行和前面的一些行有着明顯的不同。最後幾行都是USUAL_DEV的宏,而前面則全是UNUSUAL_DEV的宏,隨便看一下,發現每一行就是這麼一個宏

原创 《Linux那些事兒之我是USB》我是U盤(11)從協議中來到協議中去

從協議中來,到協議中去(上)在structusb_driver中,.probe和.disconnect的原型如下:836     int(*probe) (struct usb_interface *intf,837          

原创 《Linux那些事兒之我是USB》我是U盤(15)冬天來了,春天還會遠嗎?(一)

在整個usb-storage模塊的代碼中,其最靈魂的部分在一個叫做usb_stor_control_thread()的函數中,而那也自然是我們整個故事的高潮。這個函數的調用有一些特殊,是從usb_stor_acquire_resource

原创 《Linux那些事兒之我是USB》我是U盤(14)冰凍三尺非一日之寒

羅馬不是一天建成的。在讓U盤工作之前,其實我們的驅動做了很多準備工作。 我們繼續跟着感覺走,storage_probe(),972行至975行,一系列的以init_*命名的函數在此刻被調用,這裏涉及了一些鎖機制,等待機制,不過只是初始化,

原创 《Linux那些事兒之我是USB》我是U盤(19)冬天來了,春天還會遠嗎?(五)

看完了get_transport()繼續看get_protocol()函數和get_pipes()函數。仍然是來自drivers/usb/storage/usb.c中: 672 static int get_protocol(struc

原创 《Linux那些事兒之我是USB》我是U盤(13)設備花名冊

storage_probe這個函數挺有意思,總長度不足100行,但是幹了許多事情,這就像足球場上的後腰,比如切爾西的馬克萊萊,在場上並不起眼,但是卻爲整個團隊做出了卓越的貢獻。 我們繼續看storage_probe的代碼: 972   

原创 代碼質量保證體系——Linux

疫情在肆虐,說心憂天下貌似有些大了,只能先說些小的,在這裏嘗試描述一下Linux爲保證代碼質量所做的努力,來完成這個主題的最後一篇,也希望這段不好的日子的最後篇章也早些到來。 編碼規範 這一環節涵蓋了兩個方面的含義:一份行之有效的編碼規範

原创 Linux開源存儲網絡詳解

這本《Linux開源網絡全棧詳解:從DPDK到OpenFlow》是那本《Linux開源存儲全棧詳解》的姊妹篇,把Linux開源網絡相關的項目做了個梳理,對於想了解或參與網絡相關項目開發的人來說,也會是個不錯的參考。至於下面貼出來的序,容我

原创 Linux開源存儲全棧詳解

最近和同事一起整了本書《Linux開源存儲全棧詳解:從Ceph到容器存儲》,把Linux開源存儲相關的項目做了個梳理,對於想了解或參與存儲相關項目開發的人來說,應該會是個不錯的參考。這裏把當時寫的序放上來: ===============

原创 代碼質量保證體系(上)

比爾·蓋茨說:“用代碼行數來衡量編程的進度,就如同用航空器零件的重量來衡量航空飛機的製造進度一樣。”所以,相對於代碼的數量,我們通常更樂意去關注代碼本身的質量,也因此,在開源社區裏,除了某些特殊的目的,我們也更願意去關注一個人被接受pat

原创 《Linux那些事兒之我是USB》我是U盤(17)冬天來了,春天還會遠嗎?(三)

從兩張表得到了我們需要的東西,然後下面的代碼就是圍繞着這兩個指針來展開了。(unusual_dev和id)繼續看get_device_info()。 497行,把unusual_dev給記錄在us裏面,反正us裏面也有這麼一個成員。這樣記

原创 《Linux那些事兒之我是USB》我是U盤(12)夢開始的地方

對於整個usb-storage模塊,usb_stor_init()函數是它的開始,然而,對於U盤驅動程序來說,它真正驅使U盤工作卻是始於storage_probe()函數。 兩條平行線只要相交,就註定開始糾纏一生,不管中間是否短暫分離。U

原创 《Linux那些事兒之我是USB》我是U盤(10)我是誰的他?

probe,disconnect,id_table,這三個元素中首先要登場亮相的是id_table,它是幹什麼用的呢?我們說過,一個設備只能綁定一個驅動,但驅動並非只能支持一種設備。道理很簡單,比如我有兩塊U盤,那麼我可以一起都插入,但是

原创 《Linux那些事兒之我是USB》我是U盤(8)總線、設備和驅動(上)

struct bus_type中爲設備和驅動準備了兩個鏈表,而代表設備的結構體struct device中又有兩個成員,struct bus_type *bus和struct device_driver *driver。同樣,代表驅動的結

原创 《Linux那些事兒之我是USB》我是U盤(7)狂歡是一羣人的孤單

Linux 設備模型中三個很重要的概念就是總線、設備和驅動,即 bus 、 device 和 driver 。而實際上內核中也定義了這麼一些數據結構,他們是 struct bus_type , struct device , struct