Sto lavorando su un programma di installazione in OS X che installa un driver IOKit per un dispositivo USB e sto cercando di farlo non richiedere un riavvio alla fine. Il programma di installazione installa correttamente il driver e ricostruisce la cache di kext e, una volta eseguito, se scollego e ricollego il dispositivo USB, carica correttamente il nuovo driver e tutto funziona correttamente.Programmare "scollegare e ricollegare" un dispositivo USB per caricare il nuovo driver in OS X?
Tuttavia, non desidero richiedere all'utente di scollegare fisicamente il dispositivo per consentire il caricamento del nuovo driver. Ci deve essere un modo per ottenere OS X per caricare il nuovo driver a livello di codice - in effetti simulare il dispositivo che viene scollegato e ricollegato di nuovo, o qualcosa di simile. Come potrei fare questo? Finora, le ore di Google non hanno trovato nulla, quindi qualsiasi aiuto sarà molto apprezzato!
mi piacerebbe provare a guardare il codice che viene eseguito quando si espelle un dispositivo di archiviazione di massa USB - non sono sicuro se c'è traffico corrispondente USB o se dice semplicemente al sottosistema USB di ignorare la porta fino a quando un fisico non si disconnette. Nel primo caso (un messaggio "espulsione USB"), potrebbe non esserci un modo semplice per "estrarre" a parte il ciclo di alimentazione o un reset USB, entrambi potrebbero essere problematici per altri dispositivi USB. Ma spero che da qualche parte inizi a guardare. –
Ho letto qualcosa chiamato pmount che può smontare altri dispositivi USB arbitrari, ma non so se questo include il tuo dispositivo. L'unico grande svantaggio è che non viene fornito con OS X per impostazione predefinita. – rien333
Sono abbastanza sicuro che non puoi farlo direttamente dallo spazio utente. Tuttavia, nel kernel, è possibile provare a chiamare terminate() sul client esistente che esegue il hogging del dispositivo. – pmdj