[FLUG] patchettina modulino trallallero trallalla

Mailing List del Fortunae LUG
=============================

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dai questa è figa... inutile ma figa.

Tipo no se uno vuole fregare e dice io c'ho un i686 però mi
sta antipatico che quello che compilo dai sorgenti venga
ottimizzato per i686 e quindi il binario che ne risulta è
inutilizzabile sulle arch precedenti.
Allora tipo ho trovato sta roba qui:

http://rakshas.de/lfs/xcompile-a.2.html

Consiste in un modulino che inserito nel kernel te lo fa
diventare un iX86... quello che vuoi e che decidi al
momento della compilazione. Quando lo rimuovi ritorna
quello di prima.

Solo che sto ciaffetto qua non faceva una cosa... cioè non
cambiava la family in /proc/cpuinfo:

processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
[...]

Infatti rimaneva 6.
La roba noiosa è che alcuni pacchettozzi non sempre usano
uname per determinare l'arch... ogni tanto sono bastardozzi
e vanno a vedere anche in /proc/cpuinfo quindi dovevo fare
qualcosa! dovevo mettere ordine in questo guazzabuglio.

Ho migliorato il programmino in modo che cambi anche 
la family in /proc/cpuinfo.

Eccolo:

- ---------| INIZIO: uname_i586.c |------------

#include <linux/module.h>
#include <linux/utsname.h>
#include <asm/processor.h>

#ifndef UNAME_DUMB_STEPPING
#define UNAME_DUMB_STEPPING '5'
#endif

char machine_bak, family_bak;

int init_module(void)
{
  machine_bak = system_utsname.machine[1];
  system_utsname.machine[1] = UNAME_DUMB_STEPPING;

  family_bak = cpu_data[0].x86;
  cpu_data[0].x86 = UNAME_DUMB_STEPPING - '0';

  return (0);
}

void cleanup_module(void)
{
  system_utsname.machine[1] = machine_bak;
  cpu_data[0].x86 = family_bak;
}

- ---------| FINE: uname_i586.c |----------

Per compilarlo:

 $ gcc -Wall -O3 -c -DMODULE uname_i586.c

Per usarlo:

 # insmod ./uname_i586.o
 # uname -m   
 i586
 # cat /proc/cpuinfo
 processor       : 0
 vendor_id       : AuthenticAMD
 cpu family      : 5
 # rmmod uname_i586
 # uname -m
 i686

Figo... funziona bene da bestia.
(a parte forse se è un SMP... in tal caso boh:)


- -- 
/* Federico 's1m0n' Simoncelli <f.simon@xxxxxxxx>
   http://www.jkcal.org/simon
*/ 
int main(){unsigned int g,h=0;while(++h){for(g=(h>1)?2:1;g<
h/2+1&&h%g!=0;g++);if(g==h/2+1)printf("%i\n",h);}return 0;}

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE9DQ0B/ItriIBKan0RAtEDAJ91Fl18m9QdfGNMidZhOtAdSb/oywCeICA+
Yb7ZbdNux4vgo9vp/l6MDug=
=aciH
-----END PGP SIGNATURE-----
--
<SmartArt> Ogni giorno un sistemista Windows NT si sveglia...... e sa che 
dovra' lavorare. 
<SmartArt> Ogni giorno un sistemista Linux si sveglia...... alle 13.00, per il 
pranzo. 
<SmartArt> Non importa che tu sia sistemista Windows NT o Linux.....tanto ti 
pagano uguale!

Other related posts: