Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

decomprimere_il_kernel [2008/04/14 13:21] (versione attuale)
Linea 1: Linea 1:
 +====== Decomprimere l'​immagine del kernel linux ======
 +L'​immagine del kernel linux presente nel firmware, e memorizzata sulla flash, è compressa tramite l'​algoritmo LZMA.\\
 +E' possibile estrarre tale immagine applicando la seguente procedura:​\\
 +Innanzitutto procuratevi l'​immagine del kernel compresso (Se non sapete come fare consultate la pagina relativa al [[backup_e_restore#​reverse_engineering_del_dump]]).\\
 +Tale immagine che per comodità a partire da questo punto chiamerò kernel.bin è così strutturata:​\\
 +^ 4 byte | Indirizzo iniziale di memoria in cui il CFE deve caricare il kernel |
 +^ 4 byte | ???? - Sembra essere un indirizzo di memoria anche questo |
 +^ 4 byte | Dimensione del file - 12 (Dimensione dell'​header) = Dimensione dei dati compressi lzma |
 +
 +Per poter decomprimere il kernel si rende quindi necessario rimuovere l'​intestazione che lo precede:
 +<​code>​
 +dd if=kernel.bin of=kernel.compresso bs=12 skip=1
 +</​code>​
 +
 +A questo punto abbiamo ottenuto un file kernel.compresso che in via teorica dovrebbe poter essere decompresso con l'​utility {{bin:​lzma}} ({{bin:​lzma.exe}} se vi trovate in ambiente Windows). Purtroppo il formato dell'​header non viene accettato correttamente dalle utility di decompressione {{bin:​lzma}} e {{bin:​lzma.exe}} (LZMA SDK 4.27). Vediamone il perchè:\\
 +Il nostro file (kernel.compresso) è composto da:\\
 +<​code>​
 +5D 00 00 40 - DATI COMPRESSI
 +</​code>​
 +invece le utility ricavate a partire dai sorgenti LZMA SDK 4.27 pretendono che il file sia così formato:​((Per dovere di cronaca devo anche specificare che la dimensione è indicata a partire dal LSB e quindi un kernel di 1679495 byte (0x19A087) avrebbe un'​intestazione corretta così formata: 5D 00 00 40 - 00 87 A0 19 - 00 00 00 00 - DATI COMPRESSI.))\\
 +<​code>​
 +5D 00 00 40 - 00 - Dimensione del file decompresso su 7 byte - DATI COMPRESSI
 +</​code>​
 +
 +In definitiva, per decomprimere con {{bin:​lzma}} o {{bin:​lzma.exe}} bisognerà modificare l'​header pre-esistente di kernel.compresso. Inoltre va sottolineato che non conoscendo la dimensione finale del file decompresso possiamo limitarci a indicare una dimensione sufficentemente grande (es: 0xFFFFFF). Verrà segnalato un errore in fase di decompressione,​ ma verrà comunque estratto tutto il file.\\
 +<​code>​
 +5D 00 00 40 - 00 FF FF FF - 00 00 00 00 - DATI COMPRESSI
 +</​code>​
 +A questo punto non ci resta che eseguire:
 +<​code>​
 +./lzma d kernel.compresso kernel.decompresso
 +</​code>  ​
 +se siete sotto linux
 +<​code>​
 +lzma.exe d kernel.compresso kernel.decompresso
 +</​code>​
 +se siete sotto windows.
 +
 +
  
 
decomprimere_il_kernel.txt · Ultima modifica: 2008/04/14 13:21 (modifica esterna)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki