Linux Kernel - 6.12
Linux 6.12 for MPU source code
The Linux kernel for Microchip ARM-Based MPUs (aka AT91) is distributed as a GIT tree hosted on GitHub as a fork of the official Linus Torvalds' git tree. The objective of the Microchip Linux team is to integrate all the AT91-related material in the official Linux Kernel.
Before completing this inclusion process, which can take time, this website provides the Linux4SAM Linux Kernel git tree for AT91 devices at:
https://github.com/linux4microchip/linux/tree/linux-6.12-mchp
Tags
linux4microchip-2025.04 tag
Enhancements are added on top of the official v6.12 Linux kernel tag where most of the Microchip SoC features are already supported. Note as well that we re-integrate each and every stable kernel release on top of this Long Term Support (LTS) kernel revision. This means that each v6.12.x version is merged in our branch.
Here is a little summary of the main additional enhancements:
- Integration of stable Long Term Support (LTS) kernel updates up to v6.12.22
- Improve support for SAMA7D65 Curiosity board.
- Add initial support for SAMA7G54 SoM and SAM9x75 SoM
- Add support for unified WILC S02 FW 3.1 and WILC 1000/3000 FW 16.4 WiFi / BLE driver.
- Add initial support for GFX2D GPU
- Add support for ASRC peripheral to peripheral for SAMA7G65
- Enable WM8731 audio codec as a module.
- Add shutdown controller support for SAM9X7 SoC.
- Improve SoC driver with support for SAMA7D65.
- Crypto: add fallback for unsupported ESP header length (not multiple of 4 words).
- Clock: configure ACR register in all PLL settings. Update clock API usage for SAMA7G5 and SAMA7D65.
- OP-TEE: Update SCMI for SAMA7G5 to include GCLK for PDMC0 and PDMC1.
- QSPI: add support for SAMA7D65
- Added support for PAC194X and PAC195X Current and Power Monitors
- Added support for LAN9646 and updated support for LAN937X, KSZ9896, KSZ9477 gigabit Ethernet switches
Required packages
You must install essential host packages on your build host. These requirements are listed in the Linux kernel documentation with the chapter Install build requirements. You must follow this process which includes, but not limited to, the following packages:
- build-essential
- flex
- bison
- git
- perl-base
- libssl-dev
- libncurses5-dev
- libncursesw5-dev
- ncurses-dev
Getting Kernel sources
To get the source code, you have to clone the repository:
Cloning into 'linux'...
remote: Enumerating objects: 8587836, done.
remote: Total 8587836 (delta 0), reused 0 (delta 0), pack-reused 8587836
Receiving objects: 100% (8587836/8587836), 3.49 GiB | 13.44 MiB/s, done.
Resolving deltas: 100% (7117887/7117887), done.
Updating files: 100% (70687/70687), done.
$ cd linux
The source code has been taken from the master branch which is pointing on the latest branch we use.
$ git remote update linux4microchip
Fetching linux4microchip
From https://github.com/linux4microchip/linux
* [new branch] linux-6.6-mchp -> linux4microchip/linux-6.6-mchp
* [new branch] linux-6.12-mchp -> linux4microchip/linux-6.12-mchp
* [new branch] master -> linux4microchip/master
If you want to use another branch, you can list them and use one of them by doing this:
linux4microchip/linux-6.1-mchp
linux4microchip/linux-6.1-mchp+fpga
linux4microchip/linux-6.6-mchp
linux4microchip/linux-6.6-mchp+fpga
linux4microchip/linux-6.12-mchp
linux4microchip/master
$ git checkout -b linux-6.12-mchp --track remotes/linux4microchip/linux-6.12-mchp
Branch linux-6.12-mchp set up to track remote branch linux-6.12-mchp from linux4microchip.
Switched to a new branch 'linux-6.12-mchp'
Setup ARM Cross Compiler
First step is to dowload the ARM GNU Toolchain:
wget -c https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz
Next step is to add the ARM GNU Toolchain into your system:
tar -xf arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz
export CROSS_COMPILE=`pwd`/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-or
tar -xf arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz
export CROSS_COMPILE=arm-none-linux-gnueabihf-
export PATH=$PATH:/YOUR/PATH/TO/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-linux-gnueabihf/bin/- export PATH=${PATH/':/YOUR/PATH/TO/arm-gnu-toolchain-VERSION-x86_64-arm-none-linux-gnueabihf/bin/'/}
Configure and Build the Linux kernel
Now you have to configure the Linux kernel according to your hardware. We have two default configuration at91 SoC in arch/arm/configs
arch/arm/configs/at91_dt_defconfig
arch/arm/configs/sama5_defconfig
arch/arm/configs/sama7_defconfig- at91_dt_defconfig: for SAM9 (ARM926) series chips
- sama5_defconfig: for SAMA5 series chips
- sama7_defconfig: for SAMA7 series chips
Now we Configure and Build kernel for board:
$ make ARCH=arm sama5_defconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#At this step, you can modify default configuration using the menuconfig
$ make ARCH=arm menuconfigNow, in the menuconfig dialog, you can easily add or remove some features. Once done, Move to <Exit> with arrows and press this button hitting the Enter key to exit from this screen.
Build the Linux kernel image, before you build you need set up the cross compile toolchain, check this section.
$ make ARCH=arm
[..]
Kernel: arch/arm/boot/Image is ready
Kernel: arch/arm/boot/zImage is readyNow you have an usable compressed kernel image zImage.
If you need an uImage you can run this additional step:
make ARCH=arm uImage LOADADDR=0x20008000
[..]
Kernel: arch/arm/boot/Image is ready
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-6.12.22-linux4microchip-20
Created: Thu May 22 18:05:21 2025
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 5688984 Bytes = 5555.65 KiB = 5.43 MiB
Load Address: 20008000
Entry Point: 20008000
Kernel: arch/arm/boot/uImage is readymake ARCH=arm dtbs
[..]
DTC arch/arm/boot/dts/microchip/at91-sama5d27_som1_ek.dtb
DTC arch/arm/boot/dts/microchip/at91-sama5d27_wlsom1_ek.dtb
DTC arch/arm/boot/dts/microchip/at91-sama5d29_curiosity.dtb
DTC arch/arm/boot/dts/microchip/at91-sama5d2_icp.dtb
DTC arch/arm/boot/dts/microchip/at91-sama5d3_eds.dtb
DTC arch/arm/boot/dts/microchip/at91-sama7d65_curiosity.dtb
DTC arch/arm/boot/dts/microchip/at91-sama7g54_curiosity.dtb
DTC arch/arm/boot/dts/microchip/at91-sama7g5ek.dtb
[..]If the building process is successful, the final images can be found under arch/arm/boot/ directory.
Related Topics