• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

applypatch/22-Nov-2023-3,7992,549

boot_control/22-Nov-2023-436286

bootloader_message/22-Nov-2023-508296

edify/22-Nov-2023-1,043744

etc/22-Nov-2023-10580

fonts/22-Nov-2023-10179

minadbd/22-Nov-2023-417207

minui/22-Nov-2023-2,6391,902

otafault/22-Nov-2023-538332

otautil/22-Nov-2023-1,232755

private/22-Nov-2023-327

res-560dpi/images/22-Nov-2023-

res-hdpi/images/22-Nov-2023-

res-mdpi/images/22-Nov-2023-

res-xhdpi/images/22-Nov-2023-

res-xxhdpi/images/22-Nov-2023-

res-xxxhdpi/images/22-Nov-2023-

tests/22-Nov-2023-5,1643,737

tools/22-Nov-2023-1,6281,270

uncrypt/22-Nov-2023-764544

update_verifier/22-Nov-2023-469283

updater/22-Nov-2023-3,6302,543

.clang-formatD22-Nov-2023307 1512

.gitD01-Jan-19700

Android.bpD22-Nov-2023117 98

Android.mkD22-Nov-20237.1 KiB281202

CleanSpec.mkD22-Nov-20232.4 KiB522

NOTICED22-Nov-202310.4 KiB191158

OWNERSD22-Nov-202351 43

PREUPLOAD.cfgD22-Nov-2023170 75

README.mdD22-Nov-20235.5 KiB141100

adb_install.cppD22-Nov-20234.3 KiB14497

adb_install.hD22-Nov-2023740 234

asn1_decoder.cppD22-Nov-20233.6 KiB159125

asn1_decoder.hD22-Nov-20231.7 KiB5632

bootloader.hD22-Nov-2023775 191

common.hD22-Nov-20231.4 KiB5016

default_device.cppD22-Nov-2023734 235

device.cppD22-Nov-20232.3 KiB8960

device.hD22-Nov-20234.2 KiB11143

fuse_sdcard_provider.cppD22-Nov-20232.4 KiB8451

fuse_sdcard_provider.hD22-Nov-2023738 234

fuse_sideload.cppD22-Nov-202315.2 KiB493327

fuse_sideload.hD22-Nov-20231.5 KiB4115

install.cppD22-Nov-202325.8 KiB729539

install.hD22-Nov-20231.7 KiB4412

interlace-frames.pyD22-Nov-20233.5 KiB11569

mounts.cppD22-Nov-20232.3 KiB8354

mounts.hD22-Nov-2023847 297

recovery-persist.cppD22-Nov-20235.1 KiB17197

recovery-persist.rcD22-Nov-2023127 43

recovery-refresh.cppD22-Nov-20232.6 KiB7224

recovery-refresh.rcD22-Nov-202376 32

recovery.cppD22-Nov-202356.6 KiB1,7181,271

roots.cppD22-Nov-202311.2 KiB396316

roots.hD22-Nov-20232 KiB5713

rotate_logs.cppD22-Nov-20233.5 KiB10872

rotate_logs.hD22-Nov-20231.3 KiB3912

screen_ui.cppD22-Nov-202328.6 KiB960761

screen_ui.hD22-Nov-20236.7 KiB224121

stub_ui.hD22-Nov-20231.9 KiB6635

ui.cppD22-Nov-202318.8 KiB583429

ui.hD22-Nov-20237 KiB227113

verifier.cppD22-Nov-202317.8 KiB554358

verifier.hD22-Nov-20232.2 KiB7742

vr_device.cppD22-Nov-2023729 245

vr_ui.cppD22-Nov-20232.3 KiB6639

vr_ui.hD22-Nov-20231.5 KiB4318

wear_device.cppD22-Nov-2023731 245

wear_ui.cppD22-Nov-20236.3 KiB201139

wear_ui.hD22-Nov-20231.5 KiB5321

README.md

