Linux kernel 从压缩的内核映像获取uname信息

Linux kernel 从压缩的内核映像获取uname信息,linux-kernel,embedded-linux,Linux Kernel,Embedded Linux,有没有一种好方法可以从压缩的内核映像中提取与uname相同的信息?我希望它能够检查嵌入式Linux系统上处于休眠状态的mtd中的内核的dog标记,并将其与当前运行的内核进行比较。对于使用gzip压缩的Linux映像,请使用以下命令: dd if=arch/arm/boot/zImage bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' arch/arm/boot/zImage | head -n 1 |

有没有一种好方法可以从压缩的内核映像中提取与uname相同的信息?我希望它能够检查嵌入式Linux系统上处于休眠状态的mtd中的内核的dog标记,并将其与当前运行的内核进行比较。

对于使用gzip压缩的Linux映像,请使用以下命令:

dd if=arch/arm/boot/zImage bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' arch/arm/boot/zImage | head -n 1 | cut -d ':' -f 1) | zcat | grep -a 'Linux version'
dd if=arch/arm/boot/zImage bs=1 skip=$(LC_ALL=C grep -a -b -o $'\xFD\x37\x7A\x58\x5A\x00' arch/arm/boot/zImage | head -n 1 | cut -d ':' -f 1) | xzcat | grep -a 'Linux version'

对于使用xz压缩的Linux映像,请使用以下命令:

dd if=arch/arm/boot/zImage bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' arch/arm/boot/zImage | head -n 1 | cut -d ':' -f 1) | zcat | grep -a 'Linux version'
dd if=arch/arm/boot/zImage bs=1 skip=$(LC_ALL=C grep -a -b -o $'\xFD\x37\x7A\x58\x5A\x00' arch/arm/boot/zImage | head -n 1 | cut -d ':' -f 1) | xzcat | grep -a 'Linux version'
由于图像文件包含压缩流结束后的数据,因此会出现一个可以忽略的错误

字符串常量似乎是冻结的用户空间可见内核API的一部分:


$mkimage-l uImage

Image Name:   Linux-2.6.39
Created:      Wed Jun  6 13:49:58 2012
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3091036 Bytes = 3018.59 kB = 2.95 MB
Load Address: 80008000
Entry Point:  80008000

不适合我。在引用的URL中或在version.c的历史记录中也找不到字符串常量<代码>文件显示:kernel/zImage:Linux内核ARM引导可执行文件zImage(little endian)字符串常量在那里:@Daniel Alder您的图像使用哪种压缩?谢谢,非常有用。我很好奇skip=$(…)的目的是什么。我注意到我在一个构建中使用了该子句,结果是
0
。这对我也很有用:
ddif=arch/arm/boot/zImage | zcat | grep-a‘Linux版本’
,这对我也很有用:
zcat-arch/arm/boot/zImage | grep-a‘Linux版本’
谢谢。在基于Raspbian创建Raspberry Pi固件时发现kernel7.img的版本非常有用。内置
u-boot-tools