变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

東坡下載:內容最豐富最安全的下載站!

首頁IT技術操作系統 → 讀Linux那些事兒之我是HUB筆記

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

相關文章發表評論 來源:本站時間:2011/4/28 13:32:46字體大小:A-A+

更多

作者:點擊:276次評論:0次標簽:

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改內存

相關評論

閱讀本文后您有什么感想? 已有 人給出評價!

  • 2791 喜歡喜歡
  • 2101 頂
  • 800 難過難過
  • 1219 囧
  • 4049 圍觀圍觀
  • 5602 無聊無聊
熱門評論
最新評論
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數: 0/500 (您的評論需要經過審核才能顯示)

本類常用軟件

主站蜘蛛池模板: 成人18视频| 1204手机在线观看免费高清 | 德国free性video极品 | 49vv婷婷网 | 99视频精品全国免费 | 婷婷在线视频 | 成人爽爽激情在线观看 | 午夜看片在线观看 | 伊人欧美在线 | 日日射日日干 | 黄色永久免费 | tk视频丨vk| 免费无遮h在线网站大全 | 黄 色 毛片免费 | 国产亚洲欧美日韩在线看片 | 欧美日韩免费一区二区三区 | 大香伊人网| 中文字幕一区2区 | 操你啦在线 | 黄色体验区 | 国产午夜亚洲精品国产 | 日韩美女性行为免费视频 | 99精品国产成人a∨免费看 | 在线视频日韩精品 | 欧美一区二区三区成人看不卡 | 在线观看黄色网页 | 亚洲18av| 天天上天天干 | 日韩黄色免费观看 | 日日操操干干 | 99在线观看视频免费精品9 | 国产精品入口麻豆高清在线 | 中文字幕综合网 | 亚洲成a人片在线观看www | 美女黄色在线观看 | 草草草视频| 全免费一级毛片在线播放 | 日本一区二区不卡在线 | 欧美成人黄色片 | 一级视频在线观看 | 欧美在线视频你懂的 |