Estoy trabajando en un instalador en OS X que instala un controlador IOKit para un dispositivo USB, y estoy intentando que no requiera un reinicio al final. El instalador instala el controlador correctamente y reconstruye el caché de kext, y después de que se ejecute, si desconecto y vuelvo a conectar el dispositivo USB, carga correctamente el nuevo controlador y todo funciona bien.¿Desconecta y vuelve a conectar mediante programación un dispositivo USB para cargar un nuevo controlador en OS X?
Sin embargo, no deseo que el usuario desconecte físicamente el dispositivo para que se cargue el nuevo controlador. Tiene que haber una manera de hacer que OS X cargue el nuevo controlador de forma programática; en efecto, simule que el dispositivo esté desenchufado y enchufado de nuevo, o algo similar. ¿Cómo voy a hacer esto? Hasta ahora, las horas de búsqueda en Google no arrojaron nada, por lo que cualquier ayuda será muy apreciada.
que iba a tratar mirar el código que se ejecuta cuando se expulsa un dispositivo de almacenamiento masivo USB - no estoy seguro de si hay tráfico correspondiente USB o si simplemente le dice al subsistema USB que ignore el puerto hasta que se desenchufe físicamente. En el primer caso (un mensaje de "expulsión de USB"), puede que no haya una manera fácil de "anular la expulsión", aparte de un ciclo de encendido o un reinicio de USB, los cuales pueden ser problemáticos para otros dispositivos USB. Pero espero que sea un lugar para empezar a buscar. –
Leí sobre algo llamado 'pmount' que puede desmontar más dispositivos USB arbitrarios, pero no sé si eso incluye su dispositivo. El único gran inconveniente es que no viene con OS X de forma predeterminada. – rien333
Estoy bastante seguro de que no puedes hacer esto directamente desde el espacio del usuario. Sin embargo, en el kernel, puedes intentar llamar a terminate() en el cliente existente que está acaparando el dispositivo. – pmdj