usb基本知識

2021-09-01 19:41:57 字數 2541 閱讀 1920

幾個重要的概念:

cpu ----(usb core)----->host controller(usb控制器) +(整合)+root hub(可以連線多個usb裝置)

usb主機----(usb協議)--->usb裝置

usb core核心:初始化usb系統,初始化root hub

usb host :初始化usb控制器

usb控制器的分類:ohci 1.1介面標準   uhci 1.0-1.1 ehci 2.0 xhci 3.0

1.usb子系統的初始化:drivers/usb/core/usb.c   static int __init usb_init(void)

usb匯流排的註冊: int bus_register(struct bus_type *bus)   drivers/base/bus.c

usb_init(void)---->bus_register(struct bus_type *bus) 

ls sys/bus/usb/

devices            drivers_autoprobe  uevent

drivers            drivers_probe

bus_register的工作是在sys/bus/usb下建立這些節點。

其中節點 drivers_autoprobe    drivers_probe 由函式 static int add_probe_files(struct bus_type *bus)實現

bus_create_file(bus, &bus_attr_drivers_probe)

bus_create_file(bus, &bus_attr_drivers_autoprobe)

static bus_attr(drivers_probe, s_iwusr, null, store_drivers_probe);這個節點只能寫

static bus_attr(drivers_autoprobe, s_iwusr | s_irugo, show_drivers_autoprobe, store_drivers_autoprobe);這個節點可寫可讀,置一表示每次註冊裝置或驅動都會自動match另一半。

store_drivers_probe函式呼叫bus_find_device,讓這根匯流排的裝置都去找匹配自己的device_driver。所以我們寫這個名字為drivers_probe的檔案,就是向核心發出命令,趕緊去把這個bus的裝置和驅動遍歷一遍,檢視有沒有能匹配的。

2.作為u盤不僅要和usb core打交道,而且還要和scsi core ,記憶體管理單元,還要核心的其他模組打交道,外面的世界很精彩。

usb mass_storage 的驅動  usb_hosts

/sys/bus/usb/drivers

# ls

hub  usb  usb-storage   usbfs usbhid   uvcvideo

# ls usb-storage/

1-1:1.0(識別的u盤裝置)    bind       module     new_id     remove_id  uevent     unbind

u盤的驅動源**在drivers/usb/storage/usb.c   驅動名字「usb-storage」

module_usb_driver(usb_storage_driver)向usb core層註冊驅動。

module_usb_driver(usb_storage_driver)-->usb_register()--->usb_register_driver()----->driver_register(drivers/base/driver.c)---->usb_add_driver(drivers/base/bus.c)--->add_bind_files(建立兩個節點bind unbind)

bus_add_driver()--->driver_attach()--->bus_for_each_dev()--->__driver_attach()--->driver_probe_device()--->really_probe()-->呼叫usb_register_driver裡面初始化的usb_probe_inte***ce()函式--->然後呼叫 usb_driver驅動裡面的probe函式driver->probe(intf, id)【usb_driver usb_storage_driver-->storage_probe(drivers/usb/storage/usb.c)】

3.drivers/usb/core/hub.c   hub的驅動**。

usb_hub_init()->kthread_run(hub_thread, null, "khubd")--->建立乙個執行緒hub_thread--->hub_events(檢查hub的事件是否變化,是否有探測到裝置)--->hub_port_connect_change(探測hub埠裝置的連線)-->usb_new_device(探測到新裝置)--->announce_device(udev)列印裝置資訊。

hub_port_connect_change(探測hub埠裝置的連線)-->hub_port_init(hub埠的初始化)--->然後才呼叫usb_new_device().

第1節 USB通訊基本知識概

usb14.1.1 有關基本概念 1 差分訊號技術 差分訊號技術的特點 使用兩條線路表達乙個位元位,即用兩條線路傳輸訊號的壓差作為判斷1還是0的依據。其優點是具有極強的抗干擾性。倘若遭受外界強烈干擾,兩條線路對應的電平同樣會出現大幅度提公升或降低的情況,但二者的電平改變方向和幅度幾乎相同,電壓差值就...

Oracle 基本知識

乙個表空間只能屬於乙個資料庫 每個資料庫最少有乙個控制檔案 建議3個,分別放在不同的磁碟上 每個資料庫最少有乙個表空間 system表空間 建立system表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率,只應存放資料字典 每個資料庫最少有兩個聯機日誌組,每組最少乙個聯機日誌檔案 乙個資料...

Oracle 基本知識

乙個表空間只能屬於乙個資料庫 每個資料庫最少有乙個控制檔案 建議3個,分別放在不同的磁碟上 每個資料庫最少有乙個表空間 system表空間 建立system表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率 每個資料庫最少有兩個聯機日誌檔案 乙個資料檔案只能屬於乙個表空間 乙個資料檔案一旦被...