• Home
  • Blog
    • Technews
    • Pensiero del giorno
  • Informatica
  • Fotografie
    • Concerti
    • Vacanze
    • Varie
  • Acqua
  • La Wishlist

Silicon Image SATARaid Driver

Domenica 27 Maggio 2007 17:30

Silicom Image, così come altre case produttrici di hardware, hanno cominciato a supportere il sistema operativo Linux. Tale supporto amplia, dal loro punto di vista, il bacino di utenza e sicuramente rende appetibili soluzioni come il SATARaid (meno dispendioso rispetto al raid SCSI).
Il problema di questo supporto a volte è che non viene offerto alcun driver in formato sorgente, oppure una patch al kernel in modo da poterla applicare a qualsiasi sistema linux esistente, bensì solamente un modulo in formato binario, per i kernel precompilati offerti da specifiche distribuzioni Linux. E' questo il caso si Silicon Image, che al momento supporta i kernel 2.4.18 e 2.4.20 di RedHat e versioni simili per SUSE. Questi moduli (sii6512 per il controller sil2112 ad esempio) quindi sono caricabili solamente se si dispone del kernel originale (o di aggiornamento) di RH o SUSE, senza la possibilità eventualmente di poterli applicare su kernel di ugual versione, ma compilati autonomanente. Nei file di modulo infatti è cablato il kernel per cui è stato compilato, inteso come versione (2.4.20) e release (-8BOOT, ed -8 ad esempio); qualsiasi kernel che non ha tale denominazione non ha diritto di installare il modulo a runtime (se non forzandolo) oppure di inserirlo nell'initrd (in nessuna maniera). Cosa fare?

Visto che il supporto della casa produttrice per ora è fermo (e comunque si tratta di un supporto scarsamente flessibile) se il modulo viene applicato ad una versione di kernel compatibile (ad esempio lo stesso thread 2.4.xx) è possibile installarlo facendo una piccola modifica alla versione compilata che ne alteri l'header, indicando che è un modulo per il kernel x.x.xx. Per rendere piu' facile il lavoro ho preparato uno script, sulla base di quanto visto per altri moduli binari, in grado di modificare l'header del modulo. Lo script è il seguente:

#!/bin/sh



kernelver=$2

module=$1

newmodule=new.$1

modinfo=/tmp/modinfo.tmp



echo -ne "kernel_version="$2"\0" > $modinfo

echo -ne `objdump -s -j .modinfo $module | awk 'BEGIN{v=0;} /Contents/

{v=1; next; } { if (v==1) print $0; }' | cut -c7-41 | awk '{ printf($0); }' |

sed 's/ //g;s/../\\\\x&/g;'` | tr '\000' '\n' | awk '/^kernel_version=/

{ next; } {print $0; }' | tr '\n' '\000' >>$modinfo





objcopy --remove-section=.modinfo

--add-section=.modinfo=$modinfo $module $newmodule



rm -f $modinfo

ed è possibile scaricarlo qui (modfix).
L'uso è elementare: dato uno modulo sii6512.o originale (reperibile dal sito di supporto di Silicon Image) si lancia

modfix sii6512.o 2.4.23



ad esempio per far diventare il modulo compatibile con il 2.4.23 (compilato autonomamente dai sorgenti ufficiali). Viene generato un new.sii6512.o nella stessa directory ed a questo punto basta portarlo nella /lib/modules/2.4.23/kernel/drivers/scsi/ per farlo funzionare. Se è necessario creare un initrd con il supporto al sil2112 (perchè si tratta di dischi di boot):

mkinitrd --with=sii6512 --with=scsi_mod /boot/initrd-2.4.23.img 2.4.23



Ovviamente questo discorso vale se c'è compatibilità tra il suddetto modulo e gli altri componenti del kernel con cui questo interagisce. Nel caso del sii6512 ad esempio è provato che con il kernel 2.4.23 tutto funziona, ma non ho provato con altri anche se è ragionevole pensare che non ci siano difficoltà; la stessa modalità operativa fino a qui usata può essere utilizzata ogniqualvolta c'è compatibilità di certi moduli piuttosto datati con versioni differenti di kernel, ma che a causa di questo sistema di protezione (ideato per favorire la stabilità della macchina) non sarebbe possibile caricare.

 

Twitter status

: me ne lamento sempre, ma avere dei clienti con consulenti incompetenti ha degli indubbi vantaggi
perde un amico
LUI "cara aspettiamo ospiti a casa?", LEI "si... perché?", LUI "ora si spiega perché non ci sono scarpe sparse per l'ingresso"
 

Meteo

Anguillara Sabazia: 21.0 °C
Genova Albaro: 29.2 °C

Temperatura Casa: 27.9 °C
Pressione Casa: 973.0 hPa
Umidità Casa: 89 %
Pioggia ultime 24h: 0.0 mm