BMC Update

Over-the-Air

Over-the-Air (OTA) firmware update is a method of updating the firmware or software of a device wirelessly, without the need for a physical connection to a computer. In our case, you can update the BMC over the HTTP management website.

⚠️

Please note that OTA updates can only upgrade the base filesystem (rootfs) and do not update the kernel. To perform a full-system update, please see the following section.

You can enter the IP of the BMC into the browser of your choice, and you should be welcomed by the web interface. You can then switch to update, select update file and submit.

You will be able to find updates in the releases tab of our GitHub repository. Files for OTA updates end with a .swu extension.

Full system update with an image file

Use this method if you forgot your root password, wish to update the kernel or bootloader, or can't use the OTA update method.

📘

This part is temporary and we are working on our custom flash method.

An unfortunate reality of tools provided by Allwinner (developers of the BMC System-on-Chip) is that utilities for flashing images onto the chip require either a Windows machine or an ancient Linux version. Therefore, flashing on a Linux host for now requires provisioning a virtual machine.

Flashing on a Linux/macOS host

Any virtual machine manager capable of forwarding USB connections to the guest OS should suffice. In this guide we use VirtualBox for this purpose, as the unattended setup and bidirectional file sharing make the process very simple and straightforward. The following steps describe manual creation of a virtual machine and subsequent unattended installation. If you wish to completely automate the process of creating a VM and starting installation, visit the official guide.

  1. Install VirtualBox
    It is strongly advised to also install guest-additions, as this allows creating shared folders and enables drag-and-drop file transfer.
    For apt-based systems: sudo apt install virtualbox virtualbox-guest-additions-iso
    You may be asked to add current user to vboxusers: sudo usermod -aG vboxusers user
  2. Download Windows 11 Disk Image (ISO) for x64 devices from the official Microsoft website.
  3. Start VirtualBox and press "New" to create a new virtual machine.
  4. Choose a name, folder, and point to a downloaded ISO file. The OS type should be detected as "Windows 11 (64-bit)" and unattended installation should be available. Support for unattended installations of Windows 11 guests was added in VirtualBox 6.1.28, released on 2021-Oct-19.
  5. Press "Next". In the "Unattended Guest OS Install Setup" enable check mark to add "Guest Additions".
  6. In "Hardware" and later in "Virtual Hard disk", specify the amount of hardware resources allocated to the guest OS appropriate for your system. The defaults should be sufficient.
  7. Press "Finish". On the first boot, the ISO file will not be mounted, select it from the drop-down menu and press "Mount and Retry boot".
  8. On the next boot, press any button to boot from the disk.
  9. Wait while VirtualBox takes several minutes to perform an unattended installation.
  10. In the top-left corner, select "Machine" → "Settings" → "USB". Create a new device filter:
  1. (Optional) This empty filter forwards all USB devices to the guest OS. If you wish to selectively filter only the BMC, then these are the relevant numbers:

    NameVendor IDProduct ID
    ADB mode18d10002
    FEL mode1f3aefe8
  2. Plug in the board through a micro USB cable. A new device "Configfs ffs gadget" should appear in the tray, under "Safely Remove Hardware and Eject Media".
    Make sure the device is powered on and connected to the appropriate USB 3.0 connector on your host computer, as it is the default mode for USB device filters. If you need to connect to a USB 2.0 connector, power off the machine, change settings and reboot.

  3. (Optional) To facilitate file sharing, setup a shared folder: in the top left menu select "Devices" → "Shared folders" → "Shared folders settings". Create a new folder with the appropriate path on the host and name, enable "Auto-mount", and leave "Mount point" blank. The device should appear in "This PC" under "Network locations".

  4. The following steps are the same as for the Windows host:

Flashing on a Windows host

To begin, download and unzip Phoenix Suit release. Connect your Turing Pi 2 board to a PC via a micro USB cable:

Launch device manager ("Start" → Start typing "Device manager" or select from the Control Panel). Press "Add drivers" from the top menu:

Navigate to the "Drivers" subfolder of the Phoenix Suit distribution and press next. Drivers "android_mtp.inf", "android_winusb.inf" and "usbdrv.inf" should be installed. Next, launch PhoenixSuit. After a brief moment, the device should be found:

Proceed with installing .img file:

The device will now reboot into a new firmware.

ADB Shell (root password reset)

In addition to the usual method, there is another way to access your BMC (Baseboard Management Controller) in case you have forgotten your password and don't want to go through the hassle of reflashing the entire image. This alternative solution can save you time and effort.

What is ADB ?

ADB stands for Android Debug Bridge, which is a command-line tool used to communicate with Android devices, including smartphones and tablets, for development purposes. It enables developers to perform various tasks, such as installing and debugging apps, modifying device settings, and accessing device logs.

