2010-10-08 5 views
2

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

+0

Alors, quel était le code d'erreur 0x10? (Je l'éprouve maintenant.) Merci! –

Répondre

2

l'exécution de code dans le noyau peut utiliser IOService::stringFromReturn(...)

+0

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. –

+1

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. –

1

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)]]; 
} 
+1

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

Questions connexes