K3 Pico ITX

Factory pre-installed BSP

K3 Pico ITX factory pre-installed vendor BSP U-Boot is by default configured bootdelay=0 and to read env_k3.txt on the onboard user flash storage boot partition scsi 0:2

Access vendor BSP U-Boot commandline

Use any of the following methods to access the vendor BSP U-Boot commandline

Install Debian

As of this writing Linux Kernel 7.1rc5 is in Debian Experimental archives, which will boot an initramfs and UART serial console with non-functional ethernet networking. There is not any working storage driver for the SpacemiT K3 platform in Linux 7.1.x; mainline Linux -next targeting Linux Kernel 7.2 does have USB platform support and so storage and networking are possible.

A kernel package may be built and then initramfs for debian-installer modified to make it possible to install Debian with USB-attached storage and networking.

Build the -next mainline Linux kernel:

   1 cat > /etc/apt/sources.list.d/debian-experimental.sources << EOF
   2 Types: deb deb-src
   3 URIs: http://deb.debian.org/debian
   4 Suites: experimental
   5 Components: main
   6 Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
   7 EOF
   8 
   9 dpkg --add-architecture riscv64
  10 apt update
  11 
  12 apt install -y --install-recommends linux-config-7.1:riscv64
  13 
  14 apt install -y --install-recommends git
  15 git clone --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git linux-next.git
  16 
  17 pushd linux-next.git
  18 apt install -y crossbuild-essential-riscv64
  19 xzcat /usr/src/linux-config-7.1/config.riscv64_none_riscv64.xz > .config
  20 scripts/config --enable DEBUG_INFO_NONE --undefine CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
  21 make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- olddefconfig
  22 apt install -y debhelper python3 libdw-dev libssl-dev:riscv64
  23 make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- KDEB_CHANGELOG_DIST=unreleased -j$(nproc) bindeb-pkg LOCALVERSION=-next
  24 popd

Customize debian-installer netinst:

   1 apt install -y curl fakeroot
   2 curl -L https://deb.debian.org/debian/dists/trixie/main/installer-riscv64/current/images/netboot/netboot.tar.gz | tar xz ./debian-installer
   3 fakeroot  # enter fakeroot environment to preserve initrd permissions
   4 gzip -dc debian-installer/riscv64/initrd.gz | cpio -id --directory=initrd
   5 dpkg -x linux-image-7.1*_riscv64.deb initrd/custom
   6 gzip -dc initrd/custom/boot/vmlinuz-* > debian-installer/riscv64/linux-custom
   7 mv initrd/lib/modules initrd/custom/
   8 mv initrd/custom/lib/modules initrd/lib/
   9 mv initrd/custom/usr/lib/* debian-installer/device-tree-custom
  10 find initrd -path initrd/custom -prune -o -printf '%P\0' | cpio -0oH newc --directory=initrd | gzip -c > debian-installer/riscv64/initrd-custom.gz
  11 exit  # leave fakeroot environment
  12 

There should now be linux-custom and initrd-custom.gz files in ./debian-installer/riscv64/ directory, and spacemit/k3-pico-itx.dtb in ./debian-installer/device-tree-custom/ directory. Prepare a thumbdrive USB MSC device with a copy of the ./debian-installer directory to the root of any U-Boot compatible filesystem (recommended is FAT32 on the first partition usb 0:1).

  1. Insert the USB MSC device containing the prepared custom debian-installer netinst files.
  2. Insert the USB MSC device target media for Debian 13 Trixie installation. Only USB MSC is viable as of late May 2026 until future when more of K3 platform is upstream. This may be the same media as the prepared custom debian-installer netinst files (above) to overwrite the device or install to a non-overlapping partition.
  3. Insert an supported USB network adapter.
  4. Power-on the K3 Pico-ITX board and with access to U-Boot command-line (see Access vendor BSP U-Boot commandline above):

   1 env set kernel_addr_r 0x140000000
   2 env set fdt_addr_r 0x150000000
   3 env set ramdisk_addr_r 0x130000000
   4 load usb 0:1 $kernel_addr_r /debian-installer/riscv64/linux-custom
   5 load usb 0:1 $fdt_addr_r /debian-installer/device-tree-custom/spacemit/k3-pico-itx.dtb
   6 load usb 0:1 $ramdisk_addr_r /debian-installer/riscv64/initrd-custom.gz
   7 env set bootargs 'initrd='$ramdisk_addr_r',0x'$filesize' console=ttyS0,115200'
   8 booti $kernel_addr_r $ramdisk_addr_r:$filesize $fdt_addr_r
   9 

The end0 ethernet network interface may be nonfunctional. Use instead an USB network adapter.

There is no bootloader in this configuration.