Is this the perfect standalone tablet for HA?

Well, I did. And yes, I am using command line since starting to do software development using brand-new Borland TP 5.5 and also I don’t have issues with Linux since I compiled my first Linux kernel which was 2.0.36 just after its release. This is not a competition but a clear “even people who have lots of experience with command line do need a good instruction to get this Android thing done”

There are just many things that are simply expected to be on the computer anyway, procedures that are expected to be known, etc. It would just be great to write those into the instructions and I would love to follow the steps just the same way as I followed the existing instructions.

Yesterday I have installed a clean DietPi on my Raspi with the sole purpose to get this image installed on the Lenovo. So if there would be a reliable step-by-step-instruction that does NOT depend on existing software and/or knowledge, I would love to install this.

Please don’t get me wrong, a stated in the very beginning this is amazing work and I thank you so much for it! I would LOVE to run my Lenovo with this software.

1 Like

I picked one of these up cheap for a project. If I get it up and running it will be a control / display for my office

Please carefully review the instructions (and links) in the first post. All required software and knowledge is there.

If you are unable to complete the flash yourself, maybe try finding somebody local to help you through the procedure.

Or send me a PM and I’ll get some preflashed units listed on eBay.

EDIT: Added a troubleshooting section to 1st post with the issues discussed so far.

******** Did you mean to fastboot format this ext4 partition?
Erasing ‘userdata’ FAILED (remote: ‘device is locked. Cannot erase’)
fastboot: error: Command failed

OK I will try again, this time with Linux. The Windows version reliably fails with the mentioned error messages when walking through the linked installer tutorials.

fastboot format:ext4 userdata

If that doesn’t work, try unlocking the boot loader before issuing the erase command:

fastboot oem unlock-go
fastboot erase userdata
fastboot oem lock-go
fastboot reboot

I have never had to do this on any unit I’ve flashed. It would be interesting to figure out what’s different about your setup.

Seems like I’m the special case here.

Tried your most recent suggestion and received the following error:

>  fastboot oem unlock
> FAILED (remote: 'oem unlock is not allowed')
> fastboot: error: Command failed

I did some quick searching and everything points to toggling a setting in the OS, which for obvious reasons I can’t. The odd part is that I have 2 of these and it’s doing it on both. I’m tempted to buy one more and see if I get the same result.

Edit: Found this forum post. I was able to change the sys.oem_unlock_allowed to 1 vice 0 but its not persistent and still received the same error while trying to OEM unlock

Definitely outside my wheelhouse, so I’m sure I’m doing something stupid, but I keep getting this ‘no such file or directory’ error. I’ve gone over the instructions dozens of times, but not seeing my mistake. I’m guessing I dropped the extracted “kingston-ha-rom” folder in the wrong place (I put it in the EDL folder, the same folder from which I’m running the terminal commands successfully)? Any help much-appreciated!

........main - Device detected :)
sahara - Protocol version: 2, Version supported: 1
main - Mode detected: sahara
sahara - 
Version 0x2
------------------------
HWID:              0x000660e160008000 (MSM_ID:0x000660e1,OEM_ID:0x6000,MODEL_ID:0x8000)
CPU detected:      "APQ8053"
PK_HASH:           0xb9eca30dfea4693497b6ac7eec81d006967281e259eb9ac239f9ce6dabb70c14
Serial:            0x7e48b216

sahara - Protocol version: 2, Version supported: 1
sahara - Uploading loader bin/prog_emmc_firehose_8953_ddr.mbn ...
sahara
sahara - [LIB]: [Errno 2] No such file or directory: 'bin/prog_emmc_firehose_8953_ddr.mbn'

I had the same issue, in the command you run you need to use the entire relative path to the file. i.e /User/Username/edl/kingston-ha-rom/file

From what I am reading, the folder is named edl, not EDL.

Before you accuse me if being a pedant, case does matter.

Incremental success: Discovered that my computer hadn’t fully extracted the compressed file, so not all of the files were even there (it’s a crappy/old laptop I use for these kind of one-off projects).

