A Linux PC in required to cross compile the Kernel image.
This procedure has been tested on:
Using an Intel PC is required to install these packages
Open a terminal on your Linux PC and download the Linux Kernel sources from the main stream repository:
Extract the Kernel sources from the compressed file by typing:
tar xvfJ linux-4.19.128.tar.xz
Move inside the new folder:
Create with git a new branch of Linux Kernel sources called acme to keep a trace of any changes from the Kernel mainline.
Install git on your PC:
sudo apt update sudo apt install git
Create a local git repository and the new branch acme:
git init; git add .; git commit -m "Linux Vanilla"; git branch acme; git checkout acme
Download the Acme Systems patch for this Kernel version. It add just the Acme boards defconfig, device trees and small few bug fixes:
and apply it by typing:
patch -p1 < linux-4.19.x.patch
Set the defconfig:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-aria_defconfig
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.
make ARCH=arm savedefconfig
defconfig contains your configuration. You could rename and copy it in
cp defconfig arch/arm/configs/my_defconfig
Now compile the device tree file requested by your board by selecting one of the following commands:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-aria.dtb
Compile the Linux Kernel sources and generate the binary compressed image file to save in the first partition of microSD card.
make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zImage ... Image arch/arm/boot/zImage is ready
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:
make modules -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make modules_install INSTALL_MOD_PATH=./modules ARCH=arm
Write the Linux Kernel image and the device tree blob in the first microSD partition:
sudo cp arch/arm/boot/zImage /media/$USER/BOOT sudo cp arch/arm/boot/dts/acme-aria.dtb /media/$USER/BOOT
Write the Linux Kernel modules inside the second microSD partition:
sudo rsync -avc modules/lib/. /media/$USER/rootfs/lib/.
At the first access to the board command line update the module dependencies by typing this command:
If you want to create a patch with the changes you have made on the vanilla Linux kernel use these commands:
git checkout acme git diff master > acme.patch
To revert a patch applied type:
patch -p1 -R < ../acme.patch
To customize the device copy the file arch/arm/boot/dts/acme-aria.dts in arch/arm/boot/dts/acme-aria-yourname.dts the edit it, when ready compile it by typing:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
Rename acme-aria-yourname.dtb in acme-aria.dtb and save it in the first boot partition of Aria microSD then boot it.