Czy istnieje dobry sposób na wyodrębnienie tych samych informacji, które uname robi ze skompresowanego obrazu jądra? Chcę, żeby to było w stanie sprawdzić nieśmiertelniki jądra siedzącego w uśpionych mtd w systemie Embedded Linux i porównać je z aktualnie działającym jądrem.Uzyskiwanie informacji o uname ze skompresowanego obrazu jądra
Odpowiedz
Dla Linux obrazu skompresowanego gzip, użyj tego:
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 | cut -d ':' -f 1) | zcat | grep -a 'Linux version'
Dla Linux obrazem skompresowanym XZ, użyj tego:
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'
Ponieważ plik obrazu zawiera dane po zakończeniu skompresowany stream, dostaniesz błąd, który możesz zignorować. Pojawia stałe
ciąg być częścią zamarzniętym przestrzeni użytkownika widocznym API jądra:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=init/version.c;hb=HEAD#l40
$ 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
działa dla zImage również – chrisvarnz
wchodzi do wnętrza 'u-boot-tools' – sanmai
nie działa dla mnie. Nie można również znaleźć stałej ciągu we wskazanym adresie URL ani w historii wersji.c. 'file' pokazuje: kernel/zImage: jądro Linux Plik wykonywalny boot ARM zImage (little-endian) –
Stała stała jest tam: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git /tree/init/version.c?id=HEAD#n47 –
@ Daniel Olcha jakiego rodzaju kompresji używa twój obraz? –