<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TinyComputers.io (Posts about bulleyes)</title><link>https://tinycomputers.io/</link><description></description><atom:link href="https://tinycomputers.io/categories/bulleyes.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 A.C. Jokela 
&lt;!-- div style="width: 100%" --&gt;
&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"&gt;&lt;img alt="" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/80x15.png" /&gt; Creative Commons Attribution-ShareAlike&lt;/a&gt;&amp;nbsp;|&amp;nbsp;
&lt;!-- /div --&gt;
</copyright><lastBuildDate>Wed, 11 Mar 2026 00:05:50 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Building a Kernel and Disk Image for the Radxa CM3</title><link>https://tinycomputers.io/posts/building-a-kernel-and-disk-image-for-the-radxa-cm3.html?utm_source=feed&amp;utm_medium=rss&amp;utm_campaign=rss</link><dc:creator>A.C. Jokela</dc:creator><description>&lt;div class="audio-widget"&gt;
&lt;div class="audio-widget-header"&gt;
&lt;span class="audio-widget-icon"&gt;🎧&lt;/span&gt;
&lt;span class="audio-widget-label"&gt;Listen to this article&lt;/span&gt;
&lt;/div&gt;
&lt;audio controls preload="metadata"&gt;
&lt;source src="https://tinycomputers.io/building-a-kernel-and-disk-image-for-the-radxa-cm3_tts.mp3" type="audio/mpeg"&gt;
&lt;/source&gt;&lt;/audio&gt;
&lt;div class="audio-widget-footer"&gt;18 min · AI-generated narration&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;With my eventual goal of testing out network and router capabilities of four compute modules that are pin compatible with the Raspberry Pi CM4, I have been doing setup work.  My last few postings (&lt;a href="https://tinycomputers.io/posts/polycube-network-on-arm-hardware-WIP.html"&gt;here&lt;/a&gt;, &lt;a href="https://tinycomputers.io/posts/polycube-on-arm-based-sbc-follow-up-1.html"&gt;here&lt;/a&gt; and &lt;a href="https://tinycomputers.io/posts/polycube-complete-installation-on-raspberry-pi-cm4.html"&gt;here&lt;/a&gt;) on getting Polycube, a drop-in replacement for &lt;code&gt;iptables&lt;/code&gt; and a number of other utilities that uses &lt;a href="https://baud.rs/j7I1gI"&gt;eBPF&lt;/a&gt; instead of the usual &lt;code&gt;netfilter&lt;/code&gt;-based mechanisms.  The objective is to test out &lt;code&gt;netfilter&lt;/code&gt;and &lt;code&gt;ebpf&lt;/code&gt; routing on the four modules (giving me a collection of eight test sets).&lt;/p&gt;
&lt;p&gt;I have Polycube compiled and appearing to function on the &lt;a href="https://tinycomputers.io/posts/polycube-complete-installation-on-raspberry-pi-cm4.html"&gt;Raspberry Pi CM4&lt;/a&gt;, the Pine64 SOQuartz module, and the code compiled and runnable on the Radxa CM3.  There is one problem with running Polycube on the CM3: the SYSCALL for eBPF was not compiled into the kernel.  Even though the code successfully compiled to an executable binary, the necessary kernel hooks are not present.  The solution: compile a new kernel and create a new disk image.&lt;/p&gt;
&lt;p&gt;If you are a person who is interested in tiny computers of various flavors, you will have noticed that there are an abundance of different distributions out on the internet.  An example, for the Pine64 Quartz64 model A, there are at least three different variant distributions - &lt;a href="https://baud.rs/YHvnIM"&gt;Plebian Linux&lt;/a&gt;, &lt;a href="https://baud.rs/h5FTIy"&gt;DietPI&lt;/a&gt;, and &lt;a href="https://baud.rs/XKJUjo"&gt;balbes150's Armbian&lt;/a&gt;.  They all have one thing in common, they all use Debian packages and are in one sense or another, a derivative of Debian and the Debian ecosystem.  If you have used Ubuntu, you have used a distribution that leverages Debian architecture and infrastructure.&lt;/p&gt;
&lt;p&gt;The available distributions for Radxa CM3 also use Debian ecosystem components; everything from being able to utilize other arm64 packages, to using the build infrastructure for bundling up things into a handy disk image that can be burned/written to media.  &lt;/p&gt;
&lt;p&gt;Many single board computer distributions are what is called a "board support package", or BSP for short.  A BSP includes low level boot programs (a first stage bootloader, prebuilt binaries and Arm Trustzone Firmware) a boot program (a second stage bootloader , like u-boot or Tianocore EFI), an operating system and the compatible drivers for that are specific to the board.  The BSP is a unique bundling of software that is specific to a given board or family of boards.  Often times, the Linux kernel that is included with a given BSP has been modified and new drivers have been added.  The kernel is essentially a fork and no longer tracks the "main branch" of Linux kernel development and any upstream changes in the main branch maybe difficult or impossible to incorporate.  The kernel is, therefore, a snapshot in time that all too often fades into obscurity because of lack of attention from the developers or a broader community (if a community exists).&lt;/p&gt;
&lt;div style="width: 100%; text-align: center;"&gt;
    &lt;img src="https://tinycomputers.io/images/radxa-cm3-rpi-cm4-io-board.png.webp" loading="lazy" style="zoom: 75%"&gt;
