设备树验证参考原文:https://www.rocketboards.org/foswiki/Documentation/HOWTOCreateADevicetreeForAgilexSoC
设置编译链环境变量:
export CROSS_COMPILE=aarch64-linux-gnu- export ARCH=arm64 export PATH=/usr/bin:$PATH

将一个预先配置好的内核配置文件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

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

接下来编译设备树文件:
make -j $(nproc) Image modules dtbs

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

./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

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

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

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

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

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

开发板串口输入sudo reboot重启:
sudo reboot
重启目标设备让Linux加载我们新的示例DTB,记得在自动启动控制台停止u-boot:

当我们进入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}

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

如果遇到提示: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)
浙公网安备 33010602011771号