<!--
	The FreeBSD Documentation Project
	The FreeBSD French Documentation Project
         
        $FreeBSD$ 
        Original revision: n.nn
--> 

  <chapter id="hackers">
    <title>Pour les passionn&eacute;s</title>
    
    <sect1>
      <title>Que sont les SNAP et RELEASE</title>

      <para>Il y a actuellement 3 branches actives/semi-actives dans
<ulink  url="http://www.freebsd.org/cgi/cvsweb.cgi">l'entrepot
CVS</ulink> des sources de FreeBSD:
<itemizedlist>
	  <listitem>
	    <para>RELENG_2_1_0 encore appel&eacute;e 2.1-stable ou branche 2.1</para>
	  </listitem>
	  <listitem>
	    <para>RELENG_2_2 encore appel&eacute;e 2.2-stable ou branche
2.2</para>
	  </listitem>
	  <listitem>
	    <para>HEAD encore appel&eacute;e -current ou 3.0-current</para>
	    </listitem>
	</itemizedlist></para>

      <para>HEAD n'est pas vraiment une branche, compar&eacute;e aux deux
autres, c'est juste une valeur symbolique constante pour d&eacute;signer
le r&eacute;pertoire de la version courante(ou version de d&eacute;veloppement), auquel
nous nous r&eacute;f&eacute;rerons sous le nom de -current.</para>
      
      <para>Actuellement -current est la branche de d&eacute;veloppement de
la version 3.0 r&eacute;sultant de la s&eacute;paration de la branche 2.2-stable(RELENG_2_2)
en Novembre 1996.</para>

      <para>La branche 2.1-stable, RELENG_2_1_0, s'&eacute;tant s&eacute;par&eacute;e de
-current en Septembre 1994.</para>
    </sect1>
    
    <sect1>
      <title>Comment cr&eacute;er ma propre version</title>

      <para>Pour cr&eacute;er votre propre version, vous devez effectuer trois 
choses. Premi&egrave;rement, vous devez avoir un noyau contenant le
gestionnaire <ulink
url="http://www.freebsd.org/cgi/man.cgi?vn">vn</ulink>. Ajoutez la
ligne suivante au fichier de configuration du noyau, puis reconstruisez le.</para>


<programlisting>
 pseudo-device vn         #Vnode driver (turns a file into a device)
</programlisting>

      <para>Ensuite, vous devez disposer de l'arbre CVS au
complet. Pour l'obtenir, vous pouvez utiliser <ulink
url="../handbook/synching.html">CVSUP</ulink> et remplissez votre fichier
de configuration de cvsup de la fa&ccedil;on suivante:</para> 
      
<programlisting>
*default prefix=/home/ncvs 
*default base=/a 
*default host=cvsup.FreeBSD.org 
*default release=cvs 
*default delete compress use-rel-suffix 

## Main Source Tree 
src-all 
src-eBones 
src-secure 

# Other stuff 
ports-all 
www 
doc-all 
</programlisting>

      <para>Ensuite lancez la commande <filename>cvsup -g
fichier_de_configuration_de_cvsup</filename> pour rapatrier tous les 
sources sur votre machine</para>

      <para>Pour finir, vous devez disposez de beaucoup de place sur
vos disque pour compiler le tout. Disons que cela se trouve dans le
r&eacute;pertoire <filename>/tres/gros/systeme/de/fichiers</filename> et que
l'arbre CVS se trouve dans <filename>/home/ncvs</filename></para>


<programlisting>
setenv CVSROOT /home/ncvs   # ou export CVSROOT=/hom/ncvs (pour du sh)
cd /usr/src/release
make release 
BUILDNAME=3.0-MY-SNAP CHROOTDIR=/tres/gros/systeme/de/fichiers
</programlisting>

      <para>Une distribution compl&egrave;te sera alors cr&eacute;e dans le
