Descompresión y compresión de archivos img en archivos iso del sistema operativo Kirin

  Recientemente, he considerado hacer un sistema Kirin de arranque adecuado para PXE, por lo que necesito hacer los ajustes apropiados al archivo img en la iso. Este artículo presentará cómo descomprimir el archivo img comprimido del sistema Kirin.

1. Comprender los archivos vmlinuz e initrd.img

  • vmlinuz: archivo del núcleo del sistema, compilado.
  • initrd.img: Es un pequeño sistema de archivos que almacena módulos de controladores relacionados con el inicio. Los pasos habituales son iniciar el kernel primero, luego el kernel monta initrd.img y ejecuta el script interno para montar más varios módulos. El más importante es el módulo del controlador del sistema de archivos raíz, solo con él se puede montar el sistema de archivos raíz y luego se puede ejecutar la primera aplicación init o systemd en el espacio del usuario para completar el inicio posterior del sistema.

  Generalmente, si el sistema carece de un módulo de controlador, la mayoría de las veces sólo necesita modificar el archivo initrd.img. El archivo initrd.img de este artículo se extrae del archivo iso y se copia de él. La ruta detallada es la siguiente:
Ruta del archivo initrd.img

2. Descomprime el archivo initrd.img

1. Verifique el tipo de archivo

file initrd.img
--initrd.img: XZ compressed data

2. Modifique el sufijo del archivo y descomprímalo.

mv initrd.img initrd.img.xz
xz -d initrd.img.xz

3. Verifique el tipo de archivo nuevamente

file initrd.img 
--initrd.img: ASCII cpio archive (SVR4 with no CRC)

4. Descomprime este archivo binario

mkdir test
cd test
cpio -i -F ../initrd.img

 El sistema de archivos después de la descompresión es el siguiente, si necesita modificarlo, use el comando chroot:

bin  dev  etc  init  lib  lib64  opt  proc  root  run  sbin  shutdown  sys  sysroot  tmp  usr  var

3. Comprime el archivo initrd.img

1. Comprimir el sistema de archivos en archivos binarios.

cd test
find .|cpio -o -H newc > ../initrd.img

2. Comprime el archivo y cámbiale el nombre.

xz -zk initrd.img 
mv initrd.img.xz initrd.img

4. Problemas y soluciones

Descripción del problema: al utilizar el archivo initrd.img modificado para iniciar el sistema, se informó un error y el inicio falló.
Archivo de error de inicio fallidoUtilice el comando para comparar el contenido del archivo antes y después de la modificación, y encuentre cualquier diferencia.

修改前文件头:
# hexdump -C ../initrd.img | head -10
00000000  fd 37 7a 58 5a 00 00 01  69 22 de 36 02 00 21 01  |.7zXZ...i".6..!.|
00000010  10 00 00 00 a8 70 8e 86  e2 67 74 ef ff 5d 00 18  |.....p...gt..]..|
00000020  0d dd 04 62 33 37 a6 1c  b3 27 04 70 ee c0 8d 80  |...b37...'.p....|
00000030  97 3f a9 50 b2 c1 9f 15  a4 f2 b9 98 d4 e0 49 6b  |.?.P..........Ik|
00000040  d7 f9 6e 85 75 f5 2b 7d  eb 96 51 d2 fd 17 68 c1  |..n.u.+}..Q...h.|
00000050  e7 80 e5 9a 6a 5d a1 5a  5a 3b a4 87 68 e0 ac de  |....j].ZZ;..h...|
00000060  a5 91 76 65 55 24 da 9c  1b 56 2a 61 fa 96 84 86  |..veU$...V*a....|
00000070  78 3f 84 75 93 9e e5 bd  18 7a 69 62 e7 ca 7a fc  |x?.u.....zib..z.|
00000080  9e ab 1c 8a 20 65 c6 1e  6d f3 0b 83 66 4a fb d3  |.... e..m...fJ..|
00000090  75 05 52 7f 61 d4 b2 47  5f 8f 50 20 de a6 4e 50  |u.R.a..G_.P ..NP|

修改后文件头:
# hexdump -C initrd.img | head -10
00000000  fd 37 7a 58 5a 00 00 04  e6 d6 b4 46 02 00 21 01  |.7zXZ......F..!.|
00000010  16 00 00 00 74 2f e5 a3  e2 67 74 ef ff 5d 00 18  |....t/...gt..]..|
00000020  0d dd 04 62 33 37 a6 1c  b3 27 04 70 ee c0 8d 80  |...b37...'.p....|
00000030  97 3f a9 50 b2 c1 9f 15  a4 f2 b9 98 d4 e0 49 6b  |.?.P..........Ik|
00000040  d7 f9 6e 85 75 f5 2b 7d  eb 96 51 d2 fd 17 68 c1  |..n.u.+}..Q...h.|
00000050  e7 80 e5 9a 6a 5d a1 5a  5a 3b a4 87 68 e0 ac de  |....j].ZZ;..h...|
00000060  a5 91 76 65 55 24 da 9c  1b 56 2a 61 fa 96 84 86  |..veU$...V*a....|
00000070  78 3f 84 75 93 9e e5 bd  18 7a 69 62 e7 ca 7a fc  |x?.u.....zib..z.|
00000080  9e ab 1c 8a 20 65 c6 1e  6d f3 0b 83 66 4a fb d3  |.... e..m...fJ..|
00000090  75 05 52 7f 61 d4 b2 47  5f 8f 50 20 de a6 4e 50  |u.R.a..G_.P ..NP|

La razón de esta diferencia: la nueva herramienta xz usa automáticamente el nuevo algoritmo de verificación crc64 al comprimir. Aunque este crc64 es mejor que el crc32 original, el kernel de Linux todavía usa crc32 y no reconoce crc64.

Solución: especifique el algoritmo de verificación como crc32 al comprimir archivos.

xz -zk initrd.img --check=crc32
mv initrd.img.xz initrd.img

Intente reiniciar el sistema de arranque, esta vez podrá ingresar exitosamente al sistema. Debes prestar atención aquí para evitar pisar obstáculos.

Supongo que te gusta

Origin blog.csdn.net/fish332/article/details/128655687
Recomendado
Clasificación