Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drivers not detected due to permission error in android 11? #20

Open
NikhilUsadadiya opened this issue Nov 14, 2022 · 8 comments
Open
Labels
question Further information is requested

Comments

@NikhilUsadadiya
Copy link

Hi,
First of all thanks for this library reference to understand the Android UART. Actually facing an issue with this is whenever I run the app then it wasn't able to read the drivers.

Exception:- java.io.FileNotFoundException: /proc/tty/drivers: open failed: EACCES (Permission denied)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)

I am using this in the rooted device. Can you please help with some guidance for this? Thanks @xmaihh

@xmaihh
Copy link
Owner

xmaihh commented Nov 15, 2022

Right, cannot open /dev/tty: Permission denied. As mentioned above, #FAQ This library does not provide ROOT permissions, please open the serial port '666' permissions yourself. I think it's because you have broken permissions for that device file.
I suggest you should just double-check if you are have permissions.

See which UARTs are detected in /proc/tty/driver/serial. Lines with uart:unknown meaning: Nothing detected (probably not present).

# cat /proc/tty/driver/serial 
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:16550A port:000002F8 irq:3 tx:111780 rx:1321 RTS|DTR|DSR
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3

If something is connected and driving the CTS, DSR or CD lines (those are input lines), you can even be sure that something is there... same goes for rx-byte-count.

There is also a command setserial which uses /proc/tty/driver/serial get its data.

# setserial -g /dev/ttyS[0123]
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

You can confirm that this device file is accessible like this.

crw-rw-rw- system   system     4,  64 1970-01-01 08:00 ttyS0
crw-rw-rw- system   system     4,  65 1970-01-01 08:00 ttyS1

@NikhilUsadadiya
Copy link
Author

Hi @xmaihh
The cat /proc/tty/driver/serial does show two UARTs, so they are already available there as well as the permission is also changed to "rwx" for any user type but still it doesn't work.
Also, the test is done in Android 11 as per mentioned in the title of the issue but generated the permission denied error in android 11 and working in Android version 7 (SDK 25).

The same reference code is tested in a device having Android 7 and the device is not rooted. The device is logging the detected drivers as below:-

  • Found new driver g_serial on /dev/ttyGS
  • Found new driver mtk-uart on /dev/ttyMT

The detection of drivers is done in the older version of Android (7.0 – Nougat) but not detecting the drivers in Android 11 which we need to do. Detection of the driver is possible only till Android SDK version 25 (Android version 7 - Nougat). After Android SDK version 26 (Android version 8.0 - Oreo), it’s not working and generating the permission denied error. I also tried the commands by making the app a system app, but I still, have the same permission issue in Android 11.

Are there any known issues with Android 11?

@xmaihh
Copy link
Owner

xmaihh commented Nov 17, 2022

Thank you for sharing @NikhilUsadadiya, I didn't find the proper solution yet, I didn't test in Android 11 environment now.

On an Android 11 device your app only has access to its own files and to general mediafies in public directories. You have options to read the file. Request MANAGE_EXTERNAL_STORAGE in manifest and let the user confirm.

Regards,

X.

@NikhilUsadadiya
Copy link
Author

Yes, @xmaihh, I have added the request permission in the manifest file also and tried to change the permission and detection of drivers in android 11, but fails to do so. Also, the Request MANAGE_EXTERNAL_STORAGE in the manifest will only allow the user to access the public directories right. It will not allow access or change the value in the root directories right?

@cagnulein
Copy link

@NikhilUsadadiya I'm facing the same issue. Did you solve it?

@Mr-Jiang
Copy link

Mr-Jiang commented Aug 3, 2023

look this

https://blog.csdn.net/jspping/article/details/131852570?spm=1001.2014.3001.5501

@xmaihh xmaihh added the question Further information is requested label Sep 11, 2023
@bostin
Copy link

bostin commented Sep 24, 2023

请问下,这个有啥简单的解决方法不?

@blankhang
Copy link
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

6 participants