0

我正在尝试在 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源代码也无法提供任何见解。

我还在EPROBE_DEFERLinux 内核源代码的文件中找到了该标签:../include/linux/errno.h

#define EPROBE_DEFER    517     /* Driver requests probe retry */

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

4

2 回答 2

3

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

不幸的是,EPROBE_DEFER它没有告诉您为什么需要重试探测,也没有告诉您在重试后可能需要做些什么来确保它会成功。这是一个抱怨这一点的线程。

于 2015-12-05T02:00:44.823 回答
2

这仅仅是因为仿生的错误定义不知道 errno #517(还)。mksh只使用操作系统(的 C 库)——在这种情况下是 Android 的仿生——提供的东西。

shf.cUnknown error: %d当底层操作系统(的 C 库)不知道底层操作系统(的内核)生成的错误时,这部分会生成消息,这里就是这种情况

于 2017-01-31T18:37:36.600 回答