询问树莓派4B的.dtb文件加载起始地址的正确获取方式
获取Device Tree Blob(.dtb)加载起始地址的正确方法
从Bootloader传递参数获取
多数Bootloader(比如U-Boot)会在启动内核时,通过特定寄存器(如ARM架构的r2寄存器)或启动参数结构体,将.dtb的起始地址传递给内核。以U-Boot为例,它要么把.dtb地址写入bootargs参数,要么直接通过寄存器传递,内核启动时会读取该值定位.dtb。查看内核启动日志
内核启动过程中会输出.dtb相关日志,比如类似Unflattening device tree: base <0xXXXXXXXXX> size <0xXXXX>的内容,其中base对应的数值就是.dtb的加载起始地址。可以通过dmesg命令,或者查看/var/log/dmesg这类系统启动日志文件找到该地址。通过内核符号表查询
若内核开启了符号表支持,可通过cat /proc/kallsyms | grep __fdt_pointer命令查看,__fdt_pointer这个内核符号存储了.dtb在内存中的起始地址。也可以用GDB这类调试工具连接运行中的内核,直接查询该符号的值。从Bootloader配置/脚本获取
若能访问Bootloader的配置或启动脚本(比如U-Boot的boot.cmd或环境变量),里面通常会明确指定.dtb的加载地址。比如U-Boot中可能有load mmc 0:1 ${fdt_addr_r} dtb/myboard.dtb这样的命令,其中${fdt_addr_r}就是.dtb的加载起始地址。
内容的提问来源于stack exchange,提问作者Joseph Huang
相关产品推荐
相关产品推荐

