精品久久看,欧美成人久久一级c片免费,日本加勒比在线精品视频,国产一区二区三区免费大片天美,国产成人精品999在线,97理论三级九七午夜在线观看

當前位置:首頁文章首頁 IT學院 IT技術

讀Linux那些事兒之我是HUB筆記

作者:  來源:  發布時間:2011-4-28 13:32:46  點擊:
1、 usb設備能夠使用條件:一個是 usbcore,這就是核心模塊,另一個是主機控制器的驅動程序
usb host controller.一個是 echi的,三個是uhci,就是host controller 的接口;
hub:叫做集線器(設備與host control)
2、 root hub:
Root Hub 上可以連接別的設備,可以連接 U 盤,可以連接usb 鼠標,同樣也可以連接另一個 hub.所謂 hub,就是用來級連;
通常做芯片的同志們會把 Host Controller 和 Root Hub 集成在一起.特別是 PC 主機上,通常你就只能看到接口,看不到 Root Hub
subsys_initcall(usb_init)的意思就是告訴我們 usb_init 是我們真正的初始化函數,而 usb_exit()將是整個 usb 子系統的結束時的清理函數.
3、 你必須明白,當初 storage_probe()被調用是發生在 usb-storage 模塊被加載了并且檢測到了有設備插入之后的情況下,也就是說有兩個前提,
第一個 usb-storage 被加載了,
第二個設備插入了被檢測到了,
于是storage_probe()被調用.
而 hub,說她特別,我可絕不是忽悠你.hub 本身就是兩種,一種是普通
的hub,一種是root hub.對于普通hub,它完全可能也是和U盤一樣,在某個時刻被你插入,然后
這種情況下hub_probe被調用,但是對于root hub就不需要這么多廢話了,root hub肯定是有的,只要你有host controller,就一定會有 root hub,所以hub_probe()基本上是很自然的就被調用了,不用說非得等待某個插入事件的發生,沒這個必要.
4、 事實上,每一次調用 kthread_run()之后,我們都會用一個IS_ERR()來判斷指針是否有效. kthread_run()也會申請內存,但非kmalloc申請的內存 ,IS_ERR()為1就表示指針有錯,或者準確一點說叫做指針無效. 每次調用完 kthread_run()之后要用 IS_ERR()來檢測一下返回的指針.如果IS_ERR()返回值是0,那么說明沒有問題,于是return 0,也就是說usb_hub_init()就這么結束了.
5、 內核指針:有三種情況,一種是有效指針,一種是 NULL,空指針,一種是錯誤指針,或者說無效指針.而所謂的錯誤指針就是指其已經到達了最后一個page.
比如對于32bit的系統來說,內核空間最高地址 0xffffffff,那么最后一個 page 就是指的 0xfffff000~0xffffffff(假設4k一個page).這段地址是被保留的,一般人不得越雷池半步,如果你發現你的一個指針指向這個范圍中的某個地址,那么恭喜你,你的代碼肯定出錯了.
6、 IS_ERR():對于Linux內核來說,不管任何體系結構,最多最多,錯誤號不會超過 4095.而 4095 又正好是比 4k 小 1,即 4096 減 1.而我們知道一個page可能是4k,這里的 IS_ERR(),它就是判斷 kthread_run()返回的指針是否有錯,如果指針并不是指向最后一個 page,那么沒有問題,申請成功了,如果指針指向了最后一個 page,那么說明實際上這不是一個有效的指針,這個指針里保存的實際上是一種錯誤代碼.而通常很常用的方法就是先用IS_ERR()來判斷是否是錯誤,然后如果是,那么就調用PTR_ERR()來返回這個錯誤代碼
7、 Hup驅動的思想:
總分總結構,
A:先設置一個鏈表,hub_event_list,設置一個總的函數hub_events(),這是總,
B:然后每一個 hub 都有一個 event_list,每當有一個 hub 的 event_list出現了變化,就把它的 event_list 插入到 hub_event_list 中來,這是分,
C:然后觸發總函數hub_events(),這又是總,然后在 hub_events()里又根據 event_list 來確定是哪個 struct usb_hub,或者說是哪個 hub 有事情,又針對該 hub 進行具體處理,這又是分.
這就是 Linux 中hub驅動的中心思想
8、 TIF 就是 thread info 的意思,眾所周知,struct task_struct 是一個表示進程的結構體,而除此之外,又有一個叫做struct thread_info的結構體來代表內核線程
9、 Endpoint.spec規定了hub就是一個endpoint,中斷endpoint,因為hub的傳輸是中斷傳輸.當然還有控制傳輸,但是因為控制傳輸是每一個設備都必須支持的,即每一個usb 設備都會有一個控制端點,所以在 desc->desc.bNumEndpoints 中是不包含那個大家都有的控制端點的.因此如果這個值不為 1,那么就說明又出錯了,仍然只能是返回
10、kzalloc():雙重功能函數,kmalloc 并且 memset改內存

文章評論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
主站蜘蛛池模板: 毛片免费观看网站 | 第一国内永久免费福利视频 | 娼年日剧未删减版 | 国产欧美日韩综合精品一区二区三区 | 日韩亚洲视频 | 久久久国产99久久国产首页 | 婷婷成人综合 | 精品欧美一区二区在线看片 | 欧美成人七十二式性视频教程 | 欧美一区二区三区免费观看视频 | 国产真实伦在线视频免费观看 | 日日操网站 | 黄色短视频免费在线观看 | 日不卡 | 久久久久久久久久免免费精品 | 四虎在线精品 | 久久99国产精品免费观看 | 五月婷婷丁香 | 久久国产精品久久精品国产 | 汉宫春晓61式图解 | 五月婷婷激情六月 | 国产免费网 | 久久久99精品久久久久久 | 国产成人片 | 国产精品亚洲玖玖玖在线靠爱 | 国产高清免费吃奶在线观看 | 国产精品99 | 欧美国产亚洲精品高清不卡 | 日韩在线国产精品 | 国产成人综合精品 | 伊人精品视频在线观看 | 伊人免费视频网 | 99久久中文字幕伊人 | 国产成人精品一区二区不卡 | 2021国产精品自拍 | 99久久99久久精品免费看子 | 六芒星免费观看视频在线看第二集 | 久久精品网站免费观看 | 一级毛片免费的 | 国产成人亚洲综合 | 婷婷伊人网|