设备树验证参考原文:https://www.rocketboards.org/foswiki/Documentation/HOWTOCreateADevicetreeForAgilexSoC

 

参考https://github.com/johnnyfan1979/public_doc/blob/main/documentation/DE25_Nano/DE25%20Nano%20Build%20Linux%20image%20from%20scratch.md  制作SD卡image

 

 设置编译链环境变量:

export CROSS_COMPILE=aarch64-linux-gnu-

export ARCH=arm64

export PATH=/usr/bin:$PATH

01

 

将一个预先配置好的内核配置文件de25-nano.config复制为 Linux 内核源码根目录下默认的编译配置文件。

cp de25-nano.config .config

 

将之前socfpga_agilex5_de25_nano.dts文件内容拷贝到my_de25_nano_top.dts文件:

cp ./arch/arm64/boot/dts/intel/socfpga_agilex5_de25_nano.dts ./arch/arm64/boot/dts/intel/my_de25_nano_top.dts

 

然后修改my_de25_nano_top.dts的model值:

sed -i "s/SoCFPGA Agilex5 Terasic DE25-Nano/SoCFPGA Agilex5 Terasic DE25-Nano for TEST20260717/" \
./arch/arm64/boot/dts/intel/my_de25_nano_top.dts

Screenshot from 2026-07-17 02-00-02

 

然后对linux-socfpga/arch/arm64/boot/dts/intel/makefile文件添加如下行(参考下图第21行)并保存:

 

Screenshot from 2026-07-16 01-58-51

 

接下来编译设备树文件:

make -j $(nproc) Image modules dtbs

Screenshot from 2026-07-16 03-50-03

  

Linux 内核默认的 Makefile 构建框架已经内置了编译设备树的规则,能够将设备树源文件(.dts)转换为二进制的设备树二进制文件(.dtb)。具体流程是:内核的 Makefile 会先将所有设备树源文件交给 GNU C 预处理器(cpp)处理宏定义和包含语法,再将预处理后的结果传给 DTC 编译器,最终生成所需的 .dtb 文件。

 

当然,你完全可以不依赖 Linux 内核的构建环境,自行通过类似的预处理和编译步骤来完成这一过程:

{CROSS_COMPILE}gcc \
        -E \
        -nostdinc \
        -I./arch/arm64/boot/dts/intel \
        -I./include \
        -undef -D__DTS__ \
        -x assembler-with-cpp \
        -o arch/arm64/boot/dts/intel/my_de25_nano_top.dts.tmp \
        arch/arm64/boot/dts/intel/my_de25_nano_top.dts

 

Screenshot from 2026-07-16 03-50-33

 

 ./scripts/dtc/dtc \
        -O dtb \
        -o arch/arm64/boot/dts/intel/my_de25_nano_top.dtb \
        -i arch/arm64/boot/dts/intel \
        -@ \
        arch/arm64/boot/dts/intel/my_de25_nano_top.dts.tmp

 

Screenshot from 2026-07-16 03-50-49

 

将生成的my_de25_nano_top.dtb文件拷贝到SD卡的/home/terasic/路径下:

Screenshot from 2026-07-16 02-15-35

 

参考https://mp.weixin.qq.com/s/oI4FRiheF-ucThbQmmmWDg 启动开发板Linux系统,输入ls查看my_de25_nano_top.dtb文件:

Screenshot from 2026-07-16 04-23-07

 

需要将新的DTB放到SD卡的FAT分区上,因此我们挂载FAT分区:

Screenshot from 2026-07-16 04-23-56

 

将新的设备树二进制文件复制到正确的位置:

Screenshot from 2026-07-16 04-24-50

 

在试用新DTB之前,先查看目标设备当前运行的原始DTB中定义的模型字符串:

Screenshot from 2026-07-16 04-21-53

 

开发板串口输入sudo  reboot重启:

sudo reboot

重启目标设备让Linux加载我们新的示例DTB,记得在自动启动控制台停止u-boot:

Screenshot from 2026-07-16 04-44-43

 

 

当我们进入U-Boot控制台后,必须手动使用新的设备树来引导Linux内核,手动加载命令如下:

bridge enable

mmc rescan

fatload mmc 0:1 ${kernel_addr_r} Image

fatload mmc 0:1 ${fdt_addr_r} my_de25_nano_top.dtb

setenv bootargs "console=ttyS0,115200 root=${mmcroot} rw rootwait"

booti ${kernel_addr_r}
- ${fdt_addr_r}

 

Screenshot from 2026-07-19 23-58-13

 

当目标设备再次启动进入Linux环境后,请检查设备树的model字符串,确保其已更新为我们刚刚加载的设备树文件里面的值:

Screenshot from 2026-07-20 00-02-01

 

如果遇到提示:end kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0),请参考

U-Boot阶段手动加载设备树遇到end kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)