Mdev

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Mdev and the translation is 85% complete.
Outdated translations are marked like this.


Questo articolo documenta la sostituzione di udev con mdev su Linux, permettendo quindi una partizione /usr separata, senza initramfs. L'autore utilizza Gentoo Linux con IceWM per gestore delle finestre. Le istruzioni qui presentate dovrebbero essere, con minori cambiamenti, applicabili ad altre distribuzioni.

mdev is a udev replacement from Busybox, it populates and updates /dev (official docs). Replacing eudev or udev is non-trivial, and is probably most adapted to embedded systems.

mdev funzionerà sul mio sistema?

L'uso di mdev è sicuramente possibile, a patto che il sistema non usi un ambiente desktop completo. Si noti che non è necessario un ambiente desktop per eseguire AbiWord, Firefox, GIMP, Gnumeric, ecc. Tuttavia, applicazioni di KOffice come KMail sembrano richiedere la maggior parte di KDE come dipendenza. In generale, quando si usa KDE o GNOME, mdev non è una scelta funzionale. Inoltre usare LVM potrebbe essere problematico.

Funziona bene quando si usano i profili predefiniti di Gentoo:

  • default/linux/x86/13.0
  • default/linux/amd64/13.0

Elenca il profilo attualmente in uso tramite il seguente comando:

user $eselect profile list
Current /etc/portage/make.profile symlink:
  default/linux/amd64/13.0
Nota
Versioni recenti di evdev (come da x11-drivers/xf86-input-evdev) e www-client/chromium richiedono udev. Non si compilano senza di esso.

C'è un ulteriore analisi che gli utenti di Gentoo possono eseguire per verificare la dipendenza da udev.

Sanity check

Ottenere un resoconto generale di quali pacchetti potrebbero dipendere da udev. L'uscita dovrebbe essere simile alla sottostante:

user $equery d udev
 * These packages depend on udev:
media-libs/mesa-9.0.1 (gbm ? virtual/udev)
sys-apps/hwids-20130329 (udev ? >=virtual/udev-197-r1)
sys-apps/util-linux-2.22.2 (udev ? virtual/udev)
virtual/dev-manager-0 (virtual/udev)
x11-base/xorg-server-1.13.4 (udev ? >=virtual/udev-150)
x11-drivers/xf86-video-intel-2.20.13 (udev ? virtual/udev)
x11-libs/cairo-1.10.2-r3 (drm ? >=virtual/udev-136)

Aggiungere la seguente linea al documento /etc/portage/package.mask/mdev (che può essere creato se ancora non esiste):

FILE /etc/portage/package.mask/mdevMask away udev
sys-fs/udev

Disabilitare l'opzione USE udev globalmente in /etc/portage/make.conf:

root #euse -D udev

Ricostruire tutti i pacchetti con la nuova opzione USE -udev

root #emerge -uDNvp @world

Se l'unico errore che appare riguarda l'inabilità di portage di reinstallare udev in quanto richiesto da virtual/dev-manager, procedere alla seconda fase. Altrimenti, sys-fs/udev potrebbe essere una dipendenza stretta di uno o più pacchetti installati sul sistema.

Software che richiede ulteriori passaggi

Blob binari ATI/AMD

Alcune schede ATI/AMD Radeon richiedono blob binari. il pacchetto di Gentoo sys-firmware/radeon-ucode ottiene tutti i blob binari disponibili a http://people.freedesktop.org/~ag5f/radeon_ucode/ per supportare molti modelli diversi.

Con tutti i blob binari nella cartella della libreria, il kernel richiede udev per scoprire quale caricare. Se tutti tranne uno vengono rimossi, lasciando solo quello corretto nella cartella della libreria, il blob binario è caricato automaticamente.

Sostituire udev con mdev

Attenzione
Questa è una fase critica, che potrebbe risultare in un sistema Linux non avviabile. Procedere solo se le istruzioni precedenti non hanno mostrato ulteriori dipendenze da udev.

Ipostare il kernel per devtmpfs

Impostare il kernel per supportare e montare automaticamente un filesystem devtmpfs a /dev:

KERNEL Enabling devtmpfs
Device Drivers --->
    Generic Driver Options --->
        [*] Maintain a devtmpfs filesystem to mount at /dev
        [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs

Dopo che i cambiamenti sono stati applicati, ricostruire il kernel. NON eseguire già il riavvio.

Emergere busybox

Accertarsi che l'opzione USEmdev è impostata per sys-apps/busybox. L'opzione USE static è possibilmente un'altra buona idea. Nel documento /etc/portage/package.use/mdev, aggiungere la seguente linea:

FILE /etc/portage/package.use/mdev
sys-apps/busybox static mdev

Ora, (re)installare busybox:

root #emerge --ask --oneshot busybox

Montare devpts

Il filesystem devpts mostra un comportamento insolito. Non viene monstato automaticamente, all'avvio, o con mount -a. Un comando mount devpts esplicito è richiesto. La soluzione solita per sistemi basati su udev è di eseguire rc-update add udev-mount sysinit come root, e di avere lo script udev-mount per montare all'avvio. Un sistema basato mdev probabilmente non avrà udev installato. Un modo alternativo di far cià all'avvio è includere il comando mount devpts in uno script shell in /etc/local.d/. In questo esempio il file verrà chiamato /etc/local.d/000.start

Un altro effetto collaterale del non utilizzo di udev-mount è l'aver /dev/shm scrivibile solo da root. Il comando chmod 1777 /dev/shm è richiesto per ripristinarne il normale comportamento. Anche questo comando verrà eseguito dallo script all'avvio.

FILE /etc/local.d/000.startMountaggio di devpts all'avvio e cambiamento dei permessi di /dev/shm
#!/bin/bash
mount devpts
chmod 1777 /dev/shm
Nota
Gli script usati in /etc/local.d/
  • devono essere eseguibili
  • devono avere l'estensione ".start" per essere eseguiti all'avvio
  • devono avere l'estensione ".stop" per essere eseguiti allo spegnimento

Sostituire il servizio mdev

Rimuovere udev dalla lista dei servizi e sostituirlo com mdev:

root #rc-update del udev sysinit
root #rc-update add mdev sysinit

Riavvio

Riavviare il nuovo kernel. Il sistema dovrebbe ora essere in esecuzione utilizzando mdev.

Pulizia

Rimuovere udev dal sistema:

root #emerge --unmerge sys-fs/udev

Nel documento /etc/portage/package.mask (od in un documento in questa cartella), aggiungere sys-fs/udev

Questo risulterà in una macchina completamente libera da udev.

Impostare una stampante USB eseguita sotto CUPS

Rendere 'find' disponibile al primo tempo di avvio

root #cd /bin
root #ln -s /bin/busybox find

Ricostruire il kernel

Per far si che libusb (e di conseguenza CUPS) veda le porte USB, impostare CONFIG_USB_DEVICE_CLASS=y e CONFIG_USB_DEVICEFS=y nella configurazione del kernel. Inoltre abilitare CONFIG_USB_PRINTER=y, anche se l'ebuild di cups-1.5.2 la disabilita. Quando si utilizza make menuconfig, questi oggetti si trovano qui:

KERNEL Enabling generation of USB devices at boot time
Device Drivers --->
    [*] Support for Host-side USB
      [*] USB device filesystem [DEPRECATED]
      [*] USB device class-devices [DEPRECATED]
    [*] USB Printer support
Nota
Non ci si preoccupi degli avvertimenti di deprecazione.

Configurare il nuovo kernel nel bootloader e riavviare in esso

Verificare la presenza dei nuovi nodi dei dispositivi

Una gerarchia di nodi dei dispositivi dovrebbe essere presente sotto /dev/bus/usb/. Quando si accende la stampante, dovrebbe apparire un nodo per essa a /dev/lp0. lsusb dovrebbe funzionare correttamente, e questo dovrebbe mostrare i dettagli della stampante.

Configurare la stampante in CUPS

Configurare la stampante in cups nel solito modo. CUPS dovrebbe trovare la stampante, e assegnarle un URI come parallel:/dev/lp0.

Risoluzione dei problemi

Moduli di Linux mancanti durante la sequenza di avvio

Se dei moduli di Linux sono richiesti ma non caricati all'avvio dopo la migrazione, eseguire una o più delle seguenti soluzioni:

  • Aggiungere i moduli di Linux ai documenti *.conf in /etc/modules-load.d/
  • Compilare i moduli nel kernel di Linux, senza richiederne il caricamento su richiesta.
  • Scrivere un caricatore di moduli personale:
FILE /sbin/hotplug
#!/bin/sh
test -n "$MODALIAS" && modprobe "$MODALIAS";
exec /sbin/mdev

Installarlo come il gestore di hotplug al posto di mdev. Notare che prima questo viene eseguito, meglio è. Considerare nominare questo script /sbin/hotplug, in quanto quello è il valore predefinito di /proc/sys/kernel/hotplug (o cambiare il valore predefinito nella configurazione del kernel).

Vari

Nota
Questa serie di istruzioni fu originariamente scritta da Walter Danes e presente sul suo sito personale. Fu inizialmente importata sulla wiki di Gentoo con alcune modifiche di Michael Mol per discuterne sulla mailing list degli utenti di Gentoo.
  • mdev al contrario di udev non supporta il caricamento automatico di moduli. Creare documenti terminanti in .conf in /etc/modules-load.d/ ed inserirvi tutti i moduli che dovrebbero essere caricati (nvidia, wl, ecc.) uno per linea. Personalizzare opzioni tramite documenti terminanti in .conf in /etc/modprobe.d (vedi man 5 modprobe.d per sintassi). Potrebbe essere necessario spostarvici la configurazione dei moduli.
  • mdev -s non crea nodi /dev/mapper. Crearli manualmente od usare dmsetup mknodes da lvm2. È una buona idea aggiungerlo dopo mdev -s nello script d'avvio.
  • Usare driver di mouse e tastiera per input di xorg. Evdev richiede udev per essere costruito. Mousedrv (per il driver del mouse) potrebbe entrare in conflitto con il driver synaptic quando entrambi sono caricati.
  • L'opzione di configurazione CONFIG_INPUT_EVDEV del kernel non solo fornisce mouse e tastiera come eventi di dispositivi d'input, ma anche eventi dell'apertura e di bottoni per acpid.

Vedi anche

Risorse esterne