&lt;/div&gt;

&lt;p&gt;Despite not having the following and community backing like that of Raspberry Pi, Radxa does have well maintained series of BSP distributions.  Many do have their kernels pegged to a specific version within the Linux kernel repository, but much of the userland software is not usually tied to specific features found in specific versions -- unless the software is something like Polycube.&lt;/p&gt;
&lt;p&gt;Radxa does a great job of providing build frameworks for both configuring and compiling a new kernel, as well as downloading packages and building a disk image.  Let's get started.&lt;/p&gt;
&lt;hr&gt;

&lt;p&gt;The following information is based on &lt;a href="https://baud.rs/AhABdD"&gt;this&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;As a pregame note, I made a virtual machine using &lt;a href="https://baud.rs/zhqYh7"&gt;VirtualBox&lt;/a&gt;.  Specifically, Debian 11 for build the new kernel in order to prevent any unnecessary contaminations of packages, dependencies or the like on my laptop.  The building of the distribution image uses Docker and will not pose any issues.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Clone the Github repository &lt;a href="https://baud.rs/onuthy"&gt;rockchip-bsp&lt;/a&gt; and specifically the &lt;code&gt;stable-4.19-rock3&lt;/code&gt; branch.  The pull in any submodules.
    &lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;git clone -b stable-4.19-rock3 https://github.com/radxa/rockchip-bsp.git&lt;/code&gt;
&lt;code class="command"&gt;cd rockchip-bsp&lt;/code&gt;
&lt;code class="command"&gt;git submodule init&lt;/code&gt;
&lt;code class="command"&gt;git submodule update&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;stable-4.19-rock3&lt;/code&gt; branch has support for the following boards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ROCK 3A&lt;/li&gt;
&lt;li&gt;ROCK 3B&lt;/li&gt;
&lt;li&gt;Radxa CM3 IO&lt;/li&gt;
&lt;li&gt;Radxa E23&lt;/li&gt;
&lt;li&gt;Radxa E25&lt;/li&gt;
&lt;li&gt;Radxa CM3 RASPCM4IO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloning the repository and checking out the &lt;code&gt;stable-4.19-rock3&lt;/code&gt; branch produces the following directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;build: &lt;em&gt;Some script files and configuration files for building u-boot, kernel and rootfs.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;kernel: &lt;em&gt;kernel source code, current version is &lt;/em&gt;&lt;em&gt;4.19.193&lt;/em&gt;&lt;em&gt;.&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;rkbin: &lt;em&gt;Prebuilt Rockchip binaries, include first stage loader and &lt;a href="https://baud.rs/VOrY4G"&gt;Arm TrustZone Firmware&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;rootfs: &lt;em&gt;Bootstrap a Debian based rootfs, support architecture &lt;code&gt;armhf&lt;/code&gt; and &lt;code&gt;arm64&lt;/code&gt;, &lt;/em&gt;&lt;em&gt;supports Debian Jessie, Stretch and Buster&lt;/em&gt;&lt;em&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;u-boot: &lt;em&gt;u-boot as the second stage bootloader&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a few things to note.  First, our kernel is version &lt;a href="https://baud.rs/JsziqN"&gt;4.19.193&lt;/a&gt;.  Polycube &lt;a href="https://baud.rs/aCqmu0"&gt;requires at minimum v4.15&lt;/a&gt;.  With v4.19, we are covered.  Second, this repository/project contains scripts to bootstrap and build a disk image.  We will not be using this functionality.  The supported Debian distributions are too old. We have been using at least Debian &lt;em&gt;bullseye&lt;/em&gt; for all of our Polycube testing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install a &lt;a href="https://baud.rs/o4LBIr"&gt;Linaro&lt;/a&gt; toolchain.  This is used for compiling code on an x86/amd64 and producing arm64 binaries.&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz&lt;/code&gt;
&lt;code class="command"&gt;sudo tar xvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz  -C /usr/local/&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Linaro has driven open source software development on Arm since 2010, providing the tools, Linux kernel quality and security needed for a solid foundation to innovate on. Linaro works with member companies and the open source community to maintain the Arm software ecosystem and enable new markets on Arm architecture.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In your user's &lt;code&gt;.bashrc&lt;/code&gt; file, append the following line:
    &lt;/p&gt;&lt;pre&gt;export PATH="/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:$PATH"&lt;/pre&gt;
    Then &lt;code&gt;source&lt;/code&gt; &lt;code&gt;.bashrc&lt;/code&gt; to update your &lt;code&gt;PATH&lt;/code&gt; variable.
    &lt;pre&gt;&lt;code class="command"&gt;source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify that the Linaro GCC toolchain is visable from your &lt;code&gt;PATH&lt;/code&gt;
