2

我从 Android 应用程序(使用getFileDescriptor() )收到了USB设备的文件描述符,通过 JNI 以本机代码发送它,并通过 Unix 套接字在子进程(AVRDude)中接收它并尝试用于上传。

所以我得到一个“不是打字机”的错误。是不是表示文件描述符传递不正确(是正整数,接收后不等于-1)?或者可能有另一个错误?这可能是权限问题(尽管授予了 UsbDevice 的权限并且通过套接字传递似乎拥有权限,但设备没有植根)?

使用的代码(ser_posix.c在 AVRDude 5_11_0 来源中):

fprintf(stdout, "Try to set baud = %i for fd = %i", baud, usbfd);
if (!isatty(usbfd)) { // Error here!
    fprintf(stderr, "!isatty\n");
    return -ENOTTY;
}

从套接字文件描述符接收后立即检查是否有效(我相信它是):

if (!(fcntl(usbfd, F_GETFL) != -1 || errno != EBADF)) {
    fprintf(stderr, "Invalid file descriptor %d, - %s", usbfd, strerror(errno));
    exit(1);
}

最初 ser_posix 中的文件描述符是这样接收的(我相信它正在工作):

fd = open(port, O_RDWR | O_NOCTTY | O_NONBLOCK);

在我的实现中,我改用 Android 应用程序中的文件描述符。这是预期的吗?

4

0 回答 0