Pracuję nad instalatorem w systemie OS X, który instaluje sterownik IOKit dla urządzenia USB i staram się go nie wymagać ponownego uruchomienia na końcu. Instalator prawidłowo instaluje sterownik i odbudowuje pamięć podręczną kext, a po jej uruchomieniu, po odłączeniu i ponownym podłączeniu urządzenia USB, poprawnie ładuje nowy sterownik i wszystko działa poprawnie.Programowo "odłączyć i ponownie podłączyć" urządzenie USB, aby załadować nowy sterownik w systemie OS X?
Nie chcę jednak, aby użytkownik zmuszony był do fizycznego odłączenia urządzenia w celu załadowania nowego sterownika. Musi być sposób, aby system OS X załadował nowy sterownik programowo - w efekcie symulując odłączenie urządzenia i ponowne podłączenie go lub coś podobnego. Jak miałbym to zrobić? Do tej pory godziny Googlinga nie dały żadnych rezultatów, więc wszelka pomoc zostanie doceniona!
Chciałbym spróbować patrząc na kod, który pobiera uruchamiane podczas wysuwania urządzenia pamięci masowej USB - Nie jestem pewien, czy istnieje odpowiadający ruch USB lub jeśli po prostu mówi podsystemowi USB, aby ignorował port do fizycznego odłączenia. W pierwszym przypadku (komunikat "USB eject") może nie być łatwego sposobu na "un-eject" z wyjątkiem power-cycling lub USB reset, które mogą być problematyczne dla innych urządzeń USB. Ale mam nadzieję, że to gdzieś zacząć szukać. –
Przeczytałem o czymś o nazwie 'pmount', które może odmontować więcej dowolnych urządzeń USB, ale nie wiem, czy to obejmuje twoje urządzenie. Jedynym poważnym minusem jest to, że domyślnie nie pochodzi z OS X. – rien333
Jestem prawie pewien, że nie można tego zrobić bezpośrednio z przestrzeni użytkownika. Jednak w jądrze można spróbować wywołać metodę terminate() na istniejącym kliencie, który przerywa działanie urządzenia. – pmdj