本文章将演示如何在已有的嵌入式Linux系统的基础上,为Microchip MPU手动更新Linux内核版本。
安装编译Linux内核所需要的软件
下载编译Linux内核所需要的arm-none-linux-gnueabihf-

cd Opt
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
解压arm-none-linux-gnueabihf-并配置好环境变量

afan@iMac24:~/Opt$ tar -xf arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz
afan@iMac24:~/Opt$ export CROSS_COMPILE=arm-none-linux-gnueabihf-
afan@iMac24:~/Opt$ export PATH=$PATH:/home/afan/Opt/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-linux-gnueabihf/bin/
下载所需要的Linux内核版本
- 为了方便直接下载最新的linux kernel压缩包:

- 内核压缩包下载地址
https://github.com/linux4microchip/linux/tags
下载对应的dt-overlay版本

https://github.com/linux4sam/dt-overlay-at91/tags
编译Linux内核
解压Linux内核压缩包
cd Downloads
tar -xf linux-linux4microchip-fpga-2025.07.tar.gz
配置Linux内核 - 以SAM9X60 Curiosity开发板为例
- 解压内核压缩包后通过make ARCH=arm at91_dt_defconfig选择Microchip ARM9平台
- 随后通过make ARCH=arm menuconfig进行内核的配置

- 默认会支持Microchip所有的ARM9 MPU处理器

- 根据需要选择只需要的SAM9X60 ARM9处理器即可,也可以跳过这个步骤



cd linux-linux4microchip-fpga-2025.07/
make ARCH=arm at91_dt_defconfig
make ARCH=arm menuconfig
编译Linux内核和dtb文件
- 编译内核

- 编译设备树

- 操作具体命令记录
make ARCH=arm -j10
make ARCH=arm dtbs
编译dt-overlay并打包itb文件
tar -xf dt-overlay-at91-linux4microchip-2025.04.tar.gz
cd dt-overlay-at91-linux4microchip-2025.04/
- 编译dtso文件


make KERNEL_DIR=../linux-linux4microchip-fpga-2025.07 KERNEL_BUILD_DIR=../linux-linux4microchip-fpga-2025.07 sam9x60_curiosity_dtbos


KERNEL_DIR=../linux-linux4microchip-fpga-2025.07 KERNEL_BUILD_DIR=../linux-linux4microchip-fpga-2025.07 make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- sam9x60_curiosity.itb
手动更新包含最新Linux镜像的itb文件

查看linux内核的更新
更新前的linux内核版本 - Linux version 6.6.51

Starting kernel ...
Booting Linux on physical CPU 0x0 Linux version 6.6.51-linux4microchip-2024.10 (afan@iMac24) (arm-buildroot-linux-gnueabi-gcc.br_real (Buildroot 2024.02.6) 13.3.0, GNU ld (GNU Binutils) 2.40) #1 Sat Aug 23 10:35:13 CST 2025 CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=0005317f CPU: VIVT data cache, VIVT instruction cache OF: fdt: Machine model: Microchip SAM9X60 Curiosity Memory policy: Data cache writeback Zone ranges: Normal [mem 0x0000000020000000-0x0000000027ffffff] Movable zone start for each node Early memory node ranges node 0: [mem 0x0000000020000000-0x0000000027ffffff] Initmem setup node 0 [mem 0x0000000020000000-0x0000000027ffffff] Kernel command line: console=ttyS0,115200 mtdparts=atmel_nand:256k(bootstrap)ro,768k(uboot)ro,256k(env_redundant),256k(env),6656k(itb)ro,-(rootfs) rootfstype=ubifs ubi.mtd=5 root=ubi0:rootfs rw atmel.pm_modes=standby,ulp0 Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear) Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear) Built 1 zonelists, mobility grouping on. Total pages: 32512 mem auto-init: stack:all(zero), heap alloc:off, heap free:off Memory: 118556K/131072K available (7622K kernel code, 437K rwdata, 2424K rodata, 280K init, 190K bss, 12516K reserved, 0K cma-reserved) SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 PIT64B: using clk=gclk with prescaler 0, freq=5000000 [Hz]
code
code