1The Recovery Image
2==================
3
4Quick turn-around testing
5-------------------------
6
7    mm -j && m ramdisk-nodeps && m recoveryimage-nodeps
8
9    # To boot into the new recovery image
10    # without flashing the recovery partition:
11    adb reboot bootloader
12    fastboot boot $ANDROID_PRODUCT_OUT/recovery.img
13
14Running the tests
15-----------------
16    # After setting up environment and lunch.
17    mmma -j bootable/recovery
18
19    # Running the tests on device.
20    adb root
21    adb sync data
22
23    # 32-bit device
24    adb shell /data/nativetest/recovery_unit_test/recovery_unit_test
25    adb shell /data/nativetest/recovery_component_test/recovery_component_test
26
27    # Or 64-bit device
28    adb shell /data/nativetest64/recovery_unit_test/recovery_unit_test
29    adb shell /data/nativetest64/recovery_component_test/recovery_component_test
30
31Running the manual tests
32------------------------
33
34`recovery-refresh` and `recovery-persist` executables exist only on systems without
35/cache partition. And we need to follow special steps to run tests for them.
36
37- Execute the test on an A/B device first. The test should fail but it will log
38  some contents to pmsg.
39
40- Reboot the device immediately and run the test again. The test should save the
41  contents of pmsg buffer into /data/misc/recovery/inject.txt. Test will pass if
42  this file has expected contents.
43
44`ResourceTest` validates whether the png files are qualified as background text
45image under recovery.
46
47    1. `adb sync data` to make sure the test-dir has the images to test.
48    2. The test will automatically pickup and verify all `_text.png` files in
49       the test dir.
50
51Using `adb` under recovery
52--------------------------
53
54When running recovery image from debuggable builds (i.e. `-eng` or `-userdebug` build variants, or
55`ro.debuggable=1` in `/prop.default`), `adbd` service is enabled and started by default, which
56allows `adb` communication. A device should be listed under `adb devices`, either in `recovery` or
57`sideload` state.
58
59    $ adb devices
60    List of devices attached
61    1234567890abcdef    recovery
62
63Although `/sbin/adbd` shares the same binary between normal boot and recovery images, only a subset
64of `adb` commands are meaningful under recovery, such as `adb root`, `adb shell`, `adb push`, `adb
65pull` etc. `adb shell` works only after manually mounting `/system` from recovery menu (assuming a
66valid system image on device).
67
68## Troubleshooting
69
70### `adb devices` doesn't show the device.
71
72    $ adb devices
73    List of devices attached
74
75 * Ensure `adbd` is built and running.
76
77By default, `adbd` is always included into recovery image, as `/sbin/adbd`. `init` starts `adbd`
78service automatically only in debuggable builds. This behavior is controlled by the recovery
79specific `/init.rc`, whose source code is at `bootable/recovery/etc/init.rc`.
80
81The best way to confirm a running `adbd` is by checking the serial output, which shows a service
82start log as below.
83
84    [   18.961986] c1      1 init: starting service 'adbd'...
85
86 * Ensure USB gadget has been enabled.
87
88If `adbd` service has been started but device not shown under `adb devices`, use `lsusb(8)` (on
89host) to check if the device is visible to the host.
90
91`bootable/recovery/etc/init.rc` disables Android USB gadget (via sysfs) as part of the `fs` action
92trigger, and will only re-enable it in debuggable builds (the `on property` rule will always run
93_after_ `on fs`).
94
95    on fs
96        write /sys/class/android_usb/android0/enable 0
97
98    # Always start adbd on userdebug and eng builds
99    on property:ro.debuggable=1
100        write /sys/class/android_usb/android0/enable 1
101        start adbd
102
103If device is using [configfs](https://www.kernel.org/doc/Documentation/usb/gadget_configfs.txt),
104check if configfs has been properly set up in init rc scripts. See the [example
105configuration](https://android.googlesource.com/device/google/wahoo/+/master/init.recovery.hardware.rc)
106for Pixel 2 devices. Note that the flag set via sysfs (i.e. the one above) is no-op when using
107configfs.
108
109### `adb devices` shows the device, but in `unauthorized` state.
110
111    $ adb devices
112    List of devices attached
113    1234567890abcdef    unauthorized
114
115recovery image doesn't honor the USB debugging toggle and the authorizations added under normal boot
116(because such authorization data stays in /data, which recovery doesn't mount), nor does it support
117authorizing a host device under recovery. We can use one of the following options instead.
118
119 * **Option 1 (Recommended):** Authorize a host device with adb vendor keys.
120
121For debuggable builds, an RSA keypair can be used to authorize a host device that has the private
122key. The public key, defined via `PRODUCT_ADB_KEYS`, will be copied to `/adb_keys`. When starting
123the host-side `adbd`, make sure the filename (or the directory) of the matching private key has been
124added to `$ADB_VENDOR_KEYS`.
125
126    $ export ADB_VENDOR_KEYS=/path/to/adb/private/key
127    $ adb kill-server
128    $ adb devices
129
130`-user` builds filter out `PRODUCT_ADB_KEYS`, so no `/adb_keys` will be included there.
131
132Note that this mechanism applies to both of normal boot and recovery modes.
133
134 * **Option 2:** Allow `adbd` to connect without authentication.
135   * `adbd` is compiled with `ALLOW_ADBD_NO_AUTH` (only on debuggable builds).
136   * `ro.adb.secure` has a value of `0`.
137
138Both of the two conditions need to be satisfied. Although `ro.adb.secure` is a runtime property, its
139value is set at build time (written into `/prop.default`). It defaults to `1` on `-user` builds, and
140`0` for other build variants. The value is overridable via `PRODUCT_DEFAULT_PROPERTY_OVERRIDES`.
141