x
x x  
x  
Mac OS X 10.3 PANTHER


XNU
Apple Darwin / Mac OS X kernel

Guida alla compilazione
by hany@hanynet.com

Cos'e' XNU?
XNU e' il kernel di Darwin. Darwin e' un sistema operativo della famiglia UNIX basato su BSD4.4 e NextStep. Mac OS X 10.3 e' una delle distribuzioni di Darwin 7.0.
XNU e' un kernel monolitico modulare basato sull'unione del kernel Mach e del kernel BSD. XNU e' un progetto opensource distribuito da Apple sotto licenza APSL. XNU e' compatibile con le architetture PowerPC (32 e 64 bit) e IA32 (intel x86/32 bit e compatibili). La versione 517 di XNU corrisponde a quella installata da Mac OS X 10.3.

Requisiti di sistema
Per compilare con successo XNU 517 occorre un Mac PowerPC con Darwin 7.x oppure MacOSX 10.3 . E' possibile compilare XNU-517 anche su PC Intel/x86 con Darwin 7.0.1.
Inoltre e' necessario installare i Developer Tools piu' recenti (gcc 3.3) e ovviamente avere accesso al sistema come amministratore o root.

Come ottenere il software
Il sito Apple offre la registrazione gratuita sia all'ADC (Apple Developer Connection) sia alla APSL (Apple Public Software License). Una volta registrati e' possibile ottenere a questo indirizzo http://www.opensource.apple.com/darwinsource/index.html i sorgenti delle distribuzioni di Darwin, incluso il kernel XNU.

Per compilare il kernel XNU occorre installare anche alcuni software aggiuntivi (Support Tools).
Elenco dei pacchetti da scaricare:

kernel:
xnu

support tools:
bootstrap_cmds
Libstreams
IOKitUser
kext_tools
cctools

Come installare i Support Tools

Consiglio di utilizzare la shell bash per installare i tools e il kernel: Se utilizzate csh/tcsh e' bene eseguire rehash prima di ogni make.
Copiare i files .tar.gz nella home e scompattatarli con il comando tar -zxf <nomefile.tar.gz>.
A questo punto occorre verificare la versione del compilatore gcc in uso. Digitare gcc -v per ottenere questa informazione. Sebbene i Support Tools siano compilabili con gcc 2.95, 3.1 e 3.3, consiglio l'uso della versione 3.3 . Per cambiare la versione di gcc in uso digitare sudo gcc_select 3.3 .

(1) bootstrap_cmds
Per installare il pacchetto bootstrap_cmds digitare:
cd bootstrap_cmds-version/relpath.tproj
make
sudo make install
cd ../..


(2) Libstreams
Per installare il pacchetto Libstreams digitare:
cd Libstreams-version
make
sudo make install
cd ..


(3) cctools

PRIMA FASE - compilazione e installazione di cctools
Digitare:
cd cctools-495
cd libstuff
make all
cd ../misc
make macos_all
sudo cp seg_hack.NEW /usr/bin/seg_hack
cd ../libmacho
make macos
sudo cp otmp_obj/libmacho_static.a /usr/local/lib/
cd ../ld
make kld_build
sudo cp static_kld/libkld.a /usr/local/lib/
cd ../include/mach-o
sudo cp kld.h /usr/include/mach-o/
cd ../../../


SECONDA FASE - compilazione e installazione di kextsymboltool
Digitare:
cd IOKitUser-174
sudo mv kext.subproj kext
sudo mkdir /usr/include/IOKit
sudo cp -R kext /usr/include/IOKit/kext
cd ../kext_tools-42
make kextsymboltool
sudo cp kextsymboltool /usr/local/bin/
sudo ranlib /usr/local/lib/libkld.a
cd ..

A questo punto in sistema e' configurato per poter compilare il kernel XNU.


Come compilare il kernel XNU


Dopo aver installato i Support Tools e dopo avere scompattato l'archivio xnu.tar.gz, spostarsi nella cartella xnu con il comando cd xnu .
Digitare source SETUP/setup.sh
Se si sta usando tcsh digitare source SETUP/setup.csh
Anche nel caso del kernel, suggerisco l'uso di gcc 3.3 .

Modificate i files bsd/conf/MASTER* e osfmk/conf/MASTER* o create nuove configurazioni con lo script doconf per modificare i parametri di compilazione del kernel.
A questo punto basta digitare:
make exporthdrs
make all

Alla fine della compilazione (da 10 a 200 minuti a seconda del tipo di processore) si ottiene il file BUILD/obj/RELEASE_PPC/mach_kernel .

*** ATTENZIONE ***
La compilazione di XNU con la configurazione di default produrra' un kernel con abilitato il supporto a diverse funzioni di debug che rallentano il sistema. Occorre quindi sperimentare diverse configurazioni di XNU per ottenere un kernel stabile e performante.


Come testare il nuovo kernel


Il kernel originale si trova nella directory root / del sistema e si chiama mach_kernel . E' sconsigliabile la rimozione o la modifica del nome del kernel originale. La procedura piu' sicura e' quella di copiare il nuovo kernel sulla directory / con un nuovo nome, ad esempio mach_kernel.test1 .
sudo cp BUILD/obj/RELEASE_PPC/mach_kernel /mach_kernel.test1
A questo punto installiamo kswap.sh, uno script che permette di modificare il kernel da utilizzare al boot.
curl -O http://opendarwin.org/~jpm/naughty/darwin/kswap.sh
chmod ugo+x kswap.sh
sudo cp kswap.sh /bin/
rehash

Per attivare il kernel di test digitare:
sudo kswap.sh --test mach_kernel.test1
Per tornare al kernel originale:
sudo kswap.sh --stable
Ovviamente per rendere effettivo il cambiamento del kernel occorre un reboot...

IMPORTANTE:
Se eseguite modifiche alla configurazione del kernel dovete aspettarvi qualsiasi risultato, compresa l'impossibilita' di bootare il sistema. In casi simili per tornare al kernel originale basta resettare la pram premendo command-option-p-r per 3 boot consecutivi.
In alternativa si puo' entrare nell'openfirmware premendo command-option-o-f e digitare reset-all seguito da mac-boot. E' anche possibile resettare le nvram premendo command-option-n-v .
------------

XNU building how-to version 1.1 (it) 3.December.2003
http://www.hanynet.com/xnu
by hany el imam - hany@hanynet.com

Valid HTML 4.01! Valid CSS!.