파일 설명에 동의 LIBUSB : FD 내가수정은 다음과 같이 내가 libusb1.0 open 함수를 수정
를 호출 할 때 Unfortunatelly 내가 오류가 계속 android.hardware.usb.UsbDeviceConnection.html#getFileDescriptor()final UsbDeviceConnection connection = manager.openDevice(device);
return connection.getFileDescriptor();
을 통해 얻은
static int op_open2(struct libusb_device_handle *handle, int fd) {
struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
hpriv->fd = fd;
return usbi_add_pollfd(HANDLE_CTX(handle), hpriv->fd, POLLOUT);
}
static int op_claim_interface(struct libusb_device_handle *handle, int iface)
{
int fd = _device_handle_priv(handle)->fd;
int r = ioctl(fd, IOCTL_USBFS_CLAIMINTF, &iface);
if (r) {
if (errno == ENOENT)
return LIBUSB_ERROR_NOT_FOUND;
else if (errno == EBUSY)
return LIBUSB_ERROR_BUSY;
else if (errno == ENODEV)
return LIBUSB_ERROR_NO_DEVICE;
usbi_err(HANDLE_CTX(handle),
"claim interface failed, error %d errno %d", r, errno);
return LIBUSB_ERROR_OTHER;
}
return 0;
}
claim 인터페이스가 실패했습니다. 오류 -1 errno 9
"잘못된 파일 번호"로 번역됩니다. Java에서 얻은 파일 설명자는 양의 정수입니다.
유일한 다른 세부 사항은 내 원시 코드가 Java ProcessBuilder로 생성 된 별도의 바이너리로 실행된다는 것입니다. 하지만 그들은 같은 uid를 공유하기 때문에 나는 자바로부터받은 USB 권한이 여전히 libusb에 적용되어야한다고 생각합니다.
나는 플랫폼에 독립적 일 필요가없는, 그래서 어떤 해킹 작업 : 어떤 생각이 많이 주시면 감사하겠습니다
할 것입니다!
추가 정보! 내가 lsof를 에서 얻을 출력은 제가 my_exe에 전달 파일 기술자 (44)가 실제로 상속이 아니라고 생각한다
my.activity 13374 u0_a62 exe ??? ??? ??? ??? /system/bin/app_process
my.activity 13374 u0_a62 0 ??? ??? ??? ??? /dev/null
my.activity 13374 u0_a62 1 ??? ??? ??? ??? /dev/null
my.activity 13374 u0_a62 2 ??? ??? ??? ??? /dev/null
my.activity 13374 u0_a62 3 ??? ??? ??? ??? /dev/log/main
my.activity 13374 u0_a62 4 ??? ??? ??? ??? /dev/log/radio
my.activity 13374 u0_a62 5 ??? ??? ??? ??? /dev/log/events
my.activity 13374 u0_a62 6 ??? ??? ??? ??? /dev/log/system
my.activity 13374 u0_a62 7 ??? ??? ??? ??? /system/framework/core.jar
my.activity 13374 u0_a62 8 ??? ??? ??? ??? /system/framework/core-junit.jar
my.activity 13374 u0_a62 9 ??? ??? ??? ??? /dev/__properties__ (deleted)
...
my.activity 13374 u0_a62 44 ??? ??? ??? ??? /dev/bus/usb/002/002
...
my.activity 13374 u0_a62 51 ??? ??? ??? ??? pipe:[51015]
my.activity 13374 u0_a62 53 ??? ??? ??? ??? pipe:[51016]
...
my_exe 13546 u0_a62 exe ??? ??? ??? ??? /data/data/my.activity/files/my_exe
my_exe 13546 u0_a62 0 ??? ??? ??? ??? pipe:[51015]
my_exe 13546 u0_a62 1 ??? ??? ??? ??? pipe:[51016]
my_exe 13546 u0_a62 2 ??? ??? ??? ??? pipe:[51016]
my_exe 13546 u0_a62 3 ??? ??? ??? ??? /dev/log/main
my_exe 13546 u0_a62 4 ??? ??? ??? ??? /dev/log/radio
my_exe 13546 u0_a62 5 ??? ??? ??? ??? /dev/log/events
my_exe 13546 u0_a62 6 ??? ??? ??? ??? /dev/log/system
my_exe 13546 u0_a62 9 ??? ??? ??? ??? /dev/__properties__ (deleted)
my_exe 13546 u0_a62 mem ??? b3:09 0 302530 /data/data/my.activity/files/my_exe
my_exe 13546 u0_a62 mem ??? b3:09 36864 302530 /data/data/my.activity/files/my_exe
my_exe 13546 u0_a62 mem ??? b3:09 40960 302530 /data/data/my.activity/files/my_exe
my_exe 13546 u0_a62 mem ??? b3:03 0 200 /system/bin/linker
my_exe 13546 u0_a62 mem ??? b3:03 57344 200 /system/bin/linker
my_exe 13546 u0_a62 mem ??? b3:03 61440 200 /system/bin/linker
(그것의 가장 흥미로운 부분을 강조 단축)입니다!
나는 유닉스 소켓을 사용하여 파일 기술자를 전달하지만 불행히도 나는 항상 LIBUSB_ERROR_BUSY를 얻고있다. fd는 양수이므로 좋을 것 같습니다. 안드로이드 애플 리케이션 난 그냥 장치를 열고 인터페이스를 요구하지 않습니다. 나는 pid/vid를 사용하여 검색 할 때 올바른 장치를 열어야한다. 뭐가 문제 야? – 4ntoine