Lorsque j'obtiens l'erreur 0x10, je veux être en mesure de donner un sens à ce code d'erreur. Rechercher IOReturn.h et mach/error.h n'est pas particulièrement pratique. J'étais perdu quand j'ai eu le code d'erreur 0x22. C'est vraiment une question idiote mais existe-t-il une fonction comme error2String qui peut mapper le code d'erreur IOReturn à String qui décrit l'erreur?Mappage IOKit IOReturn code d'erreur à la chaîne
Répondre
l'exécution de code dans le noyau peut utiliser IOService::stringFromReturn(...)
La documentation suggère définitivement que c'est la voie à suivre ... mais je n'ai absolument aucune compréhension de la façon d'invoquer cela à partir de mon code. Tout ce que je reçois est des erreurs "symbole non trouvé". Avec quoi dois-je faire un lien? Importer/inclure? Merci beaucoup. –
Votre code est-il une extension de noyau, ou une application/bibliothèque en mode utilisateur? IOService :: stringFromReturn (...) n'est (malheureusement) disponible que pour le code s'exécutant dans le noyau. –
Je l'ai porté au-dessus de IOService.h, cela devrait faire le travail.
-(NSString*)stringFromError:(unsigned int)errorVal
{
NSDictionary *ioReturnMap =
@{@kIOReturnSuccess: @"success",
@kIOReturnError: @"general error",
@kIOReturnNoMemory: @"memory allocation error",
@kIOReturnNoResources: @"resource shortage",
@kIOReturnIPCError: @"Mach IPC failure",
@kIOReturnNoDevice: @"no such device",
@kIOReturnNotPrivileged: @"privilege violation",
@kIOReturnBadArgument: @"invalid argument",
@kIOReturnLockedRead: @"device is read locked",
@kIOReturnLockedWrite: @"device is write locked",
@kIOReturnExclusiveAccess: @"device is exclusive access",
@kIOReturnBadMessageID: @"bad IPC message ID",
@kIOReturnUnsupported: @"unsupported function",
@kIOReturnVMError: @"virtual memory error",
@kIOReturnInternalError: @"internal driver error",
@kIOReturnIOError: @"I/O error",
@kIOReturnCannotLock: @"cannot acquire lock",
@kIOReturnNotOpen: @"device is not open",
@kIOReturnNotReadable: @"device is not readable",
@kIOReturnNotWritable: @"device is not writeable",
@kIOReturnNotAligned: @"alignment error",
@kIOReturnBadMedia: @"media error",
@kIOReturnStillOpen: @"device is still open",
@kIOReturnRLDError: @"rld failure",
@kIOReturnDMAError: @"DMA failure",
@kIOReturnBusy: @"device is busy",
@kIOReturnTimeout: @"I/O timeout",
@kIOReturnOffline: @"device is offline",
@kIOReturnNotReady: @"device is not ready",
@kIOReturnNotAttached: @"device/channel is not attached",
@kIOReturnNoChannels: @"no DMA channels available",
@kIOReturnNoSpace: @"no space for data",
@kIOReturnPortExists: @"device port already exists",
@kIOReturnCannotWire: @"cannot wire physical memory",
@kIOReturnNoInterrupt: @"no interrupt attached",
@kIOReturnNoFrames: @"no DMA frames enqueued",
@kIOReturnMessageTooLarge: @"message is too large",
@kIOReturnNotPermitted: @"operation is not permitted",
@kIOReturnNoPower: @"device is without power",
@kIOReturnNoMedia: @"media is not present",
@kIOReturnUnformattedMedia: @"media is not formatted",
@kIOReturnUnsupportedMode: @"unsupported mode",
@kIOReturnUnderrun: @"data underrun",
@kIOReturnOverrun: @"data overrun",
@kIOReturnDeviceError: @"device error",
@kIOReturnNoCompletion: @"no completion routine",
@kIOReturnAborted: @"operation was aborted",
@kIOReturnNoBandwidth: @"bus bandwidth would be exceeded",
@kIOReturnNotResponding: @"device is not responding",
@kIOReturnInvalid: @"unanticipated driver error",
@0: @"0"};
return [ioReturnMap objectForKey:[NSNumber numberWithInt:err_get_code(errorVal)]];
}
Basé sur [cette page] (https://developer.apple.com/library/mac/documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_Handling_Errors/AH_Handling_Errors.html), vous devriez probablement utiliser la macro 'err_get_code()' pour extraire le code d'erreur en premier. – augurar
Alors, quel était le code d'erreur 0x10? (Je l'éprouve maintenant.) Merci! –