Also, I was originally extracting the file directly to the ‘edl’ directory per the instructions, when it seems that it’s expecting that all of the subfolders under ‘kingston-ha-rom’ actually be put directly in the ‘edl’ folder (so one level higher)?

Doing all of that got me here:

...........main - Device detected :)
sahara - Protocol version: 2, Version supported: 1
main - Mode detected: sahara
sahara - 
Version 0x2
------------------------
HWID:              0x000660e160008000 (MSM_ID:0x000660e1,OEM_ID:0x6000,MODEL_ID:0x8000)
CPU detected:      "APQ8053"
PK_HASH:           0xb9eca30dfea4693497b6ac7eec81d006967281e259eb9ac239f9ce6dabb70c14
Serial:            0x7e48b216

sahara - Protocol version: 2, Version supported: 1
sahara - Uploading loader bin/prog_emmc_firehose_8953_ddr.mbn ...
sahara - 32-Bit mode detected.
sahara - Firehose mode detected, uploading...
sahara - Loader successfully uploaded.
main - Trying to connect to firehose loader ...
firehose_client
firehose_client - [LIB]: No --memory option set, we assume "eMMC" as default ..., if it fails, try using "--memory" with "UFS","NAND" or "spinor" instead !
firehose - TargetName=MSM8953
firehose - MemoryName=eMMC
firehose - Version=1
firehose - Trying to read first storage sector...
firehose - Running configure...
firehose - Storage report:
firehose - total_blocks:15269888
firehose - block_size:512
firehose - page_size:512
firehose - num_physical:3
firehose - mfr_id:21
firehose - serial_num:4089269805
firehose - fw_version:6
firehose - mem_type:eMMC
firehose - prod_name:8GTF4R
firehose_client - Supported functions:
-----------------
firehose_client - [qfil] raw programming...
firehose_client
firehose_client - [LIB]: File : flash/bin/rawprogram.xml not found.
firehose_client - [qfil] raw programming ok.
firehose_client - [qfil] patching...
firehose_client - [qfil] patching with bin/patch0.xml
firehose_client
firehose_client - [LIB]: File : flash/bin/patch0.xml not found.
firehose_client - [qfil] patching ok
firehose - Setbootablestoragedrive succeeded.
firehose_client - [qfil] partition(0) is now bootable

I’m rather confused, as it seems it’s looking in ‘flash/bin’ rather than directly in the ‘bin’ folder where the files actually are.

Didn’t appear to be successful (plus it all ran instantly), but I went ahead and power-cycled just to confirm. It still boots to the stock startup screen.

Just to be extra clear, here’s the command that I’m running:

That makes sense, but its not obvious to me how the command in the instructions needs to be modified.

You are correct, it’s lowercase. I’m using a different machine to actually flash it, so I was just going off of memory for the folder name.

1 Like

OK, first, some boiler plate:

  • An absolute path starts with a / and is always valid.
  • A relative path starts with any other character. It’s only valid from a specific directory.

So let’s break down the command:

edl qfil bin/rawprogram.xml bin/patch0.xml flash/ --loader=bin/prog_emmc_firehose_8953_ddr.mbn

edl is the name of the binary we wish to run
qfil is an argument that specifies edl’s mode, it expects several options, in order:

  • the PATH to rawprogram.xml
  • the PATH to patch0.xml
  • the PATH to the .bin files

—loader= specifies that edl should use a specific binary to communicate with the device. It expects one option:

  • the PATH to prog_emmc_firehose_8953_ddr.mbn

Let’s imagine an example:

You open a terminal, then clone and build edl.
The path to your edl binary is now most likely:
/home/you/edl/build/

Next, you download and extract the rom from this thread. It’s likely path is:
/home/you/Download/kingston-ha-rom

Now you go to flash the rom, and copy/paste my example command. But it doesn’t work, why?

You supplied edl with the wrong paths!

My example, for brevity, only shows the relative path that coordinates with the files in the rom archive.

For the command to work in your environment, you must update the paths in your command to reflect where the files actually are.

