瑞芯微的BOOT镜像为uImage格式的镜像,也就是 FIT (Flattened Image Tree),由UBOOT工具mkimage编译而成。
内部文件提取方式为用binwalk获取分区数据结构,然后直接用dd命令加上偏移量提取需要的文件:
binwalk boot0.img DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 Flattened device tree, size: 15713958 bytes, version: 17 220 0xDC LZ4 compressed data 94008 0x16F38 SHA256 hash constants, little endian 6051398 0x5C5646 SHA256 hash constants, little endian 6051684 0x5C5764 AES Inverse S-Box 6371072 0x613700 Certificate in DER format (x509 v3), header length: 4, sequence length: 676 6558378 0x6412AA Certificate in DER format (x509 v3), header length: 4, sequence length: 16 7005907 0x6AE6D3 xz compressed data 8298440 0x7E9FC8 Flattened device tree, size: 89400 bytes, version: 17 8388044 0x7FFDCC gzip compressed data, maximum compression, from Unix, last modified: 2020-12-03 06:14:33 #下面命令为提取设备树文件 dd if=boot0.img of=dtb2.dtb bs=1 skip=$((0x7E9FC8)) count=89400
以下是对
dd 命令中 bs、count 和 skip 这三个参数在你给出的命令中的用途解释:1. bs=1
-
bs表示块大小(block - size),它定义了每次读写操作的数据块的大小。在该命令中设置为 1 字节。 -
这意味着在数据传输过程中,每次只读取或写入 1 字节的数据。在一些需要精确控制数据传输粒度的场景下很有用,比如当需要逐字节地从源文件中提取特定部分的数据到目标文件时。
2. skip=$((0x7E9FC8))
-
skip参数用于指定在开始复制之前,跳过源文件开头的指定数量的块。在该命令中,它通过0x7E9FC8这个十六进制数来确定跳过的字节数。 -
计算过程是将十六进制数
0x7E9FC8转换为十进制数,得到 8285160。因为bs设置的是 1 字节,所以就是跳过源文件boot0.img开头的 8285160 个字节。这在想要从源文件的某个中间位置开始复制数据时非常有用,例如当你知道要复制的数据位于源文件的某个偏移位置之后。
3. count=89400
-
count参数用来指定要复制的块的数量。在命令中设置为 89400,表示要从源文件中复制 89400 个块到目标文件。 -
由于
bs是 1 字节,所以总共会复制 89400×1=89400 字节的数据到目标文件dtb2.dtb。这能精确地控制复制的数据量,避免复制过多或过少的数据。
综上所述,这条
dd 命令的作用是从 boot0.img 文件中跳过开头的 8285160 字节,然后复制接下来的 89400 字节的数据到 dtb2.dtb 文件中。这种操作常见于对文件系统镜像、固件等进行提取、修改或分析的场景,可以精确地获取或处理文件中特定位置和长度的数据。
浙公网安备 33010602011771号