In teoria è l'equivalente di yealink t48u (oppure g?)
- android 4.2.2
- kernel 3.0.36+
- build 47.145.7.450
- Mali400
- RockChip rk3066
- if your phone is on, turn it off
- press and hold the “Headset” button and turn on power (using power adapter or PoE)
- release “Headset/Bluetooth” button after 5 seconds
- the image “W” appears on the display and then the recovery menu
Volume-up e Volume-down servono per selezionare le voci (oppure i numeri sulla tastiera). Il tasto “Headset/Bluetooth” serve per fare invio.
Si può accedere in seriale tramite i pin che si trovano sulla scheda e ci accoglie direttamente adb con l'utente root!
Nota Si può accedere in seriale sia al sistema quando è avviato normalmente, sia quando è in modalità Recovery. Le partizioni montate però sono diverse.
Il sistema è normalmente montato in sola lettura tranne per alcune cartelle. In particolare /mnt/sdcard
corrisponde a quello che in Android è chiamato "Internal Memory".
Queste sono le varie partizioni della memoria e cosa contengono:
Nome | Block Device | Dimensione | Mount point | Type | Accesso |
---|---|---|---|---|---|
misc | /dev/block/mtdblock0 | 4Mb | |||
kernel | /dev/block/mtdblock1 | 8Mb | |||
boot | /dev/block/mtdblock2 | 32Mb | |||
recovery | /dev/block/mtdblock3 | 64Mb | |||
backup | /dev/block/mtdblock4 | 64Mb | |||
info | /dev/block/mtdblock5 | 128Mb | /info | ext4 | rw |
cache | /dev/block/mtdblock6 | 128Mb | /cache | ext4 | |
kpanic | /dev/block/mtdblock7 | 4Mb | |||
system | /dev/block/mtdblock8 | 512Mb | /system | ext4 | ro |
vendor | /dev/block/mtdblock9 | 512Mb | /vendor | ext4 | ro |
userdata | /dev/block/mtdblock10 | 2.0Gb | /data | ext4 | rw |
user | /dev/block/mtdblock11 | 3.8Gb | /mnt/sdcard | vfat | rw |
Per effettuare il backup su chiavetta usb ho trovato in giro qualche guida, comunque dicono di partire stampando le varie partizioni e salvandole una ad una (probabilmente inutile per alcune):
# stop
# cat /proc/mtd
dev: size erasesize name
mtd0: 00400000 00004000 "misc"
mtd1: 00800000 00004000 "kernel"
mtd2: 02000000 00004000 "boot"
mtd3: 04000000 00004000 "recovery"
mtd4: 04000000 00004000 "backup"
mtd5: 08000000 00004000 "info"
mtd6: 08000000 00004000 "cache"
mtd7: 00400000 00004000 "kpanic"
mtd8: 20000000 00004000 "system"
mtd9: 20000000 00004000 "vendor"
mtd10: 80000000 00004000 "userdata"
mtd11: f6000000 00004000 "user"
# mkdir /mnt/usb_storage/backup
# dd if=/dev/mtd/mtd0 of=/mnt/usb_storage/backup/misc.img bs=4096
# dd if=/dev/mtd/mtd1 of=/mnt/usb_storage/backup/kernel.img bs=4096
# dd if=/dev/mtd/mtd2 of=/mnt/usb_storage/backup/boot.img bs=4096
# dd if=/dev/mtd/mtd3 of=/mnt/usb_storage/backup/recovery.img bs=4096
# dd if=/dev/mtd/mtd4 of=/mnt/usb_storage/backup/backup.img bs=4096
# dd if=/dev/mtd/mtd5 of=/mnt/usb_storage/backup/info.img bs=4096
# dd if=/dev/mtd/mtd6 of=/mnt/usb_storage/backup/cache.img bs=4096
# dd if=/dev/mtd/mtd7 of=/mnt/usb_storage/backup/kpanic.img bs=4096
# dd if=/dev/mtd/mtd8 of=/mnt/usb_storage/backup/system.img bs=4096
# dd if=/dev/mtd/mtd9 of=/mnt/usb_storage/backup/vendor.img bs=4096
# dd if=/dev/mtd/mtd10 of=/mnt/usb_storage/backup/userdata.img bs=4096
# start
Per permettere ad android di ottenere i permessi di root è necessario sostituire su
nella cartella /vendor/bin
. Io l'ho sostituito con quello di SuperSU che ho scaricato da questa pagina.
# mount -o remount,rw /vendor
# cp su /vendor/bin/
# cp /vendor/bin/busybox /vendor/bin/busybox.bkp
# cp busybox /vendor/bin/
Dal log del kernel vedo che ci sono apparentemente 2 diversi chip che gestiscono i vari tasti fisici:
- rk29-keypad as /devices/platform/rk29-keypad/input/input0
- tca8418_keypad as /devices/platform/rk30_i2c.2/i2c-2/2-0034/input/input1
Per entrambi, lato Android, c'è un file di configurazione specifico:
- /system/usr/keylayout/rk29-keypad.kl
- /system/usr/keylayout/tca8418_keypad.kl
Posso vedere tutti gli eventi così:
# getevent
add device 1: /dev/input/event4
name: "Goodix Capacitive TouchScreen"
add device 2: /dev/input/event0
name: "rk29-keypad"
add device 3: /dev/input/event1
name: "tca8418_keypad"
add device 4: /dev/input/event3
name: "handset-hook"
add device 5: /dev/input/event2
name: "rk_headsetdet"
Premendo un qualsiasi tasto si vede da quale input arriva e quale segnale. Gli eventi sono in HEX, convertendoli in DEC ottengo il tasto giusto come indentificato nei file .kl
. Questo è quello che succede quando premo il tasto volume-down:
/dev/input/event1: 0004 0004 00000002
/dev/input/event1: 0001 0072 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0004 0004 00000002
/dev/input/event1: 0001 0072 00000000
/dev/input/event1: 0000 0000 00000000
Infatti 0072 in HEX è 114 in DEC che è quello che trovo mappato in /system/usr/keylayout/tca8418_keypad.kl
. In realtà lo trovo anche in rk29-keypad.kl
ma l'unico tasto che risulta effettivamente proveniente da event0
è il primo in alto a destra contrassegnato dalle cuffie e il simbolo del bluetooth (che effettivamente è quello che serve anche per attivare il recovery quindi forse è collegato diversamente).
In teoria dovrei poter anche simulare la pressione di un tasto con il comando sendevent
ma non riesco a farlo funzionare...
Posso però utilizzare il comando input
per mandare un comando:
usage: input [text|keyevent]
input text <string>
input keyevent <event_code>
0 --> "KEYCODE_0"
1 --> "KEYCODE_SOFT_LEFT"
2 --> "KEYCODE_SOFT_RIGHT"
3 --> "KEYCODE_HOME"
4 --> "KEYCODE_BACK"
5 --> "KEYCODE_CALL"
6 --> "KEYCODE_ENDCALL"
7 --> "KEYCODE_0"
8 --> "KEYCODE_1"
9 --> "KEYCODE_2"
10 --> "KEYCODE_3"
11 --> "KEYCODE_4"
12 --> "KEYCODE_5"
13 --> "KEYCODE_6"
14 --> "KEYCODE_7"
15 --> "KEYCODE_8"
16 --> "KEYCODE_9"
17 --> "KEYCODE_STAR"
18 --> "KEYCODE_POUND"
19 --> "KEYCODE_DPAD_UP"
20 --> "KEYCODE_DPAD_DOWN"
21 --> "KEYCODE_DPAD_LEFT"
22 --> "KEYCODE_DPAD_RIGHT"
23 --> "KEYCODE_DPAD_CENTER"
24 --> "KEYCODE_VOLUME_UP"
25 --> "KEYCODE_VOLUME_DOWN"
26 --> "KEYCODE_POWER"
27 --> "KEYCODE_CAMERA"
28 --> "KEYCODE_CLEAR"
29 --> "KEYCODE_A"
30 --> "KEYCODE_B"
31 --> "KEYCODE_C"
32 --> "KEYCODE_D"
33 --> "KEYCODE_E"
34 --> "KEYCODE_F"
35 --> "KEYCODE_G"
36 --> "KEYCODE_H"
37 --> "KEYCODE_I"
38 --> "KEYCODE_J"
39 --> "KEYCODE_K"
40 --> "KEYCODE_L"
41 --> "KEYCODE_M"
42 --> "KEYCODE_N"
43 --> "KEYCODE_O"
44 --> "KEYCODE_P"
45 --> "KEYCODE_Q"
46 --> "KEYCODE_R"
47 --> "KEYCODE_S"
48 --> "KEYCODE_T"
49 --> "KEYCODE_U"
50 --> "KEYCODE_V"
51 --> "KEYCODE_W"
52 --> "KEYCODE_X"
53 --> "KEYCODE_Y"
54 --> "KEYCODE_Z"
55 --> "KEYCODE_COMMA"
56 --> "KEYCODE_PERIOD"
57 --> "KEYCODE_ALT_LEFT"
58 --> "KEYCODE_ALT_RIGHT"
59 --> "KEYCODE_SHIFT_LEFT"
60 --> "KEYCODE_SHIFT_RIGHT"
61 --> "KEYCODE_TAB"
62 --> "KEYCODE_SPACE"
63 --> "KEYCODE_SYM"
64 --> "KEYCODE_EXPLORER"
65 --> "KEYCODE_ENVELOPE"
66 --> "KEYCODE_ENTER"
67 --> "KEYCODE_DEL"
68 --> "KEYCODE_GRAVE"
69 --> "KEYCODE_MINUS"
70 --> "KEYCODE_EQUALS"
71 --> "KEYCODE_LEFT_BRACKET"
72 --> "KEYCODE_RIGHT_BRACKET"
73 --> "KEYCODE_BACKSLASH"
74 --> "KEYCODE_SEMICOLON"
75 --> "KEYCODE_APOSTROPHE"
76 --> "KEYCODE_SLASH"
77 --> "KEYCODE_AT"
78 --> "KEYCODE_NUM"
79 --> "KEYCODE_HEADSETHOOK"
80 --> "KEYCODE_FOCUS"
81 --> "KEYCODE_PLUS"
82 --> "KEYCODE_MENU"
83 --> "KEYCODE_NOTIFICATION"
84 --> "KEYCODE_SEARCH"
85 --> "KEYCODE_MEDIA_PLAY_PAUSE"
86 --> "KEYCODE_MEDIA_STOP"
87 --> "KEYCODE_MEDIA_NEXT"
88 --> "KEYCODE_MEDIA_PREVIOUS"
89 --> "KEYCODE_MEDIA_REWIND"
90 --> "KEYCODE_MEDIA_FAST_FORWARD"
91 --> "KEYCODE_MUTE"
92 --> "KEYCODE_PAGE_UP"
93 --> "KEYCODE_PAGE_DOWN"
94 --> "KEYCODE_PICTSYMBOLS"
...
122 --> "KEYCODE_MOVE_HOME"
123 --> "KEYCODE_MOVE_END"
C'è un led blu che si può comandare:
# echo 255 > /sys/class/leds/led_msg/brightness
# echo 0 > /sys/class/leds/led_msg/brightness
In giro ho trovato riferimenti anche a led_lan
e led_msg
ma non sembrano essere effettivamente installati.
Con lo stesso sistema sopra posso accendere e spegnere il display. Da quello che vedo usa lo stesso meccanismo un qualche script che fa partire lo screensaver.
# echo 255 > /sys/class/backlight/rk28_bl/brightness
# echo 0 > /sys/class/backlight/rk28_bl/brightness
Per lanciare una applicazione da ADB posso usare questo comando:
# monkey -p github.daneren2005.dsub 1
le applicazioni si trovano in /data/user/0
oppure in /data/app
.
L'animazione si trova in /system/media/bootanimation.zip
che è su una partizione in read only. Quindi la devo rimontare in scrittura:
# mount -o remount,rw /system
# cd /system/media/
# mv bootanimation.zip bootanimation.zip.bkp
# cp /mnt/usb_storage/bootanimation.zip .
# chmod 644 bootanimation.zip
Per creare l'animazione ci sono alcune cose da tenere a mente:
- il file zip deve essere compresso in livello "store" (ho usato 7zip per Windows)
- dentro al file zip ci deve essere direttamente il contenuto e non la cartella "bootanimation"
È possibile testare l'animazione (senza riavviare il dispositivo) con il comando:
# bootanimation
Purtroppo non riesco a fare in modo che il sistema ruoti in portrait, rimane sempre in landscape ma posso invertirlo a testa in giù:
# settings put system accelerometer_rotation 0
# settings put system user_rotation 3
Ho trovato anche un file di configurazione che dovrebbe gestire la rotazione ma non funziona come sperato, credo che ci sia qualcosa che lo ruota forzatamente dopo il boot. Comunque sarebbe questo:
In the /system/build.prop file, modify or add the value of ro.sf.hwrotation
0:Horizontal screen
90:Portrait
180:Reverse landscape
270:Reverse portrait