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

Has anyone successfully flashed a USB-Attached SATA drive using MacOS Ventura (UNIX) for Le Potato?

Decompress and use dd on the terminal, just be careful to specify the correct file/drive, there are no training-wheels with dd.

sudo dd if="/PATH/TO/IMAGE.img" of="/PATH/TO/DRIVE" bs=1M

I haven’t used anything past snow leopard, but back then there was a disk utility you could flash drives with too, may still be there if you want a GUI.

Etcher also works on Mac.

I tried this method because my system was finding the mmcblk0 device. It copied an image of the 2023-05-03-raspbian-bullseye-arm64-lite+aml-s805x-ac.img.xz to my AML-S805X-AC, but after booting I get a “No Partition table - mmc 0” then “device 0: unknown device”

Any ideas about how to fix the partitioning on the eMMC?

Thanks,
Peter

Follow official instructions. Not instructions posted by users. There is no need to mess with partition tables since they are part of the image.

I just got my eMMC working with my AML-S905X-CC and have some comments.

  1. I tried to use
    sudo pyamlboot/run.sh aml-s905x-cc ums-emmc
    but was getting the timeout even though I was on a Intel(R) Core™ i5-2400 CPU @ 3.10GHz runninb Debian 11. It turned out this was because I had plugged into my USB3 card. When I plugged directly into the Intel motherboards USB, it worked great! It got me wondering that perhaps if you have an AMD computer you could reverse the situation with a non-AMD USB board, you might be able to work around the AMD timeout problem.

  2. I was able to install debian-12 along with gnome and get the gui to work by running sudo tasksel. It turns out that since the board is based on Wayland because of framebuffer efficiency, xfce is not supported (yet?) and startx won’t come up. gnome came up fine.

  3. With my install on an SD card, i was able to install a system on the eMMC by running the SD os. I downloaded on of the images to the Downloads and then ran:

xzcat ~/Downloads/debian-12-base-arm64+aml-s905x-cc.img.xz | sudo dd of=/dev/mmcblk0 bs=1M conv=fdatasync status=progress

Then power off and remove the SD and the board should come up using the newly flashed image.

  1. If you want to go back to SD booting and don’t care about whats on the eMMC, you can just wipe out the eMMC by running

sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1M conv=fdatasync status=progress

This gets rid of your boot/EFI partition and some of the root partition. It should be enough to make the board ignore the eMMC when you poweroff and reboot with an SD card in place. You will get errors after it gets into zeroing the root partition so when you get that, just unplug the board. This part is a bit crude and I suppose we could add a count= parameter to dd. I have not tested the minimum about you need to zero to get the AML-S905X-CC to boot from the SD card.

I hope this info is helpful.

1 Like
  1. We just release Debian 12 Gnome around an hour ago: https://twitter.com/librecomputer/status/1718737392327123362

  2. count=1 is sufficient. It will wipe out the MBR at sector 0 and the bootloader at sector 1 (512B).

Silly me!. I should have realized count=1 was sufficient. I got focused on zeroing out the whole eMMC. If I really wanted to that, it would be better to wipe our sector 0, boot from my SD card and then zero out the eMMC booted from the SD. That would make the whole process a lot cleaner.

BTW, I prefer xfce over gnome. Does anyone have an idea when xfce might work with debian 12 on Libre AML-S905X-CC?

XFCE will work fine but as XFCE is based on X11, there will be more tearing on a SBC.

I suppose this is a little off topic but I finally got xfce to work. The trick is that I must use gdm as my display manager and not lightdm. My steps were:

sudo apt clean; sudo apt update; sudo apt upgrade -y; sudo apt autoremove -y
sudo apt install gdm3 xfce4 xfce4-goodies
sudo systemctl set-default graphical.target
<< reboot >>
I got a prompt as to whether to use lightdm or gdm and I chose gdm.
I think the problem I had before was having chose lightdm.

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.

Yes, we will make it easier in the future by providing a 16MB Linux based deployment OS available.

We do not modify the boot_targets order for a lot of reasons. You can recover from u-boot prompt.