Answers:
mkimage -l uImage
将信息转储到标题中。
tail -c+65 < uImage > out
会得到的内容。
tail -c+65 < uImage | gunzip > out
如果它是gzip压缩的,它将不压缩。
如果那是initramfs,则可以执行cpio -t < out
或pax < out
列出内容。
如果是ramdisk映像,则可以尝试通过以下方式安装它:
mount -ro loop out /mnt
file out
可以告诉您更多有关它的信息。
mkimage -l
据报道Image Type: MIPS Linux Kernel Image (lzma compressed)
),所以用unlzma对其进行了扩展
U-Boot带有自己的dumpimage
工具(在U-Boot树的tools目录中查找)
当然,它适用于简单的图像,但它也支持旧式的多图像
$ ~2/tools/dumpimage -l uMulti
Image Name:
Created: Thu Aug 31 19:54:29 2017
Image Type: ARM Linux Multi-File Image (uncompressed)
Data Size: 5678650 Bytes = 5545.56 kB = 5.42 MB
Load Address: 10008000
Entry Point: 10008000
Contents:
Image 0: 5028760 Bytes = 4910.90 kB = 4.80 MB
Image 1: 602111 Bytes = 588.00 kB = 0.57 MB
Image 2: 47762 Bytes = 46.64 kB = 0.05 MB
$ ~2/tools/dumpimage -i uMulti kernel.extracted
$ ~2/tools/dumpimage -i uMulti -p 1 initramfs.extracted
$ ~2/tools/dumpimage -i uMulti -p 2 device-tree.extracted
还没有尝试过使用新型FIT图像,但是我想它应该可以使用。
如果有几个图像内这里是一个快速bash
的脚本将它们全部提取到的文件image_0
,image_1
...:
#!/bin/bash
src_file=uImage
declare -ia sizes=( $(mkimage -l "$src_file" |
awk '/^ +Image [0-9]+/ { print $3 }') )
declare -i offset="68+4*${#sizes[@]}"
declare -i size
for i in "${!sizes[@]}"; do
size=${sizes[$i]}
echo "Unpacking image_$i"
dd if="$src_file" of="image_$i" bs=1 skip="$offset" count="$size"
# going to offset of next file while rounding to 4 byte multiple
offset+=$(( size + (4 - size % 4) % 4 ))
done
然后,您需要检查什么是什么(可以是打包的Linux内核,包含文件的存档,设备树等)。file
和binwalk
(http://binwalk.org/)可能会有所帮助。