r&eacute;pertoire <filename>/tres/gros/systeme/de/fichiers</filename> et vous 
disposerez d'un programme d'installation ftp utilisant ce r&eacute;pertoire
par d&eacute;faut. Vous pouvez aussi d&eacute;cider de compiler autre chose que la version -current
en donnant au param&egrave;tre <filename>RELEASETAG</filename> une autre
valeur. Par exemple pour compiler une version 2.2, il suffit de passer 
la valeur <filename>RELEASETAG=RELENG_2_2</filename> &agrave; la ligne de
commande de make.</para>

    </sect1>

    <sect1>
      <title>Comment cr&eacute;er une disquette d'installation personnalis&eacute;e?</title>

      <para>Le processus de cr&eacute;ation, des disquettes d'installation
ainsi que des archives binaires, est automatis&eacute; par diff&eacute;rentes cibles 
dans le fichier <filename>/usr/src/release/Makefile</filename>. Ce
fichier doit etre votre point de d&eacute;part pour plus d'informations. Bien sur,
cela veut dire que vous devrez faire un <quote>make world</quote> et
que cela demande  beaucoup d'espace disque et de temps.</para>

    </sect1>

    <sect1>
      <title><quote>make world</quote> remplace-t-il tous les binaires d&eacute;ja install&eacute;s?</title>

      <para>Oui.Comme son nom le sugg&egrave;re,<quote>make world</quote>
recompile tout le syst&egrave;me depuis les sources, donc vous pouvez etre
sur d'avoir un syst&egrave;me sain et coh&eacute;rent &agrave; la fin (cela peut prendre
&eacute;norm&eacute;ment de temps pour y arriver).</para>

      <para>Si la variable <filename>DESTDIR</filename> est d&eacute;finie
lorsque vous &eacute;xecutez <quote>make world</quote> ou <quote>make
install</quote>, les binaires seront install&eacute;s dans la m&ecirc;me
arborescence que votre syst&egrave;me sauf que la racine du nouveau syst&egrave;me
sera <filename>&dollar;&lcub;DESTDIR&rcub;</filename>. Diff&eacute;rentes
combinations dans la modification des librairies partag&eacute;es et dans les 
programmes, peut entrainer une erreur du <quote>make
world</quote>.</para>

      </sect1>
    <sect1>
      <title>Lorsque le syst&egrave;me d&eacute;marre, il affiche <quote>(bus speed defaulted)</quote></title>
      <para>Les cartes SCSI Adaptec 1542 permettent d'acc&eacute;der &agrave; la
configuration de la vitesse du bus par logiciel. Les anciennes
versions du gestionnaire de p&eacute;riph&eacute;rique 1542 essayaient de d&eacute;terminer 
la vitesse maximale utiliable et de configurer la carte &agrave; cette
valeur. Nous avons trouv&eacute; que cela pouvait casser certains syst&egrave;mes,
donc vous devez d&eacute;finir l'option
<filename>TUNE&lowbar;1542</filename> dans le fichier de configuration 
du noyau, pour que cela soit actif. En l'utilisant sur des syst&egrave;mes ou 
la carte le supporte, cela vous permettra d'avoir une meilleur vitesse 
pour vos disques, mais sur des syst&egrave;me ne le supportant pas vous
obtiendrez des donn&eacute;es corrompues.</para>
     
    </sect1>
    
    <sect1>
      <title>Puis-je me tenir &agrave; jour par rapport &agrave; -current si j'ai un acc&egrave;s limit&eacute; &agrave; l'Internet?</title>
      <para>Oui, vous pouvez le faire sans t&eacute;l&eacute;charger l'arbre complet 
des sources en utilisant la fonctionnalit&eacute;e <ulink
url="../handbook/synching.html">CTM</ulink></para>

    </sect1>
    
    <sect1>
      <title>Comment faire pour couper la distribution en fichiers de 240Ko?</title>
      <para>Les syst&egrave;mes BSD r&eacute;cents diposent d'une option
<quote><filename>-b</filename></quote> pour vous permettre de d&eacute;couper 
les fichiers binaires en plusieurs parties</para>
      <para>Voici un exemple, tir&eacute; de
<filename>/usr/src/Makefile</filename>.</para>

<programlisting>
bin-tarball: 
	(cd $&lcub;DISTDIR&rcub;; \ 
        tar cf - . \ 
        gzip --no-name -9 -c | \ 
        split -b 240640 - \ 
        $&lcub;RELEASEDIR&rcub;/tarballs/bindist/bin_tgz.) 
