File: Separate-Kernel-Trees-NL.sgml

package info (click to toggle)
doc-linux-nl 20051127-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 16,408 kB
  • ctags: 94
  • sloc: xml: 47,403; makefile: 312; perl: 193; sh: 116; ansic: 12; csh: 9
file content (254 lines) | stat: -rw-r--r-- 8,481 bytes parent folder | download | duplicates (2)
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
<!doctype linuxdoc system>
<linuxdoc>
<article>
<titlepag>
<title>Separate Kernel Trees</title>
<author><name>Frodo Looijaard, 
<htmlurl url="mailto:frodol@dds.nl" name="frodol@dds.nl"><newline>
Vertaald door: Ellen Bokhorst,
<htmlurl url="mailto:bokkie@nl.linux.org" name="bokkie@nl.linux.org">
</name></author>
<date>v1.1, 12 juli 1998</date>


<abstract>
Dit document beschrijft een setup waarmee de installatie
en het gebruik van verscheidene aparte kernel-structuren mogelijk is,
zelfs als ze hetzelfde releasenummer hebben.
</abstract>
</titlepag>

<sect><heading>Introductie</heading>
<p>
Dit document zou van nut voor je kunnen zijn als je aan &eacute;&eacute;n
of andere ontwikkeling gerelateerd aan de kernel werkt, waarbij je een 
nieuwe compiler versie uitprobeert of pre-versies installeert.</p>

<p>Een aantal distributies kunnen reeds iets vergelijkbaars als met de hieronder
setup hebben. Als de directory-structuren in <tt>/lib/modules</tt>
zijn genaamd 2.0.34 voor kernelversies 2.0.34, is dit waarschijnlijk niet
het geval. Als ze 2.0.34-iets zijn genoemd, zal je dit document waarschijnlijk
niet nodig hebben.</p>

<p>Ik heb dit alleen met kernel 2.0.x getest. Ik zou het waarderen te horen
of het tevens met kernels 2.1.x werkt.</p>
</sect>

<sect><heading>Setup</heading>
<p>
We zullen naar kernelversies refereren als een aaneenschakeling van
releasenummer en compilatienummer, gescheiden door een koppelteken om
het gebruik van verscheidene kernels met hetzelfde releasenummer mogelijk te
maken.</p>

<p>Voorbeeld:
  Kernelversie 2.0.32, derde compilatie, zou worden genoemd 2.0.32-3</p>

<p>Tijdens de uitvoering van <file>/etc/rc</file> (bij het opstarten van het
systeem), moeten verscheidene stappen worden genomen om er zeker van te
zijn dat dit zal werken (VERSION is een versienummer zoals hierboven is
uitgelegd):
<itemize>
<item><tt>/usr/src/linux moet worden gelinkt naar /usr/src/VERSION</tt></item>
<item><tt>/lib/modules/current moet worden gelinkt naar /lib/modules/VERSION</tt></item>
</itemize>
</p>

<p>Je kunt VERSION met het volgende stukje code vaststellen:

<tscreen><verb>
kernel_version ()
{
  local IFS_safe="$IFS"
  IFS="#-$IFS"
  set -- `uname -v`
  IFS="$IFS_safe"
  echo `uname -r`-$2
}
</verb></tscreen>
</p>

<p>Door gebruik te maken van deze functie, kun je iets als volgt aan je
rc-bestanden toevoegen
(deze code is wat parano&iuml;de, maar beter op veilig spelen dan spijt
achteraf)


<tscreen><verb>
echo "Selecteren van de huidige modules..."
KERNELD=yes
VERSION=`kernel_version`
if [ -d "/lib/modules/$VERSION" ] ; then
  if [ -L /lib/modules/current ] ; then
    rm -f /lib/modules/current
  fi
  if [ ! -e /lib/modules/current ] ; then
    ln -s "$VERSION" /lib/modules/current
  else
    echo "FOUT: /lib/modules/current bestaat en is geen symbolische link."
    echo "       Het laden van een module kan onverwachte resultaten opleveren, misschien"
    echo "       zelfs in gegevensverlies resulteren. We zullen kerneld niet laden. Verwacht"
    echo "       hieronder veel fouten."
    KERNELD=no
  fi
else
  echo "FOUT:  /lib/modules/$VERSION niet gevonden."
  echo "       Kerneld kan niet worden gestart, modules zullen niet"
  echo "       automatisch worden geladen"
  echo "       Verwacht hierna veel foutmeldingen."
  KERNELD=no
fi

</verb></tscreen>
</p>

<p>
<tscreen><verb>

echo "Selecteren van de huidige kernel..."
VERSION=`kernel_version`
if [ -d /usr/src/linux-"$VERSION" ] ; then
  if [ -L /usr/src/linux ] ; then
    rm -f /usr/src/linux
  fi
  if [ ! -e /usr/src/linux ] ; then
    ln -s linux-"$VERSION" /usr/src/linux
  else
    echo "WAARSCHUWING: /usr/src/linux kan naar een andere kernel dan die waarvan we bootte"
    echo "              zijn gelinkt. Dit geeft mogelijk wat kleine verrassingen, maar"
    echo "              zou niet echt een probleem moeten zijn."
  fi
else
  echo "WARNING: /usr/src/linux-$VERSION niet gevonden. /usr/src/linux is wellicht niet"
  echo "         naar de huidige kernel gelinkt. Dit geeft mogelijk wat kleine verrassingen"
  echo "         maar zou niet echt een probleem moeten zijn."
