Bir USB aygıtı için bir IOKit sürücüsü yükleyen OS X'deki bir yükleyici üzerinde çalışıyorum ve sonunda yeniden başlatma gerektirmemesi için çalışıyorum. Yükleyici sürücüyü doğru şekilde yükler ve kext önbelleğini yeniden oluşturur ve sonra da USB aygıtını çıkarır ve yeniden bağlarsam, yeni sürücüyü doğru şekilde yükler ve her şey yolunda çalışır. Ancak, yeni sürücünün yüklenmesi için kullanıcının fiziksel olarak fişini çekmesini istemiyorum. OS X'in yeni sürücüyü programsal olarak yüklemesi için bir yol olmalı - aslında cihazın takılı ve tekrar takılı olduğunu veya benzer bir şeyi taklit etmesini sağlayın. Bunu yapmak için nasıl giderim? Şimdiye kadar, Googling saatlerinin hiçbiri bir şey olmadı, bu yüzden herhangi bir yardım büyük takdir görecek!OS X'de yeni sürücüyü yüklemek için bir USB aygıtı program aracılığıyla "çıkarın ve yeniden takın" mi?
9
A
cevap
2
IOUSBDeviceInterface187 :: USBDeviceReEnumerate() istediğiniz şeyi yapacak. Tek aksaklık, ilgili tüm cihazları bulmak ve bunları IOServiceGetMatchingServices()
ile manuel olarak çağırmaktır. IOKit/usb içinde
/*!
@function USBDeviceReEnumerate
@abstract Tells the IOUSBFamily to reenumerate the device.
@discussion This function will send a terminate message to all clients of the IOUSBDevice (such as
IOUSBInterfaces and their drivers, as well as the current User Client), emulating an unplug
of the device. The IOUSBFamily will then enumerate the device as if it had just
been plugged in. This call should be used by clients wishing to take advantage
of the Device Firmware Update Class specification. The device must be open to use this function.
@availability This function is only available with IOUSBDeviceInterface187 and above.
@param self Pointer to the IOUSBDeviceInterface.
@param options A UInt32 reserved for future use. Ignored in current implementation. Set to zero.
@result Returns kIOReturnSuccess if successful, kIOReturnNoDevice if there is no connection to an IOService,
or kIOReturnNotOpen if the device is not open for exclusive access.
*/
IOReturn (*USBDeviceReEnumerate)(void *self, UInt32 options);
Bak/IOUSBLib.h
1
diskutil
'a ve özellikle mount
ve unmount
seçeneklerine göz atın. Bunlar yazılımları yumuşak bir şekilde çıkaracak ve cihazlara bağlanacaktır. Halihazırda monte edilmiş tüm cihazların bir listesini almak için diskutil list
'u kullanabilirsiniz. Diskutil hakkında daha fazla bilgiye ihtiyacınız varsa, sadece man sayfasına bakın.
İlgili konular
- 1. USB cihazlarını program aracılığıyla bağlayıp çıkarın
- 2. USB aygıtını program aracılığıyla bağlama ve yeniden bağlama
- 3. Android USB HID Aygıtı
- 4. takın yeni bir satır
- 5. Android'de USB aygıtı için Linux dosya izinleri
- 6. Atmega32U4 USB Aygıtı/HOST modu
- 7. Program aracılığıyla çalışan uygulama paketlerini OS X
- 8. Jquery sürüklenebilir yeni konteynere takın
- 9. Windows altında USB aygıtı yeniden bağlanma sorunu nasıl verilir
- 10. Bir USB aygıtı ile nasıl iletişim kurulur?
- 11. Program aracılığıyla bir UIView
- 12. TrendNet TU-S9 RS232/USB ve OS X
- 13. Azure Web App program aracılığıyla yeniden başlatılıyor
- 14. Android'de yeni bir Bluetooth Aygıtı desteği
- 15. Program aracılığıyla bir program oluşturucu oluşturun.
- 16. C'deki USB Aygıtı Seri numarasını okuyun C#
- 17. Umbraco uygulamasında program aracılığıyla yeni bir üye oluşturma
- 18. Bir Docker kapsayıcısından OS X'de barındırılan USB web kamerasına erişme
- 19. Program aracılığıyla gezinmek için uitextview kaydırma yapmak
- 20. yeniden başlatın (veya yapılandırmasını yeniden yükleyin) Eclipse-CS program aracılığıyla
- 21. Yükleme sırasında yeniden başlayan yazılımı yüklemek için Windows 7'ye nasıl bir ISO dosyası yerleştirebilirim?
- 22. Program aracılığıyla UITableViewCell tokatlamak?
- 23. Çıkarılabilir sürücüyü (ör. USB flash sürücü) algıla C/C++
- 24. SD kartta yeni bir dizini program aracılığıyla nasıl oluşturabilirim?
- 25. Program aracılığıyla cihaz desteğini bulun GPS mi buldunuz değil mi?
- 26. Program aracılığıyla Xcode
- 27. Program aracılığıyla Özelleştirme UITableViewCell
- 28. OS X, iOS üzerinden iOS iletişimine mi?
- 29. Mac OS X'te Terminal aracılığıyla Apache2'yi Yeniden Yükleme
- 30. Program işlevine program aracılığıyla erişme
Ben istiyorum koþulur kodu incelemeden bir USB yığın depolama aygıtı çıkarmak zaman denemek - İlgili varsa emin değilim USB trafik veya eğer USB altsistemine sadece fiziksel bir fiş çıkarılıncaya kadar portu yok saymasını söylerse. Eski durumda (bir "USB çıkartma" mesajı), her ikisi de diğer USB cihazları için sorun yaratabilecek güç çevirme veya USB sıfırlama dışında "çıkarma" için kolay bir yol olmayabilir. Ama umarım bu aramaya başlamak için bir yer. –
Daha rasgele USB aygıtlarını ayırabilen "pmount" adlı bir şeyi okudum, ancak aygıtınızı içerip içermediğini bilmiyorum. Tek büyük dezavantajı, varsayılan olarak OS X ile gelmemesidir. – rien333
Ben kesinlikle bu kullanıcı alanı üzerinden yapamazsınız eminim. Ancak, çekirdekte, aygıtı işleyen mevcut istemcideki terminate() yöntemini çağırabilirsiniz. – pmdj