Device: Advance SP6446, 7-inch tablet
Codename: a23
SoC: Allwinner A23 (sun8i), dual Cortex-A7, 1 GB RAM (MemTotal shows ~906 MB)
Screen: framebuffer 800x480 landscape, 32 bpp, double-buffered
Touch: GSL1688E (gslX680new, I2C address 0x40)
Android base: 4.2.2, kernel 3.4.39
Recovery: TWRP 3.1.1-0.1 on an omni 4.4 tree
The tablet runs the firmware of an Inet T-708+ (A23_86DZ_D701C_1401063.20140116), because its original
firmware was lost. So the system introduces itself as polaris-inet and the USB descriptor says "mediacom
XPRO 415", while the hardware is the SP6446's. That the SoC is an A23 is deduced from the A23_86DZ build
name and the INet-86DZ board in Linux's device tree; it was not confirmed on the board.
The write-up is on the blog: https://chijure.github.io/es/blog/twrp-allwinner-a23/ (English).
There is no kernel source for this firmware, so kernel is the stock zImage (3.4.39 #5, built by
inet_sz), cut out of the tablet's own boot.img. The stock recovery.img carries the same kernel.
The ten .ko files in modules/ come from the stock recovery ramdisk and match that kernel. They are loaded
in the stock order by ramdisk/init.recovery.sun8i.rc: nand, then the touch drivers, then disp and lcd.
All touch drivers are loaded; only the one that matches the panel probes (ft5x and ft5402 fail over I2C,
as expected, and gslX680new is detected).
Boot image header, from the stock images: kernel 0x40008000, ramdisk 0x41000000, tags 0x40000100,
page size 2048, cmdline console=ttyS0,115200 rw init=/init loglevel=4.
Taken from the stock cmdline (partitions=...) and /proc/partitions. The fstab uses the /dev/block/nandX
nodes directly, so it does not depend on by-name.
| Partition | Node | Size |
|---|---|---|
| boot-resource | nanda |
32 MB |
| env | nandb |
16 MB |
| boot | nandc |
16 MB |
| system | nandd |
700 MB |
| data | nande |
800 MB |
| misc | nandf |
16 MB |
| recovery | nandg |
32 MB |
| cache | nandh |
512 MB |
| databk | nandi |
128 MB |
| private | nandj |
16 MB |
| UDISK | nandk |
4.5 GB, vfat, internal storage |
Other Allwinner A23 firmwares order these differently (one XDA post puts recovery on nandf). Read the
cmdline of your own device before reusing this fstab.
TW_THEME := landscape_hdpi,TARGET_RECOVERY_PIXEL_FORMAT := "BGRA_8888". The colours were checked by copying/dev/graphics/fb0to a PNG.- Brightness goes through
/sys/class/disp/disp/attr/lcd_bl(0..255, the stock system leaves it at 197). The stock Android does not use sysfs: its lights module talks to/dev/disp.
Tested on the device:
- Boots, adb works in recovery (
omni_a23,SP6446). - Screen, colours and orientation.
- Touch.
- Brightness control.
/system(688 MB) and/data(787 MB) are detected;/cacheand/sdcard(internal storage) mount.
Not tested yet:
- MicroSD (
/external_sd,mmcblk0p1). - Backup and restore of
dataandsystem. - MTP: the log shows it starting even with
TW_HAS_MTP := false.
The tree is built inside an Ubuntu 12.04 container (Docker Desktop), on x86 with no emulation.
source build/envsetup.sh
lunch omni_a23-eng
make -j6 recoveryimage
# out/target/product/a23/recovery.img (about 14 MB; the partition holds 32 MB)Writing to the NAND is the risky step. Back up first, check the hash before and after, and do not start with a low battery.
- Back up
recovery(and anything else you care about) over USB, read-only:adb pull /dev/block/nandg stock-recovery.img - Battery. In TWRP the sysfs
capacityreads 0 and is useless. Readvoltage_now(3.5 V is about 5-10%) or the level from Android, and do not write below about 30%. - Push the image to RAM (
/devis tmpfs), so that nothing else is written to the NAND, and check it there:
adb push recovery.img /dev/recovery-new.img
adb shell "busybox md5sum /dev/recovery-new.img" # must match the PC
adb shell "busybox dd if=/dev/recovery-new.img of=/dev/block/nandg bs=4096; sync"
adb shell "busybox dd if=/dev/block/nandg bs=4096 count=<size/4096> | busybox md5sum" # read back
adb shell "rm /dev/recovery-new.img"
adb reboot recoveryThe image size has to be a multiple of 4096 for the count to match. The tablet's own md5 does not read
from a pipe; use busybox md5sum.
Not compared yet:
- bbor74/android_device_explay_fog2: LineageOS, A23, INET-D70-REV02 board.
- bbor74/android_device_oysters_t72ms: A23, has a
recovery.fstab. - aleha-druga/android_device_exdroid_t3_k2001_nwd: TWRP for an A23 tablet on eMMC.