2012-08-17 3 views
12

Quiero generar System.map desde vmlinuz, porque la mayoría de las máquinas no tienen el archivo System.map. De hecho, vmlinuz está comprimido en vmlinuz o bzImage.Extraer vmlinux de vmlinuz o bzImage

¿Alguna herramienta o script puede hacer esto?

me trataron:

dd if=/boot/vmlinuz skip=`grep -a -b -o -m 1 -e $'\x1f\x8b\x08\x00' /boot/vmlinuz | cut -d: -f 1` bs=1 | zcat > /tmp/vmlinux 

Fue fallidos:

zcat: stdin: not in gzip format 
32769+0 records in 
32768+0 records out 
+0

¿Está seguro? No hay símbolos en los archivos extraídos ;-( – daisy

+1

https://superuser.com/questions/298826/how-do-i-uncompress-vmlinuz-to-vmlinux –

Respuesta

14

Para extraer el núcleo sin comprimir desde la imagen del núcleo, se puede utilizar el script extract-vmlinux desde el directorio scripts en el árbol del núcleo (disponible al menos en kernel versión 3.5) (si obtiene un error como

mktemp: No se puede crear el archivo temporal/tmp/vmlinux-XXX: argumento no válido

es necesario sustituir $(mktemp /tmp/vmlinux-XXX) por $(mktemp /tmp/vmlinux-XXXXXX) en el guión). El comando es /path/to/kernel/tree/scripts/extract-vmlinux <kernel image> >vmlinux.

Si el binario extraído del kernel contiene información de símbolos, debe poder crear el archivo System.map utilizando el script mksysmap del mismo subdirectorio. El comando aquí es NM=nm /path/to/kernel/tree/scripts/mksysmap vmlinux System.map.

¹ Las imágenes del kernel enviadas con mi distribución parecen estar desprotegidas, por lo que el script no pudo obtener los símbolos.

+0

gracias por su ayuda! Tengo el script de 3.5. 2 y el resultado es [root @ lwq2 test] # ./extract-vmlinux.sh vmlinuz extract-vmlinux.sh: No se puede encontrar vmlinux. – hellolwq

+0

Hm, en realidad tuve el mismo problema primero, la causa fue que el script falló crear un archivo temporal necesario/tmp/vmlinux-XXX (en mi caso, tuve que cambiarlo a/tmp/vmlinux-XXXXXX para ponerlo en funcionamiento, se debe mencionar el número necesario de X'es en la página del manual para mktemp) El script extract-vmlinux de la versión 3.5.2 también usa tres X'es en lugar de seis, por lo que este podría ser probablemente el problema ... – Abrixas2

2

Como escribió Abrixas2, necesitará una imagen del kernel con información de símbolos para crear archivos System.map y una imagen vmlinuz empaquetada probablemente no tenga símbolos. Sin embargo, puedo verificar que el script en su publicación original funcione con '-e' reemplazado por '-P' y '$' eliminado, es decir,

$ dd if=vmlinuz-3.8.0-19-generic skip=`grep -a -b -o -m 1 -P '\x1f\x8b\x08\x00' vmlinuz-3.8.0-19-generic | cut -d: -f 1` bs=1 | zcat > /tmp/vmlinux 
gzip: stdin: decompression OK, trailing garbage ignored 
+0

Esto no parece funcionar con la última versión de grep. –

+0

Funciona para mí Excelente. Ahorro gran parte de mi tiempo. No n para descargar la fuente o los pasos manuales para descomprimir. –