The components of ADB include:

  • ADB client: a client that runs on the host machine, which can send commands to an ADB server.
  • ADB server: a server that runs on the host machine, which can receive commands from an ADB client.
  • ADB daemon: a background process running on an Android device, which can receive commands from an ADB server.
  • The ADB client and server communicate with each other through a socket connection. The ADB client sends commands to the ADB server, which then forwards the commands to the ADB daemon on the Android device.
  • The ADB daemon processes the commands and returns the results back to the ADB server, which then returns the results to the ADB client.

Install ADB on your PC

You can follow excellent tutorial by Skanda Hazarika here for installing ADB on Windows, Linux or Mac.

Connect

When you switch to the directory with command line, and execute adb devices, ADB will start the server on your PC.

Then use the micro USB port dedicated to BMC and connect it to your PC.

Check for devices again and you should see a new device connected.

The serial number of the device in this example is 0402101560. If you want to run ADB commands on a specific device, you can specify the device serial number using the -s option, like this adb -s 0402101560 shell

You are now a root on the BMC you can enable ssh root login by editing /etc/ssh/sshd_config and restarting with /etc/init.d/S40network restart

To change a root password, you need to generate the hash first:

/ # mkpasswd --method=md5 --stdin
Password:
$1$AhimSt2i$B.SlOuTdRN5UnPvT09aVL/

Then you can replace the hash in /etc/shadow for root entry.

#root:$1$L.V2NdFU$0SGB00rL.3tQ1IEyt8BDJ/:1::::::
root:$1$AhimSt2i$B.SlOuTdRN5UnPvT09aVL/:1::::::
daemon:*:::::::
bin:*:::::::
sys:*:::::::
sync:*:::::::
mail:*:::::::
www-data:*:::::::
operator:*:::::::
nobody:*:::::::
sshd:*:::::::

Exit

To leave the shell, simply type: exit
And to stop the ADB server: adb kill-server

Resolving Issues with Partially Flashed or Corrupted BMC

🚧

Issue description:

The Baseboard Management Controller (BMC) seems to be partially flashed or corrupted. The console isn't providing any output, and the Android Debug Bridge (ADB) does not detect the device.

Steps to Resolve:

  1. Connect your BMC to Windows PC: Use the BMC's USB OTG, which is the USB connector next to the Serial console pins.
  2. Short the MOSI and SCLK pins: Restart the board after shorting these pins. Refer to the image for guidance.

  1. Check for a new device in Windows Device Manager: After the restart, a new device should appear in the Windows Device Manager.
  2. Install the required driver: The new device might require the "AllwinnerUSBFlashDeviceDriver". This driver is in the attached zip file. Ignore any red warning about driver installation; this is a standard alert for internal drivers.
  3. Reset and reflash using PhoenixSuit: Follow the guide for resetting and reflashing the device using PhoenixSuit

Updating from SD card

📘

Sometimes PhoenixSuit can't update the BMC and manual update from SD card is needed.

  1. Connect to the BMC: Use the adb shell or UART as per the instructions provided in the documentation: https://help.turingpi.com/hc/en-us/articles/8686945524893-Baseboard-Management-Controller-BMC-

  2. Enable SSH root logins (Optional): This can be found under the same link provided above.

  3. Check for /mnt/sdcard: Use adb shell, UART, or SSH to check if /mnt/sdcard exists with the command ls -l /mnt/sdcard. If it doesn't, create it with mkdir -p /mnt/sdcard.

  4. Check the root partition in use: Use df -h to check if /mnt/sdcard is mounted and to note which root partition is in use - ubi0_5 or ubi0_6.

  5. Mount the SD card: If the SD card is not mounted, mount it using mount /dev/mmcblk0p1 /mnt/sdcard/. The SD card should be formatted with either FAT32 or exFAT.

  6. Transfer the swu file to the card: This can be achieved either using an external SD card reader or SSH root logins with scp as follows: scp path\\to\\the\\swu\\file root@ip_of_the_bmc:/mnt/sdcard. Alternatively, use adb to push the file if you're using adb.

  7. Check the firmware filename: Use ls -l /mnt/sdcard to do this.

  8. Create and execute a command: Use the firmware path and the partition information to create the command. If the partition in use is ubi05, flash ubi06 and vice versa. Here's an example command: swupdate -i /mnt/sdcard/turing_pi2_ce-0.1.0.swu -e stable,upgrade_ubi6

  9. Reboot: Finally, reboot the system after the flashing process completes.

    Download the turingpi_recovery-sdcard.zip from https://github.com/turing-machines/BMC-Firmware/releases V1 if needed.