We're hiring!
*

Quick hack: Raspberry Pi meets Linux kernel mainline

Helen Koike avatar

Helen Koike
March 12, 2019

Share this post:

Reading time:

With just a few simple steps, you can compile and boot a Raspberry Pi using the Linux kernel mainline source code. Here's a quick tutorial on how to do just that.

This post uses Raspberry Pi model B rev2 as a base, however you can easily adapt it to your board.

Install Raspbian on a SD card:

Download any Raspbian image from https://www.raspberrypi.org/downloads/raspbian/

unzip 2018-11-13-raspbian-stretch-lite.zip
# Check with lsblk what is the device path of your sdcard, using /dev/mmcblk0 just for this example
sudo dd if=2018-11-13-raspbian-stretch-lite.img of=/dev/mmcblk0 bs=512M

Insert your SD card into the Raspberry Pi and turn it on. Raspbian will finish its installation.

Once the boot process is complete, turn it off and insert the SD card into your computer again.

Install the tool chain

sudo apt install gcc-arm-linux-gnueabihf

Cross compiling the kernel

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2835_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8 zImage modules dtbs

Installing the kernel on the SD card

# Mount the sdcard partitions
mkdir -p ../rpi-boot
mkdir -p ../rpi-rootfs
sudo mount /dev/mmcblk0p1 ../rpi-boot
sudo mount /dev/mmcblk0p2 ../rpi-rootfs

# Install the modules to the rootfs
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=../rpi-rootfs modules_install

# Copy the kernel and the device tree files to the sdcard
sudo cp arch/arm/boot/zImage ../rpi-boot
sudo cp arch/arm/boot/dts/*.dtb ../rpi-boot

# Inform to the firmware which kernel image and device tree to use
# You might need to change the device tree according to you board model
echo "kernel=zImage" >> ../rpi-boot/config.txt
echo "device_tree=bcm2835-rpi-b-rev2.dtb" >> ../rpi-boot/config.txt

# Unmount
sudo umount ../rpi-boot
sudo umount ../rpi-rootfs

That's it! Remove the SD card, plug it in your Raspberry Pi and boot!

Automating

Now, just put the previous commands in a bash script (just remember to remove the lines that modifies config.txt as this is only required once), and execute it whenever you want to re-build and re-install the kernel on your sdcard.

Booting the original kernel

If you need to revert to the original kernel, you can always do so by inserting the SD card into your computer, mounting the boot partition and commenting the kernel and device_tree lines from your config.txt

# Uncomment these lines to boot custom kernel
#kernel=zImage
#device_tree=bcm2835-rpi-b-rev2.dtb

Happy hacking!


Visit Helen's blog.

Search the newsroom

Latest Blog Posts

Optimizing memory access in NIR

07/05/2026

A complete breakdown of Mesa’s NIR compiler detailing how it optimizes shader memory access with SSA promotion, deref analysis, copy propagation,…

BlueZ-powered Auracast broadcasting on Genio 700

05/05/2026

Collabora brought Bluetooth Auracast broadcasting to MediaTek Genio 700 for Embedded World 2026. Here's the complete, fully Open Source…

Making the invisible audible: Building an OpenXR experience for ocean protection

22/04/2026

Using our XR expertise, Collabora created a standalone XR experience for our 1% for the Planet partner, SOMAR, to showcase the direct impact…

Bringing BitNet to ExecuTorch via Vulkan

17/04/2026

BitNet-style ternary brings LLM inference to ExecuTorch via its Vulkan backend, enabling much smaller, bandwidth-efficient models with portable…

Re-thinking framebuffers in PanVK

23/03/2026

PanVK’s new framebuffer abstraction for Mali GPUs removes OpenGL-specific constraints, unlocking more flexible tiled rendering features…

Running Mainline Linux, U-Boot, and Mesa on Rockchip: A year in review

02/03/2026

Get the recap of Nicolas Frattaroli's FOSDEM talk detailing Rockchip’s mainline progress, including Vulkan 1.4 and NPU support as a vital…

Open Since 2005 logo

Our website only uses a strictly necessary session cookie provided by our CMS system. To find out more please follow this link.

Collabora Limited © 2005-2026. All rights reserved. Privacy Notice. Sitemap.