fi

</verb></tscreen>
</p>

<p>Bovendien moet het bestand <file>/etc/conf.modules</file> aanwezig zijn en
op z'n minst de volgende informatie bevatten (soms wordt dit bestand
<file>modules.conf</file> genoemd):</p>

<p>Waar het dependency bestand kan worden gevonden
depfile=/lib/modules/current/modules.dep</p>

<p>Dit zijn de paths naar de modules specifiek voor de kernelversie
<itemize>
<item><tt>path[fs]=/lib/modules/current/fs</tt></item>
<item><tt>path[misc]=/lib/modules/current/misc</tt></item>
<item><tt>path[net]=/lib/modules/current/net</tt></item>
<item><tt>path[scsi]=/lib/modules/current/scsi</tt></item>
<item><tt>path[block]=/lib/modules/current/block</tt></item>
<item><tt>path[ipv4]=/lib/modules/current/ipv4</tt></item>
</itemize>
</p>

<p>Dit zijn de paths naar aanvullende modules die kernel onafhankelijk zijn:
<itemize>
<item><tt>path[fs]=/lib/modules/extra/fs</tt></item>
<item><tt>path[misc]=/lib/modules/extra/misc</tt></item>
<item><tt>path[net]=/lib/modules/extra/net</tt></item>
<item><tt>path[scsi]=/lib/modules/extra/scsi</tt></item>
<item><tt>path[block]=/lib/modules/extra/block</tt></item>
<item><tt>path[ipv4]=/lib/modules/extra/ipv4</tt></item>
</itemize>
</p>

<p>Dit zijn de paths naar modules die tijdens het booten voor alle
kernelversies worden ingevoegd.
Door het maken van symbolische links naar ../current/...
kun je nog steeds verschillende modules voor verschillende kernels laden.
<itemize>
<item><tt>path[boot]=/lib/modules/boot</tt></item>
</itemize>
</p>

<p>Dit zijn de paths naar modules die tijdens het booten voor specifieke
kernels worden ingevoegd.
<itemize>
<item><tt>path[boot]=/lib/modules/current/boot</tt></item>
</itemize>
</p>

<p>Om er zeker van te zijn dat dit schema werkt, moet je voorzichtig zijn bij
het compileren van een nieuwe kernel:
<itemize>
<item>Verzeker je ervan dat de combinatie van het release en compilatienummer
uniek is. Je kunt het compilatienummer instellen door het 
nummer_min_&eacute;&eacute;n in &lt;Kernel-base&gt;/.version in te voeren
(verwijder dit bestand om nummer 1 te gebruiken).</item>
<item>Plaats iedere kernel-structuur in de directory <tt>/usr/src/VERSION</tt>. 
Wees voorzichting wanneer je een nieuwe kernel-structuur vanuit een tarball
uitpakt, aangezien het wordt uitgepakt in de directory linux en mogelijk een
oude kernel-structuur overschrijft!
Over het algemeen werkt dit voor mij:</item>
</itemize>

<tscreen><verb>
# Overtuig jezelf ervan dat niemand iets aan het compileren is!
cd /usr/src
rm linux
tar zxfv /tmp/linux-2.0.34.tar.gz
mv linux linux-2.0.34-1
ln -s linux-2.0.34-1 linux
echo 0 > linux/.version
# echo er altijd &eacute;&eacute;n minder dan het compileernummer aan .version!
</verb></tscreen>
</p>
    
<p>Of, als de structuur reeds beschikbaar is:


<tscreen><verb>
cd /usr/src
cp -a linux-2.0.34-1 linux-2.0.34-2
ln -sn linux-2.0.34-2 linux
cd linux
make mrproper
# in .version zou het juiste nummer moeten staan na de laatste compilatie; het is beter
# hier zeker van te zijn!
echo 1 > .version
</verb></tscreen>
</p>   

<p>Na het aanroepen van module_install, hernoem je <tt>/lib/modules/RELEASE</tt>
in <tt>/lib/modules/VERSION</tt> (RELEASE is hierbij het kernel release nummer),
of gebruik je de hieronderstaande kleine patch:


<tscreen><verb>
*** /tmp/linux/Makefile Wed Feb  4 19:41:45 1998
--- linux/Makefile      Wed Feb  4 20:04:45 1998
***************
*** 275,279 ****
  modules_install:
        @( \
!       MODLIB=/lib/modules/$(VERSION).$(PATCHLEVEL).$(SUBLEVEL); \
        cd modules; \
        MODULES=""; \
--- 275,279 ----
  modules_install:
        @( \
!       MODLIB=/lib/modules/$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)-`cat .version`; \
        cd modules; \
        MODULES=""; \
</verb></tscreen>
</p>
</sect>

<sect><heading>Copyright en disclaimer</heading>
<p>
Dit document valt onder het copyright (c) 1998 door Frodo Looijaard
(<htmlurl url="mailto:frodol@dds.nl" name="frodol@dds.nl">).
Je mag het vrij kopi&euml;ren en distribueren, zolang je mij als de auteur
erkent, en enige wijzigingen als die van jezelf markeert, en hier een melding
van mee distribueert.</p>

<p>Dit document wordt gedistribueerd in de hoop dat het van nut zal zijn, maar
zonder enige garantie. Als de hierin gevolgde leidraads je systeem opblazen,
zal ik er niet aansprakelijk voor worden gesteld.</p>
</sect>
</article>
</linuxdoc>