Download from the Linux Kernel repository latest version we tried:
or the latest version 4.4.x available on:
Extract the Kernel sources from the compressed file by typing:
tar xvfJ linux-4.4.79.tar.xz
Move inside the new folder:
cd linux-4.4.79
~/linux-4.4.79
At this point I suggest to create a your own personal branch of Linux Kernel sources with git to keep a trace of any changes from the Kernel mainline using these commands.
git init; git add .; git commit -m "Linux vanilla"; git branch acme; git checkout acme
Download this patch file from GitHub:
and apply it by typing:
patch -p1 < linux-4.4.79.patch
Then select the right Linux configuration for your board by typing one of these commands:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-acqua_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-arietta_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-aria_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-foxg20_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.
Now compile the the device tree file requested by your board by typing one of these commands:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-acqua.dtb
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-arietta.dtb
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-aria.dtb
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- acme-foxg20.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
...
Insert a microSD formatted microSD with the boot loader and the rootfs contents already created in your Linux PC and copy on it the files directly:
Write the Linux Kernel image, the Device tree blog files in the first microSD partition and uncompress the modules in /modules/lib directory inside the second microSD partition:
cp arch/arm/boot/dts/acme-acqua.dtb /media/$USER/boot/at91-sama5d3_acqua.dtb
cp arch/arm/boot/zImage /media/$USER/boot
sudo rsync -avc modules/lib/. /media/$USER/rootfs/lib/.
cp arch/arm/boot/dts/acme-arietta.dtb /media/$USER/boot/acme-arietta.dtb
cp arch/arm/boot/zImage /media/$USER/boot
sudo rsync -avc modules/lib/. /media/$USER/rootfs/lib/.
cp arch/arm/boot/dts/acme-aria.dtb /media/$USER/boot/at91-ariag25.dtb
cp arch/arm/boot/zImage /media/$USER/boot
sudo rsync -avc modules/lib/. /media/$USER/rootfs/lib/.
cat arch/arm/boot/zImage arch/arm/boot/dts/acme-foxg20.dtb > /media/$USER/boot/uImage
sudo rsync -avc modules/lib/. /media/$USER/rootfs/lib/.
Use this method if you have a working board accessible via LAN, WiFi or USB
Write the Linux Kernel image, the Device tree blog files in the first microSD partition and uncompress the modules in /modules/lib directory inside the second microSD partition:
scp arch/arm/boot/dts/acme-acqua.dtb root@ip_address<b>:/boot/at91-sama5d3_acqua.dtb
scp arch/arm/boot/zImage root@ip_address:/boot
rsync -avc modules/lib/. root@ip_address:/lib/.
scp arch/arm/boot/dts/acme-arietta.dtb root@192.168.10.10:/boot/acme-arietta.dtb
scp arch/arm/boot/zImage root@192.168.10.10:/boot
rsync -avc modules/lib/. root@192.168.10.10:/lib/.
scp arch/arm/boot/dts/acme-aria.dtb root@ip_address:/boot/at91-ariag25.dtb
scp arch/arm/boot/zImage root@ip_address:/boot
rsync -avc modules/lib/. root@ip_address:/lib/.
cat arch/arm/boot/zImage arch/arm/boot/dts/acme-foxg20.dtb > uImage
scp uImage root@ip_address:/boot
rsync -avc modules/lib/. root@ip_address:/lib/.
If this command doesn't work verify if rsync in installed on your board. Use apt-get install rsync.
At the first access to the board command line update the module dependencies by typing this command:
depmod -a