<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-7" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
fs wrote:
<blockquote cite="midpan.2005.02.02.13.07.11.998745@www0.org"
type="cite">
<pre wrap="">Προσπαθώ να καταλάβω το boot process στα 2.6 με hotplug/udev και kmod,
και έχω τις εξής απορίες:
- γίνεται να κάνουμε log όποτε το kernel/kmod καλεί το modprobe;
</pre>
</blockquote>
export MODPROBE_OPTIONS="-v"<br>
<br>
...αλλά δεν κάνει log στο /dev/console.<br>
<blockquote cite="midpan.2005.02.02.13.07.11.998745@www0.org"
type="cite">
<pre wrap="">- log όποτε το kernel καλεί το hotplug;
</pre>
</blockquote>
Το hotplug είναι ένα σκριπτάκι και μάλιστα πολύ απλό... Δεν είναι
τίποτα να προσθέσεις κάτι σαν<br>
# logger "$*"<br>
για να δεις πως το καλεί ο kernel.<br>
<br>
<blockquote cite="midpan.2005.02.02.13.07.11.998745@www0.org"
type="cite">
<pre wrap="">
ως τώρα στο syslog βλέπω:
- όταν (και αν) kernel και modules κάνουν print κάτι στο /proc/kmsg (το
οποίο διαβάζει το klogd).
- όταν το udev φτιάχνει ή καταστρέφει συσκευές.
- μηνύματα από τα agents του hotplug.
</pre>
</blockquote>
<br>
Τι δεν μπορείς να καταλάβεις ακριβώς; Χοντρικά, όταν ένα σύστημα
ανεβαίνει, γίνονται τα εξής:<br>
<br>
- kernel structures initialization/device probing etc<br>
- execution of init<br>
Μέχρι εδώ ο kernel χρησιμοποιεί ένα ΣΤΑΤΙΚΟ /dev με τα standard device
nodes, όπως τα φτιάχνεις με το MAKEDEV generic. Αυτό χρειάζεται για να
έχεις το /dev/console και αλλα χρήσιμα device nodes ώστε να μπορεί να
τρέξει σωστά η init και το bash (το οποίο θα εκτελέσει τα startup
scripts μέχρι να αναλάβει το hotplug/udev).<br>
- Mount /proc, /sysfs<br>
- Mount tmpfs on /dev (άδειο, κρύβει το αρχικό /dev)<br>
- Population του /dev από το udevstart/coldplug: Το udevstart διαβάζει
όλο το /sysfs και φτιάχνει τα αντίστοιχα device nodes μέσα στο /dev (πχ
hda, hdc, tty*, null, zero, sound etc) ενώ το coldplug φτιάχνει τις hot
plug συσκευές που είναι πάνω στο host (πχ USB memory sticks -> sga,
sgb, netmod -> ttyACM0 etc). ΠΡΟΕΡΑΙΤΙΚΑ γίνεται restore όλου του
/dev από κάποιο tarball που περιέχει τα device nodes από το προηγούμενο
boot.<br>
- Continue with regular boot process (mount filesystems etc)<br>
<br>
Αυτό που διαφέρει από το παραδοσιακό στατικό /dev είναι ότι το /dev
αλλάζει δυναμικά όσο το σύστημα τρέχει. Οι αλλαγές δημιουργούνται κάπως
έτσι:<br>
<br>
device attached/removed -> detection by kernel -> identification
by kernel -> execution of /sbin/hotplug with appropriate arguments
-> execution of appropriate hotplug script (udev) ->
creation/deletion of device node in /dev<br>
<br>
Η διαφορά με το devfsd είναι ότι αυτό δεν γίνεται μέσα στον kernel,
αλλά από userspace process (που τρέχει σαν root).<br>
<br>
Τώρα τελευταία με το DBUS, υπάρχει και η δυνατότητα το νέο device να
εμφανίζεται μέσω του udev σε όλο το DBUS του συστήματος, να ανιχνεύεται
από τυχόν desktop applications που τρέχουν και αυτόματα να ξεκινούν
process, πχ :Κουμπώνω την usb camera -> udev creates device node and
notifies DBUS -> gnome/kde application detects camera, fires up
window and notifies user<br>
<br>
Τα παραπάνω ισχύουν για το gentoo, αλλά παρόμοια είναι η διαδικασία
φαντάζομαι και για τα υπόλοιπα είδη του οικοσυστήματος...<br>
<br>
<div class="moz-signature">-- <br>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-7">
<title>.signature.html</title>
<p><big>Antonis Valakas</big></p>
<span style="font-style: italic;">Systems Consultant</span><br>
Multiservice Networks - <span style="font-weight: bold;">Intracom SA<br>
</span>
<pre><span style="font-weight: bold;">email: avalak_at_intracom.gr</span></pre>
<pre><span style="font-weight: bold;"> www: <a class="moz-txt-link-abbreviated" href="http://www.intracom.gr">www.intracom.gr</a></span></pre>
<pre><span style="font-weight: bold;">
</span></pre>
</div>
</body>
</html>