开发基于https://github.com/johnnyfan1979/public_doc/blob/main/documentation/DE25_Nano/DE25%20Nano%20Build%20Linux%20image%20from%20scratch.md 

设备树覆盖:

// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;

/ {
    fragment@0 {
        target-path = "/soc@0";
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <1>;
            
            button_gpio@20010060 {
                compatible = "altr,pio-1.0";
                reg = <0x20010060 0x10>;
                interrupts = <0 18 2>;
                altr,ngpio = <2>;
                altr,interrupt-type = <2>;  /* 2 = IRQ_TYPE_EDGE_FALLING */
                #gpio-cells = <2>;
                gpio-controller;
                status = "okay";
            };
        };
    };
};

 

编译命令:

cd $TOP_FOLDER
cd linux-socfpga
export CROSS_COMPILE=aarch64-linux-gnu- 

export ARCH
=arm64

export PATH
=/usr/bin:$PATH

make dtbs

或者直接用命令:

cd linux-socfpga/arch/arn64/boot/dts/intel

 dtc -@ -I dts -O dtb -o socfpga_agilex5_de25_nano.dtbo socfpga_agil
ex5_de25_nano.dtso

 

image

 验证如下:

9784545b0adecefabde425c440f4b7d2_compress

 

 

中断验证如下:

(这个截图是基于DE25-Nano GHRD的, 不是基于DE25-Nano的 my_first_hps_system 工程)

企业微信截图_17727852537178

 

 

常见问题:请问编译设备树Overlay文件时,需要下载与运行的镜像相同版本的linux内核源码吗? 

设备树的编译是独立的,不依赖内核源码。编译时使用的 dtc 工具版本,比内核版本本身更重要。设备树语法和绑定会随内核版本演进而变化,使用过旧或过新的 dtc 都可能导致编译失败或运行时异常。所以建议下载与运行的镜像相同版本的linux内核源码。

对于Agilex 5平台,其设备树(.dts/.dtsi)通常定义在Linux内核源码的 arch/arm64/boot/dts/intel/ 目录下。为确保兼容性,最稳妥的方式是使用目标系统内核源码中自带的 dtc 工具(位于 scripts/dtc/dtc)。