sonyxperiadev / bug_tracker

Empty repository that is used as a bugtracker for Open Devices project
52 stars 13 forks source link

[Maple] - Android 8.1 - volume-up + power does not reveal recovery mode text menu #155

Closed jamuir closed 4 years ago

jamuir commented 6 years ago

Platform: yoshino Device: maple Kernel version: 4.4 Android version: 8.1

Description in a "user" build, the recovery mode text menu should be revealed with the power && volume-up key-chord, but this does not work.

Symptoms you cannot access the recovery mode text-menu in a "user" build (you are stuck at the splash screen with the green android on his back with his chest panel open).

How to reproduce build and flash a "user" image. Enable adb-debugging. Use "adb reboot recovery" to enter recovery. Try the power && volume-up key-chord.

jamuir commented 6 years ago

To be more precise, to enter the "power && volume-up" key-chord, you should hold the Power button and then press Volume Up once; see https://developers.google.com/android/ota .

jamuir commented 6 years ago

https://android.googlesource.com/platform/bootable/recovery/+/android-8.1.0_r43/ui.cpp#530

jamuir commented 6 years ago

When I use getevent to observe what input events are triggered by holding Power and then pressing Volume-Up, it looks like pressing Volume-Up automatically triggers a power-button release event:

# pressing Power, then releasing Power
/dev/input/event0: 0001 0074 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0074 00000000
/dev/input/event0: 0000 0000 00000000
# pressing Power, then pressing Volume-Up (without releasing either button)
/dev/input/event0: 0001 0074 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0074 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0073 00000001
/dev/input/event6: 0001 0073 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event6: 0000 0000 00000000

Even though I am holding down the power button, when I press volume-up, the power button is registered as being released. This may explain why the key combination is not detected in recovery mode.

oshmoun commented 6 years ago

@kholk isn't this what was noticed previously with the resin hack?

kholk commented 6 years ago

Na, that's totally different

jamuir commented 6 years ago

Is this a hardware limitation? or is it something that can be adjusted in the kernel?

oshmoun commented 6 years ago

That can be checked easily on stock or a stock based custom rom, by running getevent there and comparing the output

jamuir commented 6 years ago

I just flashed 47.1.A.12.119 and the output of "getevent" is the same.

I'm not able to draw any conclusion from that.

I still don't know if this is a hardware limitation (i.e. maybe the maple device is simply not capable of reporting power && volume-up), or if it is something that could be fixed in the kernel.

oshmoun commented 6 years ago

Thanks for checking. Inclined to think it's hardware then. But yeah that doesn't conclusively prove it.

kholk commented 6 years ago

It's a hardware quirk on the maple board, but that's not anything unsolvable. I'm mostly sure that all it takes to solve it is to play with the debounce values for RESIN in DT and that should be it. I'm sorry I cannot take a look though, I'm still on vacation..!

jamuir commented 6 years ago

Does anyone have a suggestion on how an end-user might be able to wipe the cache partition on a maple device without access to the recovery text-menu?

oshmoun commented 6 years ago

was fastboot format cache tested?

jamuir commented 6 years ago

thanks! I'll try that.

jamuir commented 6 years ago

~fastboot erase cache works.~

jamuir commented 6 years ago

actually, fastboot erase cache is probably not the command to use.

"erase" wipes all files and directories, but some apps expect certain directories to exist under /cache. Those directories do not seem to be recreated automatically.

$ fastboot erase cache 
******** Did you mean to fastboot format this ext4 partition?
Erasing 'cache'                                    OKAY [ 20.519s]
Finished. Total time: 20.520s
$ fastboot reboot
Rebooting                                          
Finished. Total time: 0.201s
$ adb root && adb shell find /cache
/cache

@oshmoun your suggestion to use fastboot format cache is better ~since it recreates the directories~:

$ fastboot format cache
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 97280 4k blocks and 97344 inodes
Filesystem UUID: f078e6b9-83aa-42f1-b4dc-0e0cca08ec3d
Superblock backups stored on blocks: 
        32768

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Sending 'cache' (156 KB)                           OKAY [  0.009s]
Writing 'cache'                                    OKAY [  0.003s]
Finished. Total time: 0.021s
$ fastboot reboot
Rebooting                                          
Finished. Total time: 0.151s
$ adb root && adb shell find /cache
/cache
/cache/backup
/cache/lost+found
/cache/backup_stage
/cache/recovery
oshmoun commented 6 years ago

i don't think fastboot is recreating the folder structure, that's probably Android's doing after boot. the "erase" command erases the whole filesystem on the partition, so Android can't find a filesystem to mount and write the data. Hence, the mountpoint /cache remains empty. the "format" command, in comparison, does create a filesystem which Android is then able to mount.

jamuir commented 6 years ago

I think you are right. the mkdir commands to populate /cache are in init.rc and they should have worked if the cache partition was mounted.

thanks for pointing this out.

jerpelea commented 4 years ago

Deprecated Android version: this bug is old and will be closed