日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux复位usb hub,Linux USB subsystem --- USB Hub initialize

發布時間:2023/12/19 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux复位usb hub,Linux USB subsystem --- USB Hub initialize 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目的:對USB作深入學習,在此留下筆記。歡迎討論。

[Linux 3.2] [driver/usb/core/hub.c]

函數:usb_hub_init

intusb_hub_init(void)

{

if(usb_register(&hub_driver)?

printk(KERN_ERR"%s:?can't?register?hub?driver\n",

usbcore_name);

return-1;

}

khubd_task?=?kthread_run(hub_thread,?NULL,"khubd");

if(!IS_ERR(khubd_task))

return0;

/*?Fall?through?if?kernel_thread?failed?*/

usb_deregister(&hub_driver);

printk(KERN_ERR"%s:?can't?start?khubd\n",?usbcore_name);

return-1;

}

usb_hub_init主要完成兩個功能,一是注冊hub驅動,另一個則是啟動一個名為khubd的內核線程(通過ps可以看到此線程,也可以叫進程。內核不區分進程和線程)。

hub驅動的注冊,與usbfs驅動注冊是一樣。在完成注冊后,可以在/sys/bus/usb/drivers下面看到usb目錄,在usb目錄下面,創建如下屬性文件:

bind? module? new_id? uevent? unbind

下面分析khubd線程的創建:

kthread_run(hub_thread, NULL, "khubd") --> hub_thread --> set_freezable() --> hub_events() --> wait_event_freezable(khubd_wait,?!list_empty(&hub_event_list) ||?kthread_should_stop()); 至此進入睡眠,等待khubd_wait來喚醒這個進程。

hub_events主要用來處理port status change和hub status change。

等USB enumeration時,會對hub_events進行更進一步分析。

總結

以上是生活随笔為你收集整理的Linux复位usb hub,Linux USB subsystem --- USB Hub initialize的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。