Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux
On se lasse de tout, sauf de comprendre.
Attribué à Virgile.
22 mars 2013 : Nouveau sujet. Page en construction.
Pour : linuxien un peu curieux.
Dans les premiers temps de linux, l'auto-montage des médias amovibles ne se pratiquait pas : il n'y avait pas de médias amovibles (à part les disquettes).
Puis vinrent les lecteurs de CD-ROMS et DVD. Et les PCMCIA, et les clés USB ...
Il a donc bien fallu s'en occuper, réaliser le montage automatique, signaler leur montage à l'utilisateur, aux autres applications.
Au démarrage de l'ordinateur, le chargeur de démarrage (lilo ou grub) décompresse l'image du noyau linux (vmlinuz) et charge ce dernier en mémoire. Il décompresse éventuellement une arborescence provisoire (initrd) et place celle-ci en mémoire (=ramdisk).
Le noyau démarre, éventuellement avec cette arborescence provisoire.
Le noyau détecte le matériel présent, charge les pilotes adéquats, initialise les périphériques.
La commande dmesg (ou le fichier /var/log/dmesg) permet de visualiser les messages du démarrage et donc le chargement des pilotes.
Voici, en résumé, ce qui est affiché :
Linux version 2.2.15-4mdkfb (chmou@kenobi.mandrakesoft.com) (gcc version 2.95.3 19991030 (prerelease)) #1 Wed May 10 15:00:49 CEST 2000
version du noyau avec quelques paramètres de compilation,
Detected 1094159385 Hz processor.
=fréquence du processeur détecté,
Console: colour dummy device 80x25
=type de console,
Calibrating delay loop... 2182.35 BogoMIPS
=benchmark en BogoMIPS,
Memory: 516888k/524224k available (1248k kernel code, 416k reserved, 5536k data, 136k init, 0k bigmem)
Dentry hash table entries: 65536 (order 7, 512k)
Buffer cache hash table entries: 524288 (order 9, 2048k)
Page cache hash table entries: 131072 (order 7, 512k)
=mémoire trouvée avec occupation,
VFS: Diskquotas version dquot_6.4.0 initialized
=le système virtuel accepte les quotas,
CPU: L1 I Cache: 64K L1 D Cache: 64K
CPU: L2 Cache: 512K
CPU: AMD AMD Athlon(tm) stepping 00
Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
=identification et caractéristiques du processeur,
mtrr: v1.35a (19990819) Richard Gooch (rgooch@atnf.csiro.au)
=Memory Type Range Register, Contrôle les accès du processeur à la mémoire
PCI: PCI BIOS revision 2.10 entry at 0xfb4a0
PCI: Using configuration type 1
=version du bus PCI,
PCI: Probing PCI hardware
PCI: Enabling memory for device 02:01
=démarrage de l'examen du bus PCI,
Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
TCP: Hash tables configured (ehash 524288 bhash 65536)
=le support de NET4 par le noyau, avec les protocoles,
Initializing RT netlink socket
=initialisation de l'interface noyau/espace utilisateur (netlink),
Starting kswapd v 1.5
=démarrage du démon de swap,
vesafb: framebuffer at 0xe4000000, mapped to 0xe0009000, size 65536k
vesafb: mode is 1024x768x16, linelength=2048, pages=41
vesafb: protected mode interface info at c000:5604
vesafb: scrolling: redraw
vesafb: directcolor: size=0:5:6:5, shift=0:11:5:0
Console: switching to colour frame buffer device 128x48
fb0: VESA VGA frame buffer device
=écran VESA et console,
Detected PS/2 Mouse Port.
=détection du port PS/2
Serial driver version 4.27 with MANY_PORTS MULTIPORT SHARE_IRQ enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
=détection des ports série ttyS0 et ttyS1
pty: 256 Unix98 ptys configured
=pseudo-terminal PTY
apm: BIOS version 1.2 Flags 0x07 (Driver version 1.12)
=support de APM,
Real Time Clock Driver v1.09
=pilote de l'horloge,
RAM disk driver initialized: 16 RAM disks of 4096K size
=initialisation du pilote RAM disk,
Uniform Multi-Platform E-IDE driver Revision: 6.30
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
PCI_IDE: unknown IDE controller on PCI bus 00 device 48, VID=10de, DID=0065
=pilote E-IDE, fréquence du bus IDE, contrôleurs IDE,
PCI_IDE: not 100% native mode: will probe irqs later
ide0: BM-DMA at 0xf000-0xf007, BIOS settings: hda:DMA, hdb:DMA
ide1: BM-DMA at 0xf008-0xf00f, BIOS settings: hdc:DMA, hdd:DMA
hda: WDC WD800BB-00CAA1, ATA DISK drive
hdc: TSSTcorpCD/DVDW SH-S182M, ATAPI CDROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: WDC WD800BB-00CAA1, 76319MB w/2048kB Cache, CHS=9729/255/63
=définition du disque dur (ATA) et du lecteur CD-ROM (ATAPI), irq correspondants,
FDC 0 is a post-1991 82077
=lecteur disquette,
md driver 0.90.0 MAX_MD_DEVS=256, MAX_REAL=12
raid5: measuring checksumming speed
raid5: MMX detected, trying high-speed MMX checksum routines
pII_mmx : 2537.460 MB/sec
p5_mmx : 3188.208 MB/sec
8regs : 1471.803 MB/sec
32regs : 1273.302 MB/sec
using fastest function: p5_mmx (3188.208 MB/sec)
=réseau de disques en RAID5,
scsi : 0 hosts.
scsi : detected total.
=détection hôtes SCSI
md.c: sizeof(mdp_super_t) = 4096
Partition check:
hda: hda1 hda2 < hda5 hda6 hda7 >
=mon partitionnement (entre crochets : partitions étendues)
autodetecting RAID arrays
autorun ...
... autorun DONE.
=détection RAID5, il n'y en a pas
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 136k freed
Adding Swap: 2097136k swap-space (priority -1)
=À ce point c'est presque fini avec le noyau et prêt à démarrer le système.
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
scsi : 1 host.
Vendor: TSSTcorp Model: CD/DVDW SH-S182M Rev: SB04
Type: CD-ROM ANSI SCSI revision: 02
Detected scsi CD-ROM sr0 at scsi0, channel 0, id 0, lun 0
sr0: scsi3-mmc drive: 48x/48x writer cd/rw xa/form2 cdda tray
Uniform CDROM driver Revision: 2.56
=détection du lecteur CD-ROM
Un pilote assure l'interface entre le matériel (disque dur, lecteurs, clavier, écran ...) et les programmes (système d'exploitation, applications).
Les pilotes peuvent être compilés directement dans le noyau mais, en général, ils se présentent sous la forme de modules du noyau. Ceci permet d'alléger ainsi le noyau.
Les modules existent, mais ne sont chargés que si le périphérique est effectivement détecté au moment du démarrage de l'ordinateur.
Avec les premières versions du noyau linux, ces modules étaient chargés d'une façon statique et, si un nouveau périphérique apparaît ou si l'un d'eux est enlevé, les modules correspondants n'étaient ni chargés, ni déchargés.
Linux possède une méthode permettant aux programmes d'accéder facilement au matériel : chaque périphérique est traité comme un fichier :
chaque périphérique possède une entrée (nœud) dans le système de fichiers et ces entrées peuvent être utilisées par les applications de l'espace utilisateur pour communiquer avec le périphérique.
Vous pouvez, par exemple, visualiser le début du contenu (brut) d'une disquette ou d'un disque dur, avec la commande less (visualiser un fichier texte page par page) :
less -f /dev/fd0 ou less -f /dev/sda
Les périphériques peuvent généralement être répartis en deux grandes catégories :
En plus de son type, chaque fichier spécial de périphérique est caractérisé par deux nombres :
C'est le répertoire abstrait /dev/ qui contient ces fichiers spéciaux.
Avec les premières versions du noyau linux, ce répertoire était pré-rempli avec les fichiers de tous les périphériques potentiellement disponibles au moment de la création de la distribution linux. Il en résulte un nombre énorme de fichiers et la gestion des permissions des fichiers non utilisés peut consommer inutilement beaucoup de ressources (et de temps).
Par ailleurs, pour intégrer un nouveau périphérique, vous devez créer son entrée dans le répertoire /dev à l'aide de la commande mknode ou /dev/MAKEDEV
Un programme qui essaie de tester les périphériques effectivement présents, doit analyser tout le contenu du répertoire et ne doit pas tenir compte des fichiers qui produisent une erreur.
Comme indiqué ci-dessus, les périphériques sont détectés au démarrage de l'ordinateur et le pilote correspondant est chargé et initialisé. Il reste à monter (ou accrocher) le système de fichiers du périphérique sur l'arborescence générale pour pouvoir utiliser ces fichiers.
C'est la commande mount qui permet de monter les arborescences des périphériques et le fichier /etc/fstab (file systems table) indique comment et où le périphérique doit être monté.
Ce fichier est lu au démarrage de l'ordinateur et les périphériques indiqués sont ainsi montés dès le démarrage de l'ordinateur.
Mais, évidemment, ce montage automatique ne se produit qu'au démarrage. Les répertoires d'une disquette ou d'un CD-ROM insérés ultérieurement dans le lecteur ne seront pas montés dans l'arborescence.
C'est l'utilisateur qui doit le faire manuellement, par la suite, avec la commande mount (en root), avec les arguments adéquats :
mount -t vfat /dev/fd0 /mnt permet de monter une disquette sur le répertoire existant /mnt.
Les différentes versions de Mandrake, Mandriva et Mageia ont traité les médias amovibles de différentes façons, en fonction de l'évolution des techniques.
Ce paragraphe se contente d'énumérer les techniques utilisées. Les explications se trouvent dans la suite.
Linux assure le support des cartes PCMCIA depuis 1995, mais il y a plusieurs types de cartes et plusieurs systèmes de gestion.
Il faut distinguer les différentes versions des cartes PCMCIA :
Référence : http://www.bixnet.com/pccaandex.html
Au fil des différentes versions du noyau et donc des différentes versions des distributions, la gestion des cartes PCMCIA évolue (système externe, système noyau, PCMCIAutils).
Il faut installer le paquetage kernel-pcmcia-cs qui procure :
Il gère uniquement les PC Cards.
Le support des pilotes pcmcia est directement intégré aux les noyaux 2.4 et suivants, mais il faut également un paquetage pcmcia-cs qui, chez Mandrake, propose les outils nécessaires (cardmgr, cardctl, fichiers de configuration /etc/pcmcia/*).
Le pilote yenta_socket gère également CardBus Cards
Comment savoir si le noyau est correctement configuré ?
grep CONFIG_PCMCIA /boot/config (m ou y)
grep CONFIG_HOTPLUG /boot/config (y)
grep CONFIG_CARDBUS /boot/config (y)
Ceci est le cas avec Mandrake.
Le démon cardmgr surveille l'insertion ou le retrait d'une carte PCMCIA.
Le paquetage hotplug est également nécessaire.
http://www-uxsup.csx.cam.ac.uk/pub/doc/suse/sles9/adminguide-sles9/ch16.html
http://librairie.immateriel.fr/fr/read_book/9782815000963/e9782815000963_c19
http://www.tldp.org/HOWTO/PCMCIA-HOWTO-4.html
http://c.laloy.free.fr/howtos/linux/linux_survie/05_portable_linux.php
http://people.canonical.com/~cjwatson/bzr/pcmciautils/ubuntu/doc/cardmgr-to-pcmciautils.txt
Supermount facilite le montage du système de fichiers d'un média amovible (disquette, CD)
Avec les Mandrake, les icônes des lecteurs de disquette et de CD sont toujours présentes sur le bureau, mais si les lecteurs sont vides, ces icônes ne permettent aucune action.
Après l'insertion d'un CD ou d'une disquette,
Il est possible de sortir le CD avec le bouton du lecteur sans provoquer de plantage.
Un clic sur l'icône d'un lecteur vide ouvre le gestionnaire. Celui-ci cherche longuement le contenu, puis délivre un message d'erreur.
Supermount est un pseudo système de fichiers qui monte et démonte les systèmes de fichiers des médias amovibles, tels que les disquettes et les CD-ROMs.
C'est un patch des noyaux 2.2 et 2.4 qui permet cette fonctionnalité. Mandrake intègre cette fonctionnalité depuis la version Mandrake 7.0 (14 janvier 2000) avec le noyau 2.2.14.
Comment savoir si supermount est installé ?
ls /lib/modules | grep supermount
C'est le noyau qui contient le module supermount. Il est automatiquement installé depuis Mandrake 7.0 jusqu'à Mandiva 2008.0.
Comment savoir si supermount est utilisé ?
grep 'supermount' /etc/fstab
Le répertoire /dev a plusieurs inconvénients. Sa taille est dissuasive (typiquement 1200 entrées). La gestion des codes majeurs et mineurs n'est pas facile, la gestion de la permission des fichiers non plus. Il fallait trouver un système plus souple : devfs.
Le système devfs, incorporé au noyau, est apparu avec les noyaux 2.4 (vers 2001).
Mandrake l'a intégré avec la version 8.0 (noyau 2.4.3).
Les divers fichiers des périphériques sont répartis dans des répertoires distincts, regroupant les périphériques de même type. Leur lisibilité et leur gestion sont alors facilitées. Ainsi, les périphériques IDE sont logés dans le sous-répertoire /dev/ide/ et les périphériques SCSI se retrouvent dans /dev/scsi/.
Devfs n'utilise plus les chiffres majeur/mineur mais désigne le périphérique par son nom. Il les garde simplement pour des raisons de compatibilité.
Il fournit uniquement à l'utilisateur les périphériques existants et complète l'arborescence de /dev, par exemple :
/dev/ide/hosts0/bus0/target0/lun0/disk
/dev/ide/hosts0/bus0/target0/lun0/part1
/dev/ide/hosts0/bus0/target0/lun0/part2
/dev/ide/hosts0/bus0/target0/lun0/part5
/dev/ide/hosts0/bus0/target0/lun0/part6
/dev/ide/hosts0/bus0/target0/lun0/part7
pour mon disque IDE, placé sur le premier slot IDE, en tant que maître, avec ses partitions.
Pour assurer la compatibilité avec l'ancien système, un démon devfsd crée des liens symboliques entre l'ancien système /dev et le système devfs, par exemple :
hda1 -> /dev/ide/hosts0/bus0/target0/lun0/part1
Devfs faisant partie du noyau est donc automatiquement installé lorsque le noyau est compilé avec :
Le paquetage devfsd est également nécessaire. Il est automatiquement installé.
Comment savoir si devfs est utilisé ?
cat /proc/filesystems | grep devfs pour savoir si le noyau est compilé avec devfs
mount | grep devfs pour savoir si devfs est monté
Au démarrage du noyau, les pilotes des périphériques commencent à enregistrer ces périphériques, avec le reste du système. Pour ceci, la noyau fait appel à une fonction du noyau : devfs_register().
Pour éviter les désagréments actuels et à venir, devfs n'utilise pas le principe des combinaisons Majeur/Mineur. Avec devfs, les connexions sont créées au moment où vous entrez dans le répertoire /dev. Lorsque l'on souhaite enregistrer un périphérique, une entrée dans une table interne est créée. Si cette entrée dans le cache ne possède pas encore de noeud, celui-ci est également créé. En revanche, si l'entrée est déjà présente dans le cache, aucune opération n'est nécessaire et, de ce fait, aucune recherche n'est effectuée. Dans ce cache ne se trouveront que des entrées pour des périphériques existants réellement sur votre système. Les recherches dans le cache seront donc rapides. Cette manière de procéder possède, en outre, un autre avantage intéressant. En effet, si un périphérique que vous savez présent dans la machine n'est pas listé dans /dev, c'est le signe d'un mauvais fonctionnement du périphérique ... Un autre avantage concerne les systèmes de fichier en lecture seule, comme certaines stations diskless. Le répertoire /dev n'ayant pas d'existant physique, vous pouvez modifier les permissions à loisir sur les noeuds. Un bel exemple est, bien sûr, un système GNU/Linux complet sur CD-Rom. Avec devfs, vous n'êtes plus obligés de passer par un ramdisk. Mais devfs va encore plus loin. Il est par exemple possible d'envoyer des messages au démon devfsd lors d'événements tels que l'ouverture ou la création d'une entrée. Il est ainsi possible d'associer des scripts à ces événements pour, par exemple, automatiquement monter un système de fichiers ou garder une trace de l'accès à un périphérique. http://www.freesoftwaremagazine.com/articles/drivers_linux
devfs_register()
Si le pilote du périphérique foo veut enregistrer ce périphérique avec devfs, il appelle la fonction devfs_register() avec un paramètre qui est foo0.
Le noyau sait ainsi qu'un nouveau périphérique existe dans l'espace de nommage de devfs et devfs_register ajoute le périphérique foo0 dans l'espace de nommage de devfs.
Une fois que tous les pilotes sont actifs et qu'ils ont enregistré les périphériques, le noyau lance le programme /sbin/init et les scripts d'initialisation sont exécutés. Assez au début du processus de démarrage, un script monte un système de fichiers devfs sur le répertoire /dev. Il contient une représentation de l'espace de nommage de devfs.
Il en résulte que, une fois que /dev est monté, tous les périphériques enregistrés (tels que notre foo0 ci-dessus) peuvent être accédés de la même façon que sur un système non-devfs.
Lorsqu'il y a un accès vers un périphérique, le noyau dialogue avec le pilote approprié par le nom devfs du périphérique et non par le numéro majeur.
L'intérêt de ce système est que tous les nœuds de périphériques sont automatiquement créés et rien que ceux qui sont nécessaires. Il n'est plus nécessaire d'en créer manuellement mais, en plus, le répertoire /dev n'est plus encombré par des centaines de nœuds inutiles.
Hotplug vous permet de brancher un nouveau périphérique et de l'utiliser immédiatement.
Initialement, il intègre la gestion de USB et de PCI (CardBus) et il permet la configuration automatique des interfaces réseau.
Source : http://linux-hotplug.sourceforge.net/
Démarrant avec le noyau 2.4, hotlpug devient une caractéristique standard de Linux. Le noyau 2.6 le rend disponible pour tous les bus selon sysfs.
Avec hotplug, inutile de connaître les commandes d'administrateur, il configure automatiquement les périphériques. Des versions plus récentes incluent également IEEE 1394 (Firewire) et peuvent même télécharger des firmwares pour périphériques USB.
Sysfs est un système de fichiers virtuel introduit par le noyau Linux 2.6. Sysfs permet d'exporter depuis l'espace noyau vers l'espace utilisateur des informations sur les périphériques du système et leurs pilotes, et est également utilisé pour configurer certaines fonctionnalités du noyau.
Hotplug vous permet d'insérer un nouveau périphérique et de l'utiliser immédiatement. Il fonctionne pour les ports USB, les bus PCI (cardbus), il peut également configurer automatiquement certaines interfaces réseau. Les versions plus récentes intègrent IEEE 1394 (Firewire) peuvent télécharger des firmwares relatifs aux périphériques USB.
Il a été introduit avec le noyau 2.4 (janvier 2001) et rétro-porté au noyau 2.2 pour la prise en compte de USB. Le noyau 2.6 étend la fonctionnalité à tous les bus et pilotes pris en charge par sysfs.
Comment savoir si hotplug est utilisé ?
rpm -qa | grep 'hotplug'
Mandrake 7.1 intègre supermount pour /mnt/floppy et /mnt/cdrom selon /etc/fstab.
Il n'y a pas encore de hotplug ni devfs.
Le clic sur l'icône fonctionne correctement, tant à l'introduction du CD que pour un CD présent au démarrage du système.
Un périphérique USB n'est pas vu par le système.
Le noyau est kernel-2.2.17.
La gestion de PCMCIA est assurée par l'installation du paquetage kernel-pcmcia-cs.
Le noyau est kernel-2.4.3.
La gestion de PCMCIA est assurée par l'installation du paquetage kernel-pcmcia-cs.
Le noyau est kernel-2.4.8.
La gestion de PCMCIA est assurée par l'installation du paquetage kernel-pcmcia-cs. ???
Le noyau est kernel-2.4.18.
La gestion de PCMCIA est assurée directement par le paquetage du noyau.???