So, given our example, a correct command would be:
edl qfil /home/you/Download/kingston-ha-rom /bin/rawprogram.xml /home/you/Download/kingston-ha-rom/bin/patch0.xml /home/you/Download/kingston-ha-rom/flash/ --loader= /home/you/Download/kingston-ha-rom/bin/prog_emmc_firehose_8953_ddr.mbn

Though you could also do it with a relative path:
edl qfil ../../Download/kingston-ha-rom/ bin/rawprogram.xml ../../Download/kingston-ha-rom/ bin/patch0.xml ../../Download/kingston-ha-rom/flash/ --loader= ../../Download/kingston-ha-rom/ bin/prog_emmc_firehose_8953_ddr.mbn

To the shell, both of these commands evaluate exactly the same.

So when I say “check your paths” this is what I mean.

3 Likes

It looks like I’m also running into issues with a locked tablet. I’m on Arch and edl is in the AUR, so I just installed it from there (meaning it’s in my $PATH somewhere).

Here’s the directory structure I flashed with:

~/Downloads/lenovo-thinksmart-home-assistant-rom
❯ tree
.
├── bin
│   ├── patch0.xml
│   ├── prog_emmc_firehose_8953_ddr.mbn
│   └── rawprogram.xml
├── boot.bin
├── dashboard-cloos.jpg
├── dashboard-madelena.jpg
├── extras
├── flash
├── gallery.apk
├── kingston-ha-rom.7z
├── oem.bin
├── patch0.xml
├── prog_emmc_firehose_8953_ddr.mbn
├── rawprogram.xml
├── README.md
├── resource.bin
├── splash.bin
├── splash.bin.horz
├── system.bin
├── vendor.bin
├── virtualsoftkeys.apk
└── wallpaper.png

I used this command to flash:

 edl qfil rawprogram.xml  patch0.xml ./ --loader=prog_emmc_firehose_8953_ddr.mbn

Here’s the unabridged output from flashing:

~/Downloads/lenovo-thinksmart-home-assistant-rom
❯ edl qfil rawprogram.xml  patch0.xml ./ --loader=prog_emmc_firehose_8953_ddr.mbn
Qualcomm Sahara / Firehose Client V3.62 (c) B.Kerler 2018-2023.
main - Using loader prog_emmc_firehose_8953_ddr.mbn ...
main - Waiting for the device
......
main - Hint:   Press and hold vol up+dwn, connect usb. For some, only use vol up.
main - Xiaomi: Press and hold vol dwn + pwr, in fastboot mode connect usb.
        Run "./fastpwn oem edl".
main - Other:  Run "adb reboot edl".

..........main - Device detected :)
sahara - Protocol version: 2, Version supported: 1
main - Mode detected: sahara
sahara -
Version 0x2
------------------------
HWID:              0x000660e160008000 (MSM_ID:0x000660e1,OEM_ID:0x6000,MODEL_ID:0x8000)
CPU detected:      "APQ8053"
PK_HASH:           0xb9eca30dfea4693497b6ac7eec81d006967281e259eb9ac239f9ce6dabb70c14
Serial:            0xe8e2ec57

