Compiling Linux Kernel 6.1 LTS

This article illustrates how to generate a bootable class='acmetable' Linux Kernel for Acme Systems SOM from scratch


Step-by-step procedure

Kernel sources download

Open a terminal on your Linux PC and download the Linux Kernel sources from the main stream repository:

mv linux-linux-6.1-mchp linux-6.1-mchp
cd linux-6.1-mchp

Download and set the Kernel defconfig to use for your SOM od SBC:

Fox board D27 SBC

wget -O arch/arm/configs/acme-foxd27_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- acme-foxd27_defconfig


wget -O arch/arm/configs/acme-roadrunner_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- acme-roadrunner_defconfig


wget -O arch/arm/configs/acme-arietta_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-arietta_defconfig

Customize the default Linux Kernel configuration:

If you need to customize the Kernel configuration or you just want to take a look around the Kernel setup type:

make ARCH=arm menuconfig

and navigate inside the Kernel configuration using the arrow keys and following the help provided by the menuconfig interface.

Generate the Device Tree Blob file (.dtb)

Download and compile the device tree file:

Fox Board D27

wget -O arch/arm/boot/dts/acme-foxd27.dts
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- acme-foxd27.dtb


wget -O arch/arm/boot/dts/acme-roadrunner.dts
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- acme-roadrunner.dtb


wget -O arch/arm/boot/dts/acme-arietta.dts
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- acme-arietta.dtb

Compile the Kernel image

Compile the Linux Kernel sources and generate the binary compressed image file to save in the first partition of microSD card.

Fox board D27, Roadrunner and Acqua

make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage

Aria and Arietta

make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zImage

Compile the Kernel modules

The image generated contains the Linux Kernel and all the built-in device drivers (option [*] in menuconfig) compiled with it.

Al the drivers compiled as external modules (option [M] in menuconfig) need to be compiled and saved in the rootfs /lib directory on the second partition of the microSD. We didn't use any [M] flag in our defconfig so this procedure is not requested but. in case you add something. these are the commands to use to compile them:

Fox board D27, Roadrunner and Acqua

make modules -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

Aria and Arietta

make modules -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

All SOMs:

make modules_install INSTALL_MOD_PATH=./modules ARCH=arm

Copy the boot files into the first microSD partition

Insert a formatted microSD with the boot loader (at91bootstrap) and the rootfs contents already created in your Linux PC and copy on it these files:

Write the Linux Kernel image and the device tree blob in the first microSD partition:

sudo cp arch/arm/boot/zImage /media/$USER/boot

Write also the devicd tree blob file (selected one of these for your board):

sudo cp arch/arm/boot/dts/acme-foxd27.dtb /media/$USER/boot/acme-roadrunner.dtb
sudo cp arch/arm/boot/dts/acme-roadrunner.dtb /media/$USER/boot
sudo cp arch/arm/boot/dts/acme-acqua.dtb /media/$USER/boot
sudo cp arch/arm/boot/dts/acme-aria.dtb /media/$USER/boot
sudo cp arch/arm/boot/dts/acme-arietta.dtb /media/$USER/boot

Copy also the Linux kernel command file cmdline.txt

Fox Board D27

sudo cp acme-foxd27_cmdline.txt /media/$USER/boot/cmdline.txt


sudo cp acme-roadrunner_cmdline.txt /media/$USER/boot/cmdline.txt


sudo cp acme-acqua_cmdline.txt /media/$USER/boot/cmdline.txt


sudo cp acme-aria_cmdline.txt /media/$USER/boot/cmdline.txt


sudo cp acme-arietta_cmdline.txt /media/$USER/boot/cmdline.txt

Write the Linux Kernel modules inside the second microSD partition:

sudo rsync -avc modules/lib/. /media/$USER/rootfs/lib/.

Insert the MicroSD in your Roadrunner board and check on the serial debug port the boot messages

After the first boot

At the first access to the board command line update the module dependencies by typing this command:

sudo depmod -a

File used

Save your own Kernel configuration

In case of changes to the kernel configuration follow this steps to save it:

make ARCH=arm savedefconfig

The file defconfig contains your configuration. You could rename and copy it in arch/arm/configs/

cp defconfig arch/arm/configs/my_defconfig