Android shell中的“未知错误517”是什么意思?

时间:2015-12-05 01:07:49

标签: android shell mksh

我正在尝试写入Android shell中的角色设备。但是对于一系列操作,mksh以“未知错误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 */

有什么想法会导致这个问题吗?

2 个答案:

答案 0 :(得分:3)

正如您所发现的,517是linux错误EPROBE_DEFER的值,它只是意味着设备驱动程序告诉Linux内核稍后尝试探测特定设备。 Linux内核在希望驱动程序准备设备以供使用时调用驱动程序的probe()方法。

不幸的是,EPROBE_DEFER没有告诉您为什么需要重试探测,也不会告诉您可能需要做什么来确保在重试时它会成功。 Here is a thread抱怨这一点。

答案 1 :(得分:2)

这只是因为bionic’s error definitions不知道errno#517(还)。 mksh只使用操作系统(的C库) - 在这种情况下,Android的仿生 - 提供。

当底层操作系统(的C库)不知道底层操作系统(内核)生成的错误时,

This part of shf.c会生成Unknown error: %d消息,这就是这种情况