&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;which aarch64-linux-gnu-gcc&lt;/code&gt;
/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install a few packages:
 &lt;br&gt;
&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;sudo apt-get install gcc-aarch64-linux-gnu \&lt;/code&gt;
              device-tree-compiler libncurses5 libncurses5-dev \
              build-essential libssl-dev mtools bc python dosfstools&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build u-boot for Radxa CM3 and specifically for use with a Raspberry Pi CM4 carrier/io board.
 &lt;br&gt;
&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;./build/mk-uboot.sh rk3566-radxa-cm3-raspcm4io&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;There should be files in &lt;code&gt;out/u-boot&lt;/code&gt;
&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;ls -l out/u-boot&lt;/code&gt;
total 2132
-rw-rw-r-- 1 alex alex  299008 Feb  1 22:43 idbloader.img
-rw-rw-r-- 1 alex alex  453056 Feb  1 22:43 rk356x_spl_loader_ddr1056_v1.10.111.bin
-rw-rw-r-- 1 alex alex 1426944 Feb  1 22:43 u-boot.itb&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure a new kernel.
   If you have ever cloned the Linux source code repository or unarchived a tar-file of the source and then configured kernel and then compiled it, the following step will be familiar.  The build process has been remarkably similar for better part of twenty-five years.  I had not configured and compiled a kernel from source in a very long time; the kernel configuration process was remarkably familiar.
    &lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;cd kernel&lt;/code&gt;
&lt;code class="command"&gt;export ARCH=arm64&lt;/code&gt;
&lt;code class="command"&gt;export CROSS_COMPILE=aarch64-linux-gnu-&lt;/code&gt;
&lt;code class="command"&gt;make rockchip_linux_defconfig&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There will be a file named &lt;code&gt;.config&lt;/code&gt;, you can either edit this by hand (if you have an idea of what you are doing and need to do) or you can use a handy menu-driven interface.  Either way, for my specific needs of enabling eBPF, I simply opened &lt;code&gt;.config&lt;/code&gt; in an editor, and searched for references to &lt;code&gt;BPF&lt;/code&gt;.  &lt;/p&gt;
&lt;p&gt;If you want to try the menu-driven method, execute the following:
&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;make menuconfig&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save your new configuration (run this whether you editted by hand or used &lt;code&gt;menuconfig&lt;/code&gt;)
&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;make savedefconfig&lt;/code&gt;
&lt;code class="command"&gt;cp defconfig arch/arm64/configs/rockchip_linux_defconfig&lt;/code&gt;
&lt;code class="command"&gt;cd ..&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="width: 100%; text-align: center;"&gt;&lt;img src="https://tinycomputers.io/images/compile-safedefconfig.gif" loading="lazy"&gt;&lt;br&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build a kernel
    &lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;./build/mk-kernel.sh rk3566-radxa-cm3-raspcm4io&lt;/code&gt;&lt;/pre&gt;
    This will kick off the compilation of the kernel; obviously, depending upon your build machine, it might take a while.
