Libre Computer AML-S905X-CC eMMC Flashing Steps from Linux with pyamlboot

Try plugging in to the USB ports on the back of the machine. Works on my AMD…

I’ve encounter an error while trying to flash the eMMC, I can’t mount as virtual flash drive nor delete user partition due to the next error:

Sweet Potato
Libre 16GB eMMC

~$ sudo pyamlboot/run.sh aml-s905x-cc erase-emmc
Using GX Family boot parameters
ROM: 2.4 Stage: 0.0
Writing /home/robert/pyamlboot/files/libretech-cc/u-boot.bin.usb.bl2 at 0xd9000000…
[DONE]
Writing /home/robert/pyamlboot/files/usbbl2runpara_ddrinit.bin at 0xd900c000…
[DONE]
Running at 0xd9000000…
[DONE]
Waiting…
[DONE]
ROM: 2.2 Stage: 0.8
Running at 0xd900c000…
[DONE]
Waiting…
[DONE]
Writing /home/robert/pyamlboot/files/libretech-cc/u-boot.bin.usb.bl2 at 0xd9000000…
Traceback (most recent call last):
File “/home/robert/pyamlboot/./boot.py”, line 132, in
usb.load_uboot()
File “/home/robert/pyamlboot/./boot.py”, line 87, in load_uboot
self.write_file(os.path.join(self.bpath, self.BL2_FILE), self.DDR_LOAD, large = 64)
File “/home/robert/pyamlboot/./boot.py”, line 63, in write_file
self.dev.writeLargeMemory(addr, b, large, fill)
File “/home/robert/pyamlboot/pyamlboot/pyamlboot.py”, line 241, in writeLargeMemory
self._writeLargeMemory(address+offset, data[offset:offset+writeLength],
File “/home/robert/pyamlboot/pyamlboot/pyamlboot.py”, line 215, in _writeLargeMemory
self.dev.ctrl_transfer(bmRequestType = 0x40,
File “/usr/lib/python3/dist-packages/usb/core.py”, line 1082, in ctrl_transfer
ret = self._ctx.backend.ctrl_transfer(
File “/usr/lib/python3/dist-packages/usb/backend/libusb1.py”, line 893, in ctrl_transfer
ret = _check(self.lib.libusb_control_transfer(
File “/usr/lib/python3/dist-packages/usb/backend/libusb1.py”, line 604, in _check
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 19] No such device (it may have been disconnected)

I made sure to hold the boot button.
I added a 5W power supply to the USB C port
No dice

Use the ums 0 mmc 0 u-boot method or flash from a booted OS on SD card.

The pyamlboot README.md mentions the A311D.

Will this method work with the Alta AML-A311D-CC?
If yes, is the USB port the same as step 3 (top left) or a different port?

Thank you

We recommend programming eMMC from Linux as it’s the fastest method. u-boot is a limited OS so it’s relatively slow. The USB device mode port is also the power port on Alta.

Reiterating so I understand.

  1. The alternate method described above (using pyamlboot) can be used for the Alta AML-A311D-CC, use a Linux machine as it’s faster and more reliable.

  2. Or you’re saying stay with the recommended way described here.

The second one. pyamlboot method was one of the older methods. The Linux method is the current one. We will eventually have an even faster way of flashing but it’s not ready yet.

2 Likes

Depending on what you measure as ‘faster’, these are the 2 methods that I can see:

M1: update via linux

  1. flash new OS to uSD card
  2. erase eMMC boot block to force uSD boot
    2a. if eMMC is bootable but unusable (aka raspbian12), use uboot button instructions to pyamlboot/run.sh aml-s905x-cc erase-emmc
  3. boot uSD
  4. flash new OS to eMMC

M2: update via pyamlboot

  1. use uboot button instructions to pyamlboot/run.sh aml-s905x-cc ums-emmc
  2. flash new OS to eMMC

M2 might take longer to write, but only involves writing once. M1 involves writing twice, even if it is faster each write, I’ve found is slower overall.

And until it is default in every image, always after an eMMC flash:

echo "boot_targets=usb mmc1 mmc0" > /boot/efi/boot.ini
echo "boot_targets=usb mmc1 mmc0" > /media/pi/bootfs/boot.ini

To make it much easier to recover from a bad eMMC system.