Configuring an Ubuntu Virtual Machine for RK3399 Embedded Development

Provision a virtual machine using VMware Workstation Player or an equivalent hypervisor. Download the target Ubuntu ISO from the official release archive. During the guest OS installation, allocate a minimum of 100 GB for the virtual disk to accommodate large SDK archives, root filesystems, and build artifacts. After the initial boot, disable automatic package updates to prevent unexpected dependency shifts during compilation:

sudo systemctl stop unattended-upgrades
sudo systemctl disable unattended-upgrades

Establish a network file share to streamline data exchange between the host workstation and the Linux guest. Install the Samba suite and create a dedicated access credential:

sudo apt update && sudo apt install -y samba
sudo touch /etc/samba/smbpasswd
sudo smbpasswd -a dev_user

Define the shared directory by appending a configuration block to /etc/samba/smb.conf:

[rk3399_workspace]
   path = /home/dev_user/workspace
   browseable = yes
   read only = no
   guest ok = no
   valid users = dev_user

Apply the configuration by restarting the daemon:

sudo systemctl restart smbd

Map the directory from a Windows host by pressing Win + R, entering \\<ubuntu_vm_ip>\rk3399_workspace, and authenticating with the Samba credentials.

Enable secure remote terminal access by deploying the OpenSSH server package:

sudo apt install -y openssh-server
sudo systemctl enable --now ssh

Verify the service status with systemctl status ssh, then initiate a session using a terminal client like MobaXterm or PuTTY. Connect to the VM's IP address on port 22 using the standard Linux account.

Prepare the cross-compilation environment by installing the ARM toolchain and essential build dependencies. The RK3399 SDK requires both 32-bit ARM and 64-bit AArch64 compilres, alongside various libraries for U-Boot, kernel, and rootfs generation:

sudo apt install -y \
    gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf \
    gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
    build-essential git repo u-boot-tools device-tree-compiler \
    mtools parted libudev-dev libusb-1.0-0-dev \
    libssl-dev liblz4-tool genext2fs lib32stdc++6 \
    autotools-dev libsigsegv2 m4 intltool libdrm-dev \
    curl sed make binutils bash patch gzip bzip2 perl tar cpio \
    python3 unzip rsync file bc wget libncurses5 \
    libglib2.0-dev libgtk2.0-dev libglade2-dev \
    asciidoc w3m dblatex graphviz python3-matplotlib \
    texinfo fakeroot libparse-yapp-perl default-jre \
    patchutils swig chrpath diffstat gawk time expect-dev \
    lib32gcc-7-dev g++-7 libstdc++-7-dev

Validate the toolchain installation by querying the compiler version:

arm-linux-gnueabihf-gcc --version
aarch64-linux-gnu-gcc --version

The terminal output will display the active GCC release, confirming the host environment is correctly configured for bootloader and kernel compilation.

Tags: Ubuntu rk3399 embedded-linux cross-compilation Samba

Posted on Mon, 29 Jun 2026 16:36:24 +0000 by khendar