&lt;p&gt;You will likely be presented with some configuration questions:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="width: 100%; text-align: center;"&gt;&lt;img src="https://tinycomputers.io/images/building-radxa-cm3-kernel-first-time.png.webp" loading="lazy"&gt;&lt;/div&gt;
&lt;p&gt;Give that I am not entirely versed in things-kernel, I answered &lt;code&gt;y&lt;/code&gt; to all of the questions.  Leave a comment below if you have some insight into the questions that are presented during the build process.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pack up your new kernel and associated headers into Debian package files (e.g. &lt;code&gt;.deb&lt;/code&gt;).  The parameters for &lt;code&gt;pack-kernel.sh&lt;/code&gt; are: 1) the name of the kernel configuration file (from step #7); 2) &lt;code&gt;ebpf&lt;/code&gt; is a release value, it should be something useful.
    &lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;./build/pack-kernel.sh -d rockchip_linux_defconfig -r ebpf&lt;/code&gt;&lt;/pre&gt;
    This will compile the kernel, again, but this appears to be necessary because this steps does not configure the appropriate chip and board as in the previous step.
&lt;p&gt;&lt;/p&gt;&lt;div style="width: 100%; text-align: center;"&gt;&lt;img src="https://tinycomputers.io/images/building-radxa-cm3-kernel-package.png.webp" loading="lazy"&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;ls out/packages/&lt;/code&gt;
linux-4.19.193-ebpf-rockchip-g67a0c0ce87a0_4.19.193-ebpf-rockchip_arm64.changes
linux-headers-4.19.193-ebpf-rockchip-g67a0c0ce87a0_4.19.193-ebpf-rockchip_arm64.deb
linux-image-4.19.193-ebpf-rockchip-g67a0c0ce87a0_4.19.193-ebpf-rockchip_arm64.deb
linux-image-4.19.193-ebpf-rockchip-g67a0c0ce87a0-dbg_4.19.193-ebpf-rockchip_arm64.deb
linux-libc-dev_4.19.193-ebpf-rockchip_arm64.deb&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;These Debian packages will be needed when we build a Debian &lt;code&gt;bullseye&lt;/code&gt; distribution.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You will also need to copy &lt;code&gt;rk3566-radxa-cm3-rpi-cm4-io.dtb&lt;/code&gt; from &lt;code&gt;out/kernel&lt;/code&gt; directory; this device table is needed when writing a new disk image to the CM3.&lt;/p&gt;
&lt;p&gt;If you do want to assemble an older distribution (Debian buster or stretch), you can follow steps for &lt;em&gt;Make rootfs image&lt;/em&gt; found &lt;a href="https://baud.rs/AhABdD"&gt;here&lt;/a&gt;.
I have a pre-built &lt;em&gt;Debian buster with Desktop&lt;/em&gt; disk image available &lt;a href="https://baud.rs/uphn4S"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change directories to place outside of the &lt;code&gt;rockchip-bsp&lt;/code&gt; directory, and now, clone the Radxa &lt;code&gt;rbuild&lt;/code&gt; tool
    &lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;git clone https://github.com/radxa-repo/rbuild.git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will need &lt;code&gt;docker&lt;/code&gt; and associated software packages.  Installing these tools should be straightforward and there are dozens if not hundreds of howtos widely available to assist you.  If you do not have &lt;code&gt;docker&lt;/code&gt; command line tools installed and you looking for a quick guide, follow &lt;a href="https://baud.rs/pLkAux"&gt;these instructions&lt;/a&gt; before proceding.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make a directory for your kernel packages; copy kernel packages
    &lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;cd rbuild&lt;/code&gt;&lt;/pre&gt;
    Make a directory for the kernel packages; I will be using &lt;code&gt;docker&lt;/code&gt; outside of the virtual machine that I used to build the kernel packages.  You are free to use the VM for building the &lt;code&gt;bullseye&lt;/code&gt; disk image, I ran into issues and decided to use my laptop to directly use &lt;code&gt;docker&lt;/code&gt;.  I used &lt;code&gt;scp&lt;/code&gt; to copy the kernel packages from the VM into a directory named &lt;code&gt;kernel&lt;/code&gt; that is in the &lt;code&gt;rbuild&lt;/code&gt; directory containing the cloned repo.
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;rbuild&lt;/code&gt; to magically assemble a disk image for you; this will take a while, best to grab some coffee, or lunch, or just go home    for the day.  There is also a strong chance of having network timeouts while downloading necessary files.  I ended up having at least five times where a package download failed and killed the whole build process.  On a my Dell XPS Developer Edition laptop, in a VirtualBox VM, the process took over eight hours.  It should be noted that even if there is a timeout, by specifying the &lt;code&gt;-r&lt;/code&gt; parameter to &lt;code&gt;rbuild&lt;/code&gt;, this is caching the necessary Debian packages.
    &lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;./rbuild -r -k kernel/linux-image-4.19.193-ebpf-rockchip-g67a0c0ce87a0_4.19.193-ebpf-rockchip_arm64.deb radxa-cm3-rpi-cm4-io cli&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="width: 100%; text-align: center;"&gt;&lt;img src="https://tinycomputers.io/images/building-radxa-bullseye-distro.png.webp" loading="lazy"&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;ls -l&lt;/code&gt;
total 1434692
-rw-rw-r-- 1 alex alex       3322 Feb  1 22:17 action.yaml
drwxrwxr-x 6 alex alex       4096 Feb  2 09:38 common
drwxrwxr-x 2 alex alex       4096 Feb  1 22:17 configs
drwxrwxr-x 2 alex alex       4096 Feb  1 22:38 kernel
-rw-r--r-- 1 alex alex 6442450944 Feb  2 11:48 radxa-cm3-rpi-cm4-io_debian_bullseye_cli.img
-rw-rw-r-- 1 alex alex        175 Feb  2 11:48 radxa-cm3-rpi-cm4-io_debian_bullseye_cli.img.sha512
-rwxrwxr-x 1 alex alex      18869 Feb  1 22:17 rbuild
-rw-rw-r-- 1 alex alex       1542 Feb  1 22:17 README.md&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And there we have it. &lt;code&gt;radxa-cm3-rpi-cm4-io_debian_bullseye_cli.img&lt;/code&gt; is your new disk image, complete with a custom compiled kernel with eBPF enabled.  We can compress the disk image with &lt;code&gt;xz&lt;/code&gt; to make it more manageable.
    &lt;/p&gt;&lt;pre&gt;&lt;code class="command"&gt;xz -z -v radxa-cm3-rpi-cm4-io_debian_bullseye_cli.img
radxa-cm3-rpi-cm4-io_debian_bullseye_cli.img (1/1)
  3.0 %     5,938.2 KiB / 185.7 MiB = 0.031    10 MiB/s       0:18   9 min 50 s&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can download the kernel and disk image that was built during the writing of this post:
    &lt;a href="https://baud.rs/uphn4S"&gt;https://cdn.tinycomputers.io/radxa-rock3/debian-buster-linux-4.19.193-2a-eBPF-rockchip-rk3566-radxa-cm3-rpicm4io.img.xz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Device Table file built during the writing of this post:
&lt;a href="https://baud.rs/OUr75Y"&gt;https://cdn.tinycomputers.io/radxa-rock3/linux-image-4.19.193-ebpf-rockchip-g67a0c0ce87a0_4.19.193-ebpf-rockchip_arm64.dtb&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Instructions on writing the disk image to eMMC on the Radxa CM3, you can follow the instructions on my previous post, &lt;a href="https://tinycomputers.io/posts/posts/raspberry-pi-cm4-and-pin-compatible-modules.html"&gt;Raspberry Pi CM4 and Pin Compatible Modules&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;More Information on Radxa's build scripts, &lt;a href="https://baud.rs/6gEjfg"&gt;rbuild documentation&lt;/a&gt; and its &lt;a href="https://baud.rs/ckFBOg"&gt;github repo&lt;/a&gt;&lt;/p&gt;
&lt;script type="text/javascript"&gt;
amzn_assoc_placement = "adunit0";
amzn_assoc_tracking_id = "tinycompute05-20";
amzn_assoc_ad_mode = "manual";
amzn_assoc_ad_type = "smart";
amzn_assoc_marketplace = "amazon";
amzn_assoc_region = "US";
amzn_assoc_title = "Tiny Computers Picks";
amzn_assoc_linkid = "57e3849d20157bd2e23384360758ad44";
amzn_assoc_rows = "4";
amzn_assoc_design = "text_links";
amzn_assoc_asins = "B0BG5CFFZZ,B0BGJ2HHRZ,B0BLN7TYH6,B0B7QMX8RJ";
&lt;/script&gt;
&lt;script src="//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US"&gt;&lt;/script&gt;</description><category>bulleyes</category><category>buster</category><category>compute module</category><category>debian based distro</category><category>ebpf</category><category>godebos/debos</category><category>radxa</category><guid>https://tinycomputers.io/posts/building-a-kernel-and-disk-image-for-the-radxa-cm3.html</guid><pubDate>Tue, 31 Jan 2023 18:42:15 GMT</pubDate></item></channel></rss>