"Unknown error 517"在Androidshell中是什么意思?
What does "Unknown error 517" mean in Android shell?
我正在尝试写入 Android shell 中的字符设备。但是 mksh 对整个操作范围以 "Unknown error 517" 响应。我尝试使用 strace 来追踪问题,但没有帮助。这也会发生在 AOS 4.4 中的整个设备节点范围内,但不会出现在 4.2 中。
我就是这样做的:
# chmod 666 /dev/smd0
Unable to open /dev/smd0: Unknown error 517
# cat /dev/smd0
tmp-mksh: cat: /dev/smd0: Unknown error 517
设备在那里,我既可以创建它 (mknod) 也可以删除它,所以据我所知这不是权限问题。
# ls /dev/smd0
crw-rw---- 1 1000 1000 222, 0 Feb 13 2014 /dev/smd0
我在 strace 中得到的是:
ioctl(10</dev/tty>, SNDCTL_TMR_STOP or TCSETSW, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
ioctl(10</dev/tty>, TIOCSPGRP, [23069]) = 0
[pid 23069] open("/dev/smd0", O_RDONLY|O_LARGEFILE) = -1 EPROBE_DEFER (Unknown error 517)
[pid 23069] open("/dev/smd0", O_WRONLY|O_LARGEFILE) = -1 EPROBE_DEFER (Unknown error 517)
[pid 23069] write(2</dev/pts/5>, "Unable to open /dev/smd0: Unknown error 517\n", 44) = 44
查看 shf.c 文件中的 mksh 来源也没有提供任何见解。
我还在 Linux 内核源代码中找到了 EPROBE_DEFER
标签,在文件中:../include/linux/errno.h:
#define EPROBE_DEFER 517 /* Driver requests probe retry */
有什么可能导致此问题的想法吗?
如您所见,517
是 linux 错误 EPROBE_DEFER
的值,它只是意味着设备驱动程序正在告诉 linux 内核稍后尝试探测特定设备。 Linux 内核在希望驱动程序准备设备以供使用时调用驱动程序的 probe()
方法。
遗憾的是,EPROBE_DEFER
没有告诉您为什么需要重试探测,也没有告诉您可能需要做什么来确保重试成功。 Here is a thread 抱怨那个。
这仅仅是因为 bionic’s error definitions 还不知道 errno #517(还)。 mksh
只是使用操作系统(的 C 库) — 在这种情况下,Android 的仿生 — 提供。
This part of shf.c
当底层操作系统(的 C 库)不知道底层操作系统(的内核)生成的错误时生成 Unknown error: %d
消息,这是在这里案.
我正在尝试写入 Android shell 中的字符设备。但是 mksh 对整个操作范围以 "Unknown error 517" 响应。我尝试使用 strace 来追踪问题,但没有帮助。这也会发生在 AOS 4.4 中的整个设备节点范围内,但不会出现在 4.2 中。
我就是这样做的:
# chmod 666 /dev/smd0
Unable to open /dev/smd0: Unknown error 517
# cat /dev/smd0
tmp-mksh: cat: /dev/smd0: Unknown error 517
设备在那里,我既可以创建它 (mknod) 也可以删除它,所以据我所知这不是权限问题。
# ls /dev/smd0
crw-rw---- 1 1000 1000 222, 0 Feb 13 2014 /dev/smd0
我在 strace 中得到的是:
ioctl(10</dev/tty>, SNDCTL_TMR_STOP or TCSETSW, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
ioctl(10</dev/tty>, TIOCSPGRP, [23069]) = 0
[pid 23069] open("/dev/smd0", O_RDONLY|O_LARGEFILE) = -1 EPROBE_DEFER (Unknown error 517)
[pid 23069] open("/dev/smd0", O_WRONLY|O_LARGEFILE) = -1 EPROBE_DEFER (Unknown error 517)
[pid 23069] write(2</dev/pts/5>, "Unable to open /dev/smd0: Unknown error 517\n", 44) = 44
查看 shf.c 文件中的 mksh 来源也没有提供任何见解。
我还在 Linux 内核源代码中找到了 EPROBE_DEFER
标签,在文件中:../include/linux/errno.h:
#define EPROBE_DEFER 517 /* Driver requests probe retry */
有什么可能导致此问题的想法吗?
如您所见,517
是 linux 错误 EPROBE_DEFER
的值,它只是意味着设备驱动程序正在告诉 linux 内核稍后尝试探测特定设备。 Linux 内核在希望驱动程序准备设备以供使用时调用驱动程序的 probe()
方法。
遗憾的是,EPROBE_DEFER
没有告诉您为什么需要重试探测,也没有告诉您可能需要做什么来确保重试成功。 Here is a thread 抱怨那个。
这仅仅是因为 bionic’s error definitions 还不知道 errno #517(还)。 mksh
只是使用操作系统(的 C 库) — 在这种情况下,Android 的仿生 — 提供。
This part of shf.c
当底层操作系统(的 C 库)不知道底层操作系统(的内核)生成的错误时生成 Unknown error: %d
消息,这是在这里案.