</programlisting>
    </sect1>
    <sect1>
      <title>J'ai &eacute;crit une extension pour le noyau, comment l'incorporer?</title>
      <para>Regardez la partie du handbook sur la fa&ccedil;on de <ulink
url="../handbook/contrib.html">soumettre du code</ulink></para>
      <para>Et encore merci pour tout.</para>
    </sect1>

    <sect1>
      <title>Comment sont d&eacute;tect&eacute;es les cartes plugs and play ISA?</title>
      
      <para>Contribution de <ulink url="mailto:uhclem@nemesis.lonestar.org">Frank Durda IV</ulink></para>
      
      <para>Il y a un certains nombres de ports d'entr&eacute;es/sorties sur
lesquels la plupart des cartes PnP r&eacute;pondent lorsqu'une machine
interroge le bus ISA. Donc, lorsque la routine de d&eacute;tection PnP
s'execute, elle interroge les cartes PnP sur ces ports pour savoir
lesquelles sont pr&eacute;sentes. Dans ce cas toutes les cartes r&eacute;pondent en
indiquant leur mod&egrave;le et la routine de d&eacute;tection re&ccedil;oit alors une
valeur qui est soit <quote>oui</quote> soit rien. Au minimum un bit
est mis &agrave; 1 lors de la r&eacute;ponse. Alors le code de d&eacute;tection peut
essayer de dialoguer avec les cartes, gra&ccedil;e aux num&eacute;ros de mod&egrave;le de
cartes (d&eacute;finis par Microsoft/Intel), inf&eacute;rieurs &agrave; X pour leur dire de 
s'arr&eacute;ter. Il v&eacute;rifie alors qu'aucune autre carte ne r&eacute;pond &agrave; la
question pr&eacute;cedente. Si la r&eacute;ponse est <emphasis>0</emphasis> alors il
consid&egrave;re  qu'aucune carte n'a d'ID au dessus de X. Ensuite il
interroge le bus pour obtenir la liste des cartes sous
<quote>X</quote>. S'il en trouve alors il interroge le bus pour avoir
la liste des celles ayant un ID sup&eacute;rieur &agrave; X-(limit/4). Et r&eacute;p&egrave;te
ainsi de suite l'algorithme, qui consiste &agrave; diviser l'intervalle de
recherche par deux. Avec cet algorithme, les cartes seront d&eacute;couvertes 
avec un maximum d'it&eacute;ration de 2^64.</para>

      <para>Les Identifiants de cartes sont cod&eacute;s sur 32 bits + 8 bit
de checksum. Les 32 premiers bits repr&eacute;sentent le code de la carte
pour le constructeur de cette carte. Il arrive de trouver plusieurs
cartes du meme constructeur ayant diff&eacute;rents code de carte. L'id&eacute;e de
coder sur 32 bits le nom du constructeur serait un peu
excessif.</para>

      <para>Les 32 bits de poids faibles sont le num&eacute;ro de s&eacute;rie de la 
carte; l'adresse ethernet , ou quelque chose rendant la carte unique
par ce num&eacute;ro. Le constructeur ne doit jamais produire une deuxi&egrave;me
carte ayant ce meme num&eacute;ro tout en ayant le meme nombre repr&eacute;sent&eacute; sur 
les 32 premiers bits. Vous pouvez dons avoir plusieurs cartes du meme
type dans votre ordinateur , et l'ensemble des 64 bits permet de
rendre chacune unique.</para>
      
      <para>Les groupes de 32 bits ne peuvent en aucun cas etre tous
&agrave; z&eacute;ro. Cela permet d'effectuer le <quote>OU</quote> pour afficher les 
bits non nuls lors de la premi&egrave;re recherche dicotomique.</para>
      
      <para>Lorsque le syst&egrave;me &agrave; d&eacute;tecter toutes les cartes pr&eacute;sentes, 
ils les r&eacute;activent une &agrave; une, et recherche les ressources dont elles
ont besoin, quels sont les choix possibles pour les interruptions,
etc. Un <quote>scan</quote> de toutes les cartes est effectu&eacute; pour
collecter toutes ces informations.</para>
      
      <para>Cette information est combin&eacute;e avec l'information
