You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本从Linux设备树提取QSPI Flash分区偏移?

从设备树提取QSPI Flash分区偏移的Shell脚本实现

问题背景

设备树包含大量内核可直接解析的信息,但容器内的用户态环境无法正常访问/proc/device-tree。需从指定设备树节点/amba/spi@ff0f0000/flash@0下提取Flash分区的偏移值,用于生成与设备树配置匹配的Xilinx MCS镜像。以下是简化版设备树(制表符缩进):

/ {
    amba {
        spi@ff0f0000 {
            flash@0 {
                partition@0 {
                    label = "boot";
                    reg = < 0x0 0x1000000 >;
                };
                partition@1000000 {
                    label = "kernel";
                    reg = < 0x1000000 0x2E80000 >;
                };
                partition@3e80000 {
                    label = "bootscr";
                    reg = < 0x3e80000 0x10000 >;
                };
            };
        };
    };
};

实现脚本

以下Shell脚本可直接解析设备树文件,提取目标节点下所有分区的标签与偏移值:

#!/bin/bash

# 替换为你的设备树文件路径
DTS_FILE="your_dts_file.dts"

# 提取flash@0节点内的所有partition节点内容
PARTITION_CONTENT=$(awk '/flash@0 {/,/^[[:space:]]*}/ {
    if ($0 ~ /partition@/) in_part=1;
    if (in_part) {
        print $0;
        if ($0 ~ /^[[:space:]]*}/) in_part=0;
    }
}' "$DTS_FILE")

# 解析分区的标签和偏移值并格式化输出
echo "分区标签   偏移地址"
echo "-------------------"
echo "$PARTITION_CONTENT" | awk '
/label =/ { label = substr($3, 2, length($3)-2); }
/reg =/ { offset = substr($3, 2); printf "%-10s %s\n", label, offset; }
'

脚本说明

  1. 节点范围定位:通过awk锁定flash@0节点的代码块,再从中筛选出所有partition@开头的节点内容。
  2. 字段提取:二次调用awk,分别截取label字段(去除首尾引号)和reg字段中的第一个十六进制值(即分区偏移地址)。
  3. 使用方式:修改脚本中的DTS_FILE路径为实际设备树文件路径,执行脚本即可得到格式化的分区偏移信息。

示例输出

执行脚本后将得到如下格式化结果:

分区标签   偏移地址
-------------------
boot       0x0
kernel     0x1000000
bootscr    0x3e80000

内容的提问来源于stack exchange,提问作者Compholio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:02:23