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
Power-on board and hold (s) key approximately 10 seconds to interrupt Autoboot with serial terminal session or attached USB keyboard
Boot the pre-installed vendor BSP Linux OS and indirectly override bootdelay=0
1 echo "bootdelay=-1" | sudo tee -a /boot/env_k3.txtBoot the pre-installed vendor BSP Linux OS and directly edit bootdelay=0
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).
- Insert the USB MSC device containing the prepared custom debian-installer netinst files.
- 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.
- Insert an supported USB network adapter.
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.