recueillie des fichiers ECU se trouvant sur le disque dur ou dans le
BIOS. Le support ECU et BIOS du plug-and-play pour le mat&eacute;riel est
tr&egrave;s simple, et les p&eacute;riph&eacute;rique n'ont pas besoin d'etre vraiment
PnP. Mais en examinant les informations du BIOS et des fichiers ECU,
les routines d'interrogations peuvent permettre aux p&eacute;riph&eacute;riques
PnP <quote>to avoid those devices the probe code cannot
relocate. </quote></para>

      <para>Alors les p&eacute;riph&eacute;riques PnP sont encore interrog&eacute;s, et
renvoient leur IRQ, adresse m&eacute;moire, ports d'entr&eacute;e/sorties et
DMA. Les p&eacute;riph&eacute;riques sont alors activ&eacute;s, en prenant en compte ces
valeurs, et le reste jusqu'au prochaine red&eacute;marrage du syst&egrave;me. Bien
sur rien de vous empeche de les retirer, si le mat&eacute;riel le permet
:-).</para>

      <para>Ceci n'explique pas toute la complexit&eacute; de d&eacute;tection, mais
c'est une explication simple du processus de d&eacute;tection.</para>

<!--       <p>Microsoft took over some of the primary printer status ports to -->
<!--       do PnP, on the logic that no boards decoded those addresses for -->
<!--       the opposing I/O cycles.  I found a genuine IBM printer board -->
<!--       that did decode writes of the status port during the early PnP -->
<!--       proposal review period, but MS said ``tough''.  So they do a -->
<!--       write to the printer status port for setting addresses, plus that -->
<!--       use that address + <tt/0x800/, and a third I/O port for reading -->
<!--       that can be located anywhere between <tt/0x200/ and <tt/0x3ff/. -->

    </sect1>
    <sect1>
      <title>Est-ce que FreeBSD va supporter d'autres architectures mat&eacute;rielles?</title>

      <para>Diff&eacute;rentes personnes sont interress&eacute;es sur un support
multi-architecture pour FreeBSD, et certaines personnes sont en train
de porter FreeBSD sur la plateforme ALPHA, en coop&eacute;ration avec
DEC. Pour plus d'informations sur les nouvelles architectures utilisez 
la mailling liste <ulink
url="mailto:&lt;freebsd-platforms@FreeBSD.ORG&gt;">&lt;freebsd-platforms@FreeBSD.ORG&gt;</ulink>
</para>
    </sect1>

    <sect1>
      <title>J'ai besoin d'un <quote>major number</quote> pour un gestionnaire de p&eacute;riph&eacute;rique que je viens d'&eacute;crire</title>
      <para>Ceci d&eacute;pend du fait que vous vouliez ou non rendre public ce
gestionnaire. Si vous le d&eacute;sirez, envoyez nous une copie code source
du gestionnaire et les modifications n&eacute;cessaires &agrave; apporter au fichier 
<filename>files.i386</filename>, un fichier de configuration et le
code du fichier <ulink
url="http://www.freebsd.org/cgi/man.cgi?MAKEDEV">MAKEDEV</ulink>n&eacute;cessaire 
pour cr&eacute;er les fichiers sp&eacute;ciaux dont le gestionnaire &agrave; besoin. Si
vous ne d&eacute;sirez pas rendre plublic le code, ou si vous ne pouvez pas &agrave; 
cause de certaines restrictions de votre license, alors utilisez le
<quote>major number</quote> 32 (pour les gestionnaires de type
caract&egrave;re) et le <quote>major number</quote> 8 (pour les gestionnaires 
de type blocs), qui sont r&eacute;serv&eacute;s &agrave; ce type de chose. Dans les deux
cas nous sommes interess&eacute;s par votre gestionnaire, discutez &agrave; son
propos sur la mailling liste <ulink
url="mailto:&lt;freebsd-hackers@FreeBSD.ORG&gt;">&lt;freebsd-hackers@FreeBSD.ORG&gt;</ulink>.</para>

      </sect1>
    
  </chapter>