sahara - Protocol version: 2, Version supported: 1
sahara - Uploading loader prog_emmc_firehose_8953_ddr.mbn ...
sahara - 32-Bit mode detected.
sahara - Firehose mode detected, uploading...
sahara - Loader successfully uploaded.
main - Trying to connect to firehose loader ...
firehose_client
firehose_client - [LIB]: No --memory option set, we assume "eMMC" as default ..., if it fails, try using "--memory" with "UFS","NAND" or "spinor" instead !
firehose - TargetName=MSM8953
firehose - MemoryName=eMMC
firehose - Version=1
firehose - Trying to read first storage sector...
firehose - Running configure...
firehose - Storage report:
firehose - total_blocks:15269888
firehose - block_size:512
firehose - page_size:512
firehose - num_physical:3
firehose - mfr_id:21
firehose - serial_num:4093136428
firehose - fw_version:6
firehose - mem_type:eMMC
firehose - prod_name:8GTF4R
firehose_client - Supported functions:
-----------------
firehose_client - [qfil] raw programming...
firehose_client - [qfil] programming rawprogram.xml
firehose_client
firehose_client - [LIB]: ./NON-HLOS.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./sbl1.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./sbl1.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./rpm.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./rpm.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./tz.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./tz.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./devcfg.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./devcfg.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./adspso.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./sec.dat doesn't exist!
firehose_client - [qfil] programming ./splash.bin to partition(0)@sector(655360)...
firehose -
Writing to physical partition 0, sector 655360, sectors 22528
Progress: |██████████| 100.0% Write (Sector 0x5800 of 0x5800, ) 8.84 MB/s
firehose_client
firehose_client - [LIB]: ./emmc_appsboot.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./emmc_appsboot.bin doesn't exist!
firehose_client - [qfil] programming ./boot.bin to partition(0)@sector(790528)...
firehose -
Writing to physical partition 0, sector 790528, sectors 65536
Progress: |██████████| 100.0% Write (Sector 0x10000 of 0x10000, ) 9.69 MB/s
firehose_client
firehose_client - [LIB]: ./recovery.bin doesn't exist!
firehose_client - [qfil] programming ./system.bin to partition(0)@sector(923648)...
firehose -
Writing to physical partition 0, sector 923648, sectors 3145728
Progress: |██████████| 100.0% Write (Sector 0x300000 of 0x300000, ) 9.38 MB/s
firehose_client - [qfil] programming ./vendor.bin to partition(0)@sector(4069376)...
firehose -
Writing to physical partition 0, sector 4069376, sectors 786432
Progress: |██████████| 100.0% Write (Sector 0xC0000 of 0xC0000, ) 9.73 MB/s
firehose_client
firehose_client - [LIB]: ./cache.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./persist.bin doesn't exist!
firehose_client - [qfil] programming ./oem.bin to partition(0)@sector(5307456)...
firehose -
Writing to physical partition 0, sector 5307456, sectors 204800
Progress: |██████████| 100.0% Write (Sector 0x32000 of 0x32000, ) 8.86 MB/s
firehose_client
firehose_client - [LIB]: ./mdtp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./lksecapp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./lksecapp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./cmnlib_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./cmnlib_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./cmnlib64_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./cmnlib64_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./keymaster64.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./keymaster64.bin doesn't exist!
firehose_client - [qfil] programming ./resource.bin to partition(0)@sector(6161424)...
firehose -
Writing to physical partition 0, sector 6161424, sectors 729088
Progress: |██████████| 100.0% Write (Sector 0xB2000 of 0xB2000, ) 9.71 MB/s
firehose_client
firehose_client - [LIB]: ./userdata.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./gpt_main0.bin doesn't exist!
firehose_client
firehose_client - [LIB]: ./gpt_backup0.bin doesn't exist!
firehose_client - [qfil] raw programming ok.
firehose_client - [qfil] patching...
firehose_client - [qfil] patching with patch0.xml
firehose_client - [qfil] patching DISK sector(14), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="296" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="14" value="NUM_DISK_SECTORS-34." what="Update last partition 51 'userdata' with actual size in Primary Header." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-21.), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="296" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-21." value="NUM_DISK_SECTORS-34." what="Update last partition 51 'userdata' with actual size in Backup Header." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="48" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-34." what="Update Primary Header with LastUseableLBA." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="48" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-34." what="Update Backup Header with LastUseableLBA." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="32" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="24" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="72" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1" value="NUM_DISK_SECTORS-33." what="Update Backup Header with Partition Array Location." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="88" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="CRC32(2,6656)" what="Update Primary Header with CRC of Partition Array." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="88" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-33.,6656)" what="Update Backup Header with CRC of Partition Array." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="0" what="Zero Out Header CRC in Backup Header." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-1.,92)" what="Update Backup Header with CRC of Backup Header." />
 </data>
firehose_client - [qfil] patching ok
firehose - Setbootablestoragedrive succeeded.
firehose_client - [qfil] partition(0) is now bootable

