1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
|
<!--
The FreeBSD Documentation Project
The FreeBSD French Documentation Project
$FreeBSD$
Original revision: n.nn
-->
<chapter id="hackers">
<title>Pour les passionné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ée 2.1-stable ou branche 2.1</para>
</listitem>
<listitem>
<para>RELENG_2_2 encore appelée 2.2-stable ou branche
2.2</para>
</listitem>
<listitem>
<para>HEAD encore appelée -current ou 3.0-current</para>
</listitem>
</itemizedlist></para>
<para>HEAD n'est pas vraiment une branche, comparée aux deux
autres, c'est juste une valeur symbolique constante pour désigner
le répertoire de la version courante(ou version de développement), auquel
nous nous référerons sous le nom de -current.</para>
<para>Actuellement -current est la branche de développement de
la version 3.0 résultant de la sé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'étant séparée de
-current en Septembre 1994.</para>
</sect1>
<sect1>
<title>Comment créer ma propre version</title>
<para>Pour créer votre propre version, vous devez effectuer trois
choses. Premiè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ç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é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ète sera alors crée dans le
répertoire <filename>/tres/gros/systeme/de/fichiers</filename> et vous
disposerez d'un programme d'installation ftp utilisant ce répertoire
par défaut. Vous pouvez aussi décider de compiler autre chose que la version -current
en donnant au paramè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> à la ligne de
commande de make.</para>
</sect1>
<sect1>
<title>Comment créer une disquette d'installation personnalisée?</title>
<para>Le processus de création, des disquettes d'installation
ainsi que des archives binaires, est automatisé par différentes cibles
dans le fichier <filename>/usr/src/release/Makefile</filename>. Ce
fichier doit etre votre point de dé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éja installés?</title>
<para>Oui.Comme son nom le suggère,<quote>make world</quote>
recompile tout le système depuis les sources, donc vous pouvez etre
sur d'avoir un système sain et cohérent à la fin (cela peut prendre
énormément de temps pour y arriver).</para>
<para>Si la variable <filename>DESTDIR</filename> est définie
lorsque vous éxecutez <quote>make world</quote> ou <quote>make
install</quote>, les binaires seront installés dans la même
arborescence que votre système sauf que la racine du nouveau système
sera <filename>${DESTDIR}</filename>. Différentes
combinations dans la modification des librairies partagées et dans les
programmes, peut entrainer une erreur du <quote>make
world</quote>.</para>
</sect1>
<sect1>
<title>Lorsque le système démarre, il affiche <quote>(bus speed defaulted)</quote></title>
<para>Les cartes SCSI Adaptec 1542 permettent d'accéder à la
configuration de la vitesse du bus par logiciel. Les anciennes
versions du gestionnaire de périphérique 1542 essayaient de déterminer
la vitesse maximale utiliable et de configurer la carte à cette
valeur. Nous avons trouvé que cela pouvait casser certains systèmes,
donc vous devez définir l'option
<filename>TUNE_1542</filename> dans le fichier de configuration
du noyau, pour que cela soit actif. En l'utilisant sur des systèmes ou
la carte le supporte, cela vous permettra d'avoir une meilleur vitesse
pour vos disques, mais sur des système ne le supportant pas vous
obtiendrez des données corrompues.</para>
</sect1>
<sect1>
<title>Puis-je me tenir à jour par rapport à -current si j'ai un accès limité à l'Internet?</title>
<para>Oui, vous pouvez le faire sans télécharger l'arbre complet
des sources en utilisant la fonctionnalité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èmes BSD récents diposent d'une option
<quote><filename>-b</filename></quote> pour vous permettre de découper
les fichiers binaires en plusieurs parties</para>
<para>Voici un exemple, tiré de
<filename>/usr/src/Makefile</filename>.</para>
<programlisting>
bin-tarball:
(cd ${DISTDIR}; \
tar cf - . \
gzip --no-name -9 -c | \
split -b 240640 - \
${RELEASEDIR}/tarballs/bindist/bin_tgz.)
</programlisting>
</sect1>
<sect1>
<title>J'ai écrit une extension pour le noyau, comment l'incorporer?</title>
<para>Regardez la partie du handbook sur la faç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étecté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ées/sorties sur
lesquels la plupart des cartes PnP répondent lorsqu'une machine
interroge le bus ISA. Donc, lorsque la routine de détection PnP
s'execute, elle interroge les cartes PnP sur ces ports pour savoir
lesquelles sont présentes. Dans ce cas toutes les cartes répondent en
indiquant leur modèle et la routine de détection reçoit alors une
valeur qui est soit <quote>oui</quote> soit rien. Au minimum un bit
est mis à 1 lors de la réponse. Alors le code de détection peut
essayer de dialoguer avec les cartes, graçe aux numéros de modèle de
cartes (définis par Microsoft/Intel), inférieurs à X pour leur dire de
s'arréter. Il vérifie alors qu'aucune autre carte ne répond à la
question précedente. Si la réponse est <emphasis>0</emphasis> alors il
considè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érieur à X-(limit/4). Et répète
ainsi de suite l'algorithme, qui consiste à diviser l'intervalle de
recherche par deux. Avec cet algorithme, les cartes seront découvertes
avec un maximum d'itération de 2^64.</para>
<para>Les Identifiants de cartes sont codés sur 32 bits + 8 bit
de checksum. Les 32 premiers bits représentent le code de la carte
pour le constructeur de cette carte. Il arrive de trouver plusieurs
cartes du meme constructeur ayant différents code de carte. L'idé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éro de série de la
carte; l'adresse ethernet , ou quelque chose rendant la carte unique
par ce numéro. Le constructeur ne doit jamais produire une deuxième
carte ayant ce meme numéro tout en ayant le meme nombre représenté 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
à zéro. Cela permet d'effectuer le <quote>OU</quote> pour afficher les
bits non nuls lors de la première recherche dicotomique.</para>
<para>Lorsque le système à détecter toutes les cartes présentes,
ils les réactivent une à 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é pour
collecter toutes ces informations.</para>
<para>Cette information est combiné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ériel est
très simple, et les périphé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ériphériques
PnP <quote>to avoid those devices the probe code cannot
relocate. </quote></para>
<para>Alors les périphériques PnP sont encore interrogés, et
renvoient leur IRQ, adresse mémoire, ports d'entrée/sorties et
DMA. Les périphériques sont alors activés, en prenant en compte ces
valeurs, et le reste jusqu'au prochaine redémarrage du système. Bien
sur rien de vous empeche de les retirer, si le matériel le permet
:-).</para>
<para>Ceci n'explique pas toute la complexité de détection, mais
c'est une explication simple du processus de dé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érielles?</title>
<para>Différentes personnes sont interressées sur un support
multi-architecture pour FreeBSD, et certaines personnes sont en train
de porter FreeBSD sur la plateforme ALPHA, en coopération avec
DEC. Pour plus d'informations sur les nouvelles architectures utilisez
la mailling liste <ulink
url="mailto:<freebsd-platforms@FreeBSD.ORG>"><freebsd-platforms@FreeBSD.ORG></ulink>
</para>
</sect1>
<sect1>
<title>J'ai besoin d'un <quote>major number</quote> pour un gestionnaire de périphérique que je viens d'écrire</title>
<para>Ceci dépend du fait que vous vouliez ou non rendre public ce
gestionnaire. Si vous le désirez, envoyez nous une copie code source
du gestionnaire et les modifications nécessaires à 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écessaire
pour créer les fichiers spéciaux dont le gestionnaire à besoin. Si
vous ne désirez pas rendre plublic le code, ou si vous ne pouvez pas à
cause de certaines restrictions de votre license, alors utilisez le
<quote>major number</quote> 32 (pour les gestionnaires de type
caractère) et le <quote>major number</quote> 8 (pour les gestionnaires
de type blocs), qui sont réservés à ce type de chose. Dans les deux
cas nous sommes interessés par votre gestionnaire, discutez à son
propos sur la mailling liste <ulink
url="mailto:<freebsd-hackers@FreeBSD.ORG>"><freebsd-hackers@FreeBSD.ORG></ulink>.</para>
</sect1>
</chapter>
|