This applies to Smart TV X96 (X96W) devices based on Amlogic S905W. In my case it was branded as Emmerson STV200HD distributed in Poland.
I take no responsibility if you brick or break your device.
Problem:
- Annoying notifications about crashed apps
- Cannot install some apps from Google Play like Netflix
- Android 7 is obsolete and no online updates are available
Solution:
- Prepare 2GB empty microSD card
- Download atvXv4 rom based on AndroidTV 9.0
- Extract files from
atvX_s905w_4.3.ziparchive - Create
aml-upgrade-package-extract.cfile in extracted files directory with following contents (Windows users should use Amlogic USB Burning Tool to create microSD withaml_upgrade_package.imgfile and skip toBoot from microSD):
#include <errno.h> #include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> uint32_t convert(uint8_t * test, uint64_t loc) { return ntohl((test[loc] << 24) | (test[loc + 1] << 16) | (test[loc + 2] << 8) | test[loc + 3]); } void main(int argc, char ** argv) { FILE * fileptr; uint8_t * buffer; long filelen; FILE * f; char * filename; uint64_t record; uint64_t record_loc; uint64_t file_loc; uint64_t file_size; if (argc <= 1) { printf("Usage: %s [firmware-file-name]\n", argv[0]); exit(0); } fileptr = fopen(argv[1], "rb"); fseek(fileptr, 0, SEEK_END); filelen = ftell(fileptr); rewind(fileptr); buffer = (uint8_t * ) malloc((filelen + 1) * sizeof(uint8_t)); fread(buffer, filelen, 1, fileptr); fclose(fileptr); for (record = 0; record < (uint8_t) buffer[0x18]; record = record + 1) { record_loc = 0x40 + (record * 0x240); filename = (malloc(32)); sprintf(filename, "%s.%s", (char * ) & buffer[record_loc + 0x120], (char * ) & buffer[record_loc + 0x20]); file_loc = convert(buffer, record_loc + 0x10); file_size = convert(buffer, record_loc + 0x18); f = fopen(filename, "wb"); if (f == NULL) { printf("ERROR: could not open output\n"); printf("the error was: %s\n", strerror(errno)); free(filename); continue; } fwrite( & (buffer[file_loc]), sizeof(uint8_t), (size_t) file_size, f); fclose(f); free(filename); } free(buffer); } - Compile script:
$ gcc aml-upgrade-package-extract.c -o aml-upgrade-package-extract - Use script to extract img file contents:
$ ./aml-upgrade-package-extract aml_upgrade_package.img - Make sure you have FAT32 partition on your microSD card and execute following commands on unmounted device:
### !!! WARNING: Replace /dev/sdc with path to your card. Do not use partition path like /dev/sdc1 !!! ### $ sudo dd if=aml_sdc_burn.UBOOT of=/dev/sdX bs=1 count=442 $ sudo dd if=aml_sdc_burn.UBOOT of=/dev/sdX seek=1 skip=1 bs=512 $ sync - Mount FAT32 partition of you microSD card and copy following files:
aml_sdc_burn.iniaml_sdc_burn.UBOOTaml_upgrade_package.img
- Umount microSD card and plug it into X96
- Boot from microSD:
- Take out power cable from X96
- Insert a match (or any kind of object that will fit) to AV port and hold the switch that is inside
- Plug in power cable to X96 while holding the switch
- Do not worry if there's no signal on the screen. If X96 won't reboot after 10-15 minutes, plug out and plug in power cable. Device should boot up with new rom.
- Add you Google account and install/update Google Apps from Google Play
- Install Netflix and other apps you like. Enjoy using your device!
Used sources:
- Jean Luc Aufranc, How to Create a Bootable Recovery SD Card for Amlogic TV Boxes
- N'ayam Amarsh'e, Bringing you the latest release of atvXperience v4 - Pie for S905W!
Top comments (0)