Embedded

如何從uImage中提取文件?

  • January 17, 2022

Buildroot 正在為應該執行它們的嵌入式設備生成圖像。這工作得很好。在這些圖像中,包含了 rootfs。

由於一些研究,我想查看生成的文件(例如,應用了 Buildroot 設置的不同壓縮模式,現在應檢查它們是否正確完成),但我在網路中找不到有用的東西。

據我所知,uImage 和 zImage 之間的區別只是一個小標題,因此 u-boot 能夠讀取該二進製文件。但我既不能打開 uImage 也不能打開 zImage。

誰能給我提示如何解壓縮主機上的那些(u/z)圖像?

mkimage -l uImage

將轉儲標題中的資訊。

tail -c+65 < uImage > out

會得到內容。

tail -c+65  < uImage | gunzip > out

如果它是 gzip 壓縮的,它將被解壓縮。

如果那是一個 initramfs,你可以做cpio -t < outpax < out列出內容。

如果是 ramdisk 映像,您可以嘗試使用以下命令掛載它:

mount -ro loop out /mnt

file out可以告訴你更多關於它是什麼。

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 圖像,但我想它應該可以工作。

引用自:https://unix.stackexchange.com/questions/113827