Cross Compilation and Booting of Linux kernel for Raspberry Pi3 – Manual Compilation

For this post, we assume that you already have a working root filesystem as we did in “Building kernel and filesystem using Yocto for Raspberry Pi / Creating Embedded Linux for RPi using Yocto” since we just want to showcase how to manually compile kernel for RPi.

Download Linux kernel source code from raspberry pi git

 $ mkdir -p /home/myuser/rpi 
 $ cd /home/myuser/rpi 
 $ git clone git://github.com/raspberrypi/linux.git --depth=1 

This will download the default HEAD branch from the remote repository.

$ cd linux 
$ git branch * rpi-4.9.y

downloading toolchain

 cd /home/myuser/rpi 
 $ git clone https://github.com/raspberrypi/tools --depth 1 
 $ cd tools 
 $ git branch
* master

export toolchain path

 $ export PATH=$PATH:/home/myuser/rpi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin 

Configuring Linux Kernel

 $ cd linux 

default configuration file for RPi3 is arch/arm/configs/bcm2709_defconfig

 $ make ARCH=arm CROSS_COMPILE=arm-bcm2708-linux-gnueabi- bcm2709_defconfig 

Above command will do the default configuration of kernel for compilation for RPi

Now, we will compile the kernel to create kernel binary using below command,

 $ make ARCH=arm CROSS_COMPILE=arm-bcm2708-linux-gnueabi- zImage modules dtbs 

This command will create, kernel zImage at arch/arm/boot/zImage

 $ file arch/arm/boot/zImage
arch/arm/boot/zImage: Linux kernel ARM boot executable zImage (little-endian) 

Now, we have to copy this image into first partition of the SD card by using standard name as “kernel7.img” as,

 $ sudo cp -r arch/arm/boot/zImage /media/myuser/raspberrypi/kernel7.img 

Assuming that first partition of sdcard is mounted at /media/myuser/raspberrypi/ ( you can check same using df -h command )

READ  Linux Kernel and USB

Now, put unmount this SD card and put to RPi and power ON RPi,

You can check now the booted kernel is what we manually compiled as,

 root@raspberrypi3:~# cat /proc/version
Linux version 4.9.45-v7+ (myuser@myhost) (gcc version 4.7.1 20120402 (prerelease) (crosstool-NG 1.15.2) )
#1 SMP Mon Aug 28 19:52:58 IST 2017

Leave a Reply

Your email address will not be published. Required fields are marked *