前面有篇文章,說到了如何獲取USB裝置的Descriptor。其中有一個步,通過呼叫CHcd類的成員變數m_pCRootHub(CRootHub)的GetDeviceList函式,來獲取Root Hub上裝置列表。此處的Root Hub是在什麼地方被初始化的呢?
1、搜尋程式碼發現,類CHcd中有一個成員函式SetRootHub,會給m_pCRootHub賦值。
2、類CEhcd的成員函式DeviceInitialize,會建立一個CRootHub類的物件,並將該物件作為引數,呼叫函式SetRootHub。
SetRootHub( new CRootHub( deviceInfo, FALSE,TRUE, usbHubDescriptor,this ));
類的繼承關係:CEhcd -> CHW -> CHcd。
3、函式DeviceInitialize在HcdMdd_CreateHcdObject函式中被呼叫。HcdMdd_CreateHcdObject函式,首先呼叫CreateHCDObject函式建立HCD物件,然後呼叫該HCD物件的DeviceInitialize函式。
4、函式InitializeEHCI中呼叫了函式HcdMdd_CreateHcdObject。
5、函式HcdPdd_Init呼叫了函式InitializeEHCI。
6、函式HCD_Init呼叫了函式HcdPdd_Init。
7、函式OTG_Init中呼叫了函式HCD_Init。