Buildrootは、実行する必要がある組み込みデバイスのイメージを構築しています。これは非常にうまく機能します。このイメージにはrootfsが含まれています。
いくつかの研究のために生成されたファイルを見たいと思っていましたが(たとえば、Buildrootで設定されたさまざまな圧縮モードが適用され、正常に実行されたことを確認する必要があります)、Web上で役に立つものが見つかりませんでした。
私が知る限り、uImageとzImageの違いはちょうど小さなヘッダーなので、u-bootはそのバイナリを読むことができます。しかし、uImageやzImageを開くことはできません。
ホストシステムでこれらの(u / z)イメージを解凍する方法についてのヒントを与えることができる人はいますか?
答え1
mkimage -l uImage
ヘッダーの情報がダンプされます。
tail -c+65 < uImage > out
内容を入手できます。
tail -c+65 < uImage | gunzip > out
gzipで圧縮すると、解凍されます。
initramfsの場合、cpio -t < out
またはpax < out
内容を一覧表示できます。
RAMディスクイメージの場合は、以下を使ってマウントしてみることができます。
mount -ro loop out /mnt
file out
それが何であるかをもっと詳しく教えてください。
答え2
U-Bootにはdumpimage
ツールが付属しています(U-Bootツリーのツールディレクトリにあります)。
もちろん、単純な画像でも動作しますが、昔ながらのマルチ画像もサポートしています。
$ ~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イメージを試していませんが、うまくいくと思います。
答え3
複数の画像がある場合、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/) 助けることができます。
答え4
7z
OpenWRTとSquashFSにのみ当てはまりますが、「ただ動作します」。私に基づいてみましたOpenWRTフォーラムに関するご意見。
$ file image.bin
image.bin: u-boot legacy uImage, OpenWrt fullimage, Linux/MIPS, Multi-File Image (Not compressed), 11334834 bytes, Mon Apr 12 09:59:28 2021, Load Address: 00000000, Entry Point: 00000000, Header CRC: 0XDFDE3FF5, Data CRC: 0X7704142B
$ 7z x image.bin
7-Zip [64] 17.04 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28
p7zip Version 17.04 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs x64)
Scanning the drive for archives:
1 file, 11334898 bytes (11 MiB)
Extracting archive: image.bin
--
Path = image.bin
Type = SquashFS
Offset = 2097224
Physical Size = 9237674
Headers Size = 47040
File System = SquashFS 4.0
Method = XZ
Cluster Size = 262144
Big-endian = -
Created = 2021-04-12 04:59:26
Characteristics = DUPLICATES_REMOVED EXPORTABLE 0x600
Code Page = UTF-8
Everything is Ok
Folders: 145
Files: 2518
Size: 36789620
Compressed: 11334898