HCL:Khadas Vim
The Khadas VIM by Shenzhen Wesion is a single-board computer.
Technical data
- Amlogic S905X SoC
- 4x ARM Cortex-A53 CPU
- ARM Mali-450 GPU
- 2 GB RAM
- 8/16 GB eMMC
- 40-pin GPIO connector (not Raspberry Pi compatible)
Manual installation
U-Boot installation
Khadas VIM board is supported in official U-Boot since version v2018.01-rc1. Current version (v2019.01) support boot from eMMC and SD card.
A u-boot-khadas-vim package is available.
To be able to create a bootable image in OBS, aml_encrypt_gxb tool (available on GitHub) should be modified to support S905X SoC.
Please follow the official README available here to generate a U-Boot image. A set of tools are also available on GitHub to simplify the U-Boot compilation/generation.
Please note that your SD card or eMMC must use MBR partitions (not GPT).
GRUB2 works with the EFI boot stack available in U-Boot.
openSUSE Tumbleweed installation using standard DVD
With TW and with the EFI boot protocol implemented in U-Boot, it is possible to directly install from DVD image on Khadas VIM.
Note this guide assumes:
- that you already have a Leap/Tumbleweed OS installed on your PC
- that you are familiar with the openSUSE installation procedure
To boot the DVD there are multiple ways:
- burning the ISO on a USB key
- booting the ISO through the network boot (PXE)
For each cases, it is still needed to use a SD card or USB key to load U-Boot (SD card is the preferred way).
The USB key method will be used here (with U-Boot on the SD card).
Graphical/textmode installation through HDMI partially works, but some issues can happen, so it is recommended to use textmode ssh installation if possible. Also, U-Boot shell is only accessible through serial console at that time.
Note: To be able to execute U-Boot from eMMC you need to use MBR disk scheme instead of the default GPT scheme. To do this you "simply" need to do a custom disk configuration. Or you can use a small SD card and put U-Boot on it, S905X SoC will boot on it if no bootloader is found on SPI/eMMC. So with this you can keep the default GPT partition scheme.
- Download the Tumbleweed ISO and "burn" it on the USB key - WARNING all previous data on the device will be lost!
# dd if=[image].iso of=/dev/<usb_key> bs=4M iflag=direct,fullblock oflag=direct
- Insert the SD card and USB key into your board
- Connect the board to your PC via serial port (recommended; USB-TTL serial cable needed)
- Connect the board to your monitor (via DVI/HDMI, optional if you use the serial port)
- Power on the board
- Stop the U-boot procedure by pressing a key
- Force boot on the USB key
Hit any key to stop autoboot: 0 => run usb_boot
- Some parameters need to be set for installation, so you have to edit the boot option on GRUB and add the following options:
earlycon=meson,0xc81004c0 console=ttyAML0,115200 ssh=1 sshpassword=linux
- Some optional parameters are also useful:
splash=verbose # can be useful to have all systemd messages on the console
- Your board is now booting the installation DVD!
- Connect to the board throught SSH and execute the installer (DISPLAY= is here to force textmode for YaST):
# DISPLAY= yast.ssh
- Adapt your disk configuration if needed (GPT vs. MBR), normal installation is then expected!
- If you want to install U-Boot on the eMMC please pause the installation at the end before rebooting (Stop option) and follow the U-Boot installation on eMMC procedure
Note: after installation the serial console is by default reset to ttyAMA0, so you need to set it to ttyAML0 again in /etc/defaut/grub (don't forget to re-generate grub.cfg file after!).
U-Boot installation on eMMC
After OS installation if you want to have U-Boot installed on the eMMC as well you just have to burn the u-boot.bin file in the "MBR gap":
dd if=u-boot.bin of=/dev/mmcblk1 bs=512 seek=1
And then reboot your board without any SD card/USB key. U-Boot should be loaded directly from eMMC. After this boot from SD card is not possible anymore!
If you first want to clean the previously installed U-Boot, or if you want to force boot on SD card, you could erase the "MBR gap":
dd if=/dev/zero of=/dev/mmcblk1 bs=512 seek=1 count=2047