When I rebooted my tablet, there was a password. Repeatedly entering the wrong password didn’t trigger a device wipe for me. Here’s a summary of the issues I encountered when trying to erase the user data in fastboot mode:

❯ fastboot devices
HUA0BXPT	 fastboot

❯ fastboot erase userdata
******** Did you mean to fastboot format this ext4 partition?
Erasing 'userdata'                                 FAILED (remote: 'device is locked. Cannot erase')
fastboot: error: Command failed

❯ fastboot format:ext4 userdata
mke2fs 1.46.6 (1-Feb-2023)
Creating filesystem with 1047417 4k blocks and 262144 inodes
Filesystem UUID: 1abf00d8-2e53-43d6-97f6-e42da742d3ef
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736

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

Sending 'userdata' (2160 KB)                       OKAY [  0.098s]
Writing 'userdata'                                 FAILED (remote: 'Partition flashing is not allowed')
fastboot: error: Command failed

❯ fastboot oem unlock-go
FAILED (remote: 'oem unlock is not allowed')
fastboot: error: Command failed

Are there any other recommended courses of action? I may have just gotten unlucky with this tablet.

EDIT: I believe this can be worked around by holding up while powering on to get to the recovery menu and kicking off a factory reset from there.

EDIT: The above is wrong. I believe I’m starting to understand the nature of the problem. I installed edl incorrectly. I need files packaged in the repo, and the way I installed edl doesn’t give me that. I’ll provide more details in a sec.

EDIT: Yeah, so my problem is that I assumed that an AUR installation would be equivalent to doing my own git clone of the repo. You must use the repo, or you must know enough about how this all works to get the loaders from the repo and set them up yourself. I’m an idiot when it comes to anything Android, so I’m just going to stick with the git repo. I wish that the repo author advised folks to use a virtualenv for installing their python dependencies though…

One last EDIT: I still needed to do a factory reset with the up arrow recovery menu on my second tablet, even when I did things somewhat more correctly.

1 Like

Did you read the comments on AUR? AUR (en) - edl-git

1 Like

I sure didn’t, and that was a Bad Move. Thanks for reminding me to always check that!

2 Likes

Thanks for the clarification and help! I finally got it working by using absolute paths, but I’m still not entirely sure why using your command didn’t work as the relative paths should have been correct based on how I extracted things and the directory I was in.

For anyone else, I also seemed to run into issues with it being locked. Repeated attempts didn’t move past it and fastboot seemed unable to see the device (despite using several ‘high-quality’ cables). I even got a single message once to reboot to reset the device but doing so brought me right back to the login screen. Ultimately I just sat down and went through a LOT of failed attempts and eventually got the ‘10 more times and you’ll lose your data’ message. After that, all was good.

Honestly though, my first impressions are kind of ‘meh’. I love the physical build quality (and if/when wakeword functionality can get working, that’d probably be great) but it just seems rather sluggish compared to my 2020 Fire HD 8 tablet I was planning for it to replace. I’ll play around with it some more before deciding if I want to get any more.

Edit: After letting it sit for a while and coming back to it, it seems quite a bit snappier (enough so that I’m again considering if I want to grab a couple more). Would there maybe have been some cleanup activities going on in the background?

It appears not including a userdata.bin was a mistake.

I’m going to upload a blank userdata.bin tomorrow.

Just place it with the rest of the files before you flash.

The fire tab and this device have very similar specs. I’d bet the difference in performance (5-15%) is down to 32 vs 64 bit android.

Lenovo decided we’d be better of with 32 bit software for our 64 bit cpu :face_with_raised_eyebrow:

All that said, it outperforms everything in its price range.

Android likes to waste cpu cycles on decompression first couple of boots. Once it’s finished unzipping apks and doing file operations, things usually speed up considerably.

This is very good advice.

I’m a recent convert to silverblue (after 20 years on Debian!). I really like toolbox, saves me from myself, lol.

2 Likes

Would it be an option to describe a recommended path on a defined platform like e.g. the EDL Live DVD? Then there would be almost no software difference between the various users installations.

This worked for me to get past the password lock screen i was experiencing