Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

#! /usr/bin/env python

"""
Error number definitions for Linux.
"""

EPERM =                 1
ENOENT =                2
ESRCH =                 3
EINTR =                 4
EIO =                   5
ENXIO =                 6
E2BIG =                 7
ENOEXEC =               8
EBADF =                 9
ECHILD =                10
EAGAIN =                11
ENOMEM =                12
EACCES =                13
EFAULT =                14
ENOTBLK =               15
EBUSY =                 16
EEXIST =                17
EXDEV =                 18
ENODEV =                19
ENOTDIR =               20
EISDIR =                21
EINVAL =                22
ENFILE =                23
EMFILE =                24
ENOTTY =                25
ETXTBSY =               26
EFBIG =                 27
ENOSPC =                28
ESPIPE =                29
EROFS =                 30
EMLINK =                31
EPIPE =                 32
EDOM =                  33
ERANGE =                34
EDEADLK =               35
ENAMETOOLONG =          36
ENOLCK =                37
ENOSYS =                38
ENOTEMPTY =             39
ELOOP =                 40
#                       41 unused
ENOMSG =                42
EIDRM =                 43
ECHRNG =                44
EL2NSYNC =              45
EL3HLT =                46
EL3RST =                47
ELNRNG =                48
EUNATCH =               49
ENOCSI =                50
EL2HLT =                51
EBADE =                 52
EBADR =                 53
EXFULL =                54
ENOANO =                55
EBADRQC =               56
EBADSLT =               57
#                       58 unused
EBFONT =                59
ENOSTR =                60
ENODATA =               61
ETIME =                 62
ENOSR =                 63
ENONET =                64
ENOPKG =                65
EREMOTE =               66
ENOLINK =               67
EADV =                  68
ESRMNT =                69
ECOMM =                 70
EPROTO =                71
EMULTIHOP =             72
EDOTDOT =               73
EBADMSG =               74
EOVERFLOW =             75
ENOTUNIQ =              76
EBADFD =                77
EREMCHG =               78
ELIBACC =               79
ELIBBAD =               80
ELIBSCN =               81
ELIBMAX =               82
ELIBEXEC =              83
EILSEQ =                84
ERESTART =              85
ESTRPIPE =              86
EUSERS =                87
ENOTSOCK =              88
EDESTADDRREQ =          89
EMSGSIZE =              90
EPROTOTYPE =            91
ENOPROTOOPT =           92
EPROTONOSUPPORT =       93
ESOCKTNOSUPPORT =       94
EOPNOTSUPP =            95
EPFNOSUPPORT =          96
EAFNOSUPPORT =          97
EADDRINUSE =            98
EADDRNOTAVAIL =         99
ENETDOWN =              100
ENETUNREACH =           101
ENETRESET =             102
ECONNABORTED =          103
ECONNRESET =            104
ENOBUFS =               105
EISCONN =               106
ENOTCONN =              107
ESHUTDOWN =             108
ETOOMANYREFS =          109
ETIMEDOUT =             110
ECONNREFUSED =          111
EHOSTDOWN =             112
EHOSTUNREACH =          113
EALREADY =              114
EINPROGRESS =           115
ESTALE =                116
EUCLEAN =               117
ENOTNAM =               118
ENAVAIL =               119
EISNAM =                120
EREMOTEIO =             121
EDQUOT =                122
ENOMEDIUM =             123
EMEDIUMTYPE =           124
ECANCELED =             125
ENOKEY =                126
EKEYEXPIRED =           127
EKEYREVOKED =           128
EKEYREJECTED =          129
EOWNERDEAD =            130
ENOTRECOVERABLE =       131
ERFKILL =               132
EHWPOISON =             133

_strerror = {
    EPERM:              'Permission denied',
    ENOENT:             'No such file or directory',
    ESRCH:              'No such process',
    EINTR:              'Interrupted system call',
    EIO:                'Input/output error',
    ENXIO:              'Device not configured',
    E2BIG:              'Argument list too long',
    ENOEXEC:            'Exec format error',
    EBADF:              'Bad file descriptor',
    ECHILD:             'No child processes',
    EAGAIN:             'Resource temporarily unavailable',
    ENOMEM:             'Cannot allocate memory',
    EACCES:             'Permission denied',
    EFAULT:             'Bad address',
    ENOTBLK:            'Block device required',
    EBUSY:              'Device busy',
    EEXIST:             'File exists',
    EXDEV:              'Cross-device link',
    ENODEV:             'Operation not supported by device',
    ENOTDIR:            'Not a directory',
    EISDIR:             'Is a directory',
    EINVAL:             'Invalid argument',
    ENFILE:             'Too many open files in system',
    EMFILE:             'Too many open files',
    ENOTTY:             'Inappropriate ioctl for device',
    ETXTBSY:            'Text file busy',
    EFBIG:              'File too large',
    ENOSPC:             'No space left on device',
    ESPIPE:             'Illegal seek',
    EROFS:              'Read-only filesystem',
    EMLINK:             'Too many links',
    EPIPE:              'Broken pipe',
    EDOM:               'Numerical argument out of domain',
    ERANGE:             'Result too large',
    EDEADLK:            'Resource deadlock avoided',
    ENAMETOOLONG:       'File name too long',
    ENOLCK:             'No locks available',
    ENOSYS:             'Function not implemented',
    ENOTEMPTY:          'Directory not empty',
    ELOOP:              'Too many levels of symbolic links',
    ENOMSG:             'No message of desired type',
    EIDRM:              'Identifier removed',
    ECHRNG:             'Channel number out of range',
    EL2NSYNC:           'Level 2 not synchronized',
    EL3HLT:             'Level 3 halted',
    EL3RST:             'Level 3 reset',
    ELNRNG:             'Link number out of range',
    EUNATCH:            'Protocol driver not attached',
    ENOCSI:             'No CSI structure available',
    EL2HLT:             'Level 2 halted',
    EBADE:              'Invalid exchange',
    EBADR:              'Invalid request descriptor',
    EXFULL:             'Exchange full',
    ENOANO:             'No anode',
    EBADRQC:            'Invalid request code',
    EBADSLT:            'Invalid slot',
    EBFONT:             'Bad font file format',
    ENOSTR:             'Device not a stream',
    ENODATA:            'No data available',
    ETIME:              'Timer expired',
    ENOSR:              'Out of streams resources',
    ENONET:             'Machine is not on the network',
    ENOPKG:             'Package not installed',
    EREMOTE:            'Object is remote',
    ENOLINK:            'Link has been severed',
    EADV:               'Advertise error',
    ESRMNT:             'Srmount error',
    ECOMM:              'Communication error on send',
    EPROTO:             'Protocol error',
    EMULTIHOP:          'Multihop attempted',
    EDOTDOT:            'RFS specific error',
    EBADMSG:            'Bad message',
    EOVERFLOW:          'Value too large for defined data type',
    ENOTUNIQ:           'Name not unique on network',
    EBADFD:             'File descriptor in bad state',
    EREMCHG:            'Remote address changed',
    ELIBACC:            'Can not access a needed shared library',
    ELIBBAD:            'Accessing a corrupted shared library',
    ELIBSCN:            '.lib section in a.out corrupted',
    ELIBMAX:            'Attempting to link in too many shared libraries',
    ELIBEXEC:           'Cannot exec a shared library directly',
    EILSEQ:             'Invalid or incomplete multibyte or wide character',
    ERESTART:           'Interrupted system call should be restarted',
    ESTRPIPE:           'Streams pipe error',
    EUSERS:             'Too many users',
    ENOTSOCK:           'Socket operation on non-socket',
    EDESTADDRREQ:       'Destination address required',
    EMSGSIZE:           'Message too long',
    EPROTOTYPE:         'Protocol wrong type for socket',
    ENOPROTOOPT:        'Protocol not available',
    EPROTONOSUPPORT:    'Protocol not supported',
    ESOCKTNOSUPPORT:    'Socket type not supported',
    EOPNOTSUPP:         'Operation not supported',
    EPFNOSUPPORT:       'Protocol family not supported',
    EAFNOSUPPORT:       'Address family not supported by protocol',
    EADDRINUSE:         'Address already in use',
    EADDRNOTAVAIL:      'Cannot assign requested address',
    ENETDOWN:           'Network is down',
    ENETUNREACH:        'Network is unreachable',
    ENETRESET:          'Network dropped connection on reset',
    ECONNABORTED:       'Software caused connection abort',
    ECONNRESET:         'Connection reset by peer',
    ENOBUFS:            'No buffer space available',
    EISCONN:            'Transport endpoint is already connected',
    ENOTCONN:           'Transport endpoint is not connected',
    ESHUTDOWN:          'Cannot send after transport endpoint shutdown',
    ETOOMANYREFS:       'Too many references: cannot splice',
    ETIMEDOUT:          'Connection timed out',
    ECONNREFUSED:       'Connection refused',
    EHOSTDOWN:          'Host is down',
    EHOSTUNREACH:       'No route to host',
    EALREADY:           'Operation already in progress',
    EINPROGRESS:        'Operation now in progress',
    ESTALE:             'Stale file handle',
    EUCLEAN:            'Structure needs cleaning',
    ENOTNAM:            'Not a XENIX named type file',
    ENAVAIL:            'No XENIX semaphores available',
    EISNAM:             'Is a named type file',
    EREMOTEIO:          'Remote I/O error',
    EDQUOT:             'Quota exceeded',
    ENOMEDIUM:          'No medium found',
    EMEDIUMTYPE:        'Wrong medium type',
    ECANCELED:          'Operation canceled',
    ENOKEY:             'Required key not available',
    EKEYEXPIRED:        'Key has expired',
    EKEYREVOKED:        'Key has been revoked',
    EKEYREJECTED:       'Key was rejected by service',
    EOWNERDEAD:         'Owner died',
    ENOTRECOVERABLE:    'State not recoverable',
    ERFKILL:            'Operation not possible due to RF-kill',
    EHWPOISON:          'Memory page has hardware error',
}

def strerror(errnum):
    """
    Translate Linux errno to string.

    >>> strerror(ENOKEY)
    'Required key not available'
    >>> strerror(41)
    'Unknown error 41'
    """
    ret = _strerror.get(errnum)
    if ret:
        return ret
    return 'Unknown error {0}'.format(errnum)

if __name__ == '__main__':
    import doctest
    doctest.testmod()