Selbst erstellter Kernel: Fehler beim Mounten / dev: Kein solches Gerät

7

Ich versuche, einen Linux-Kernel (3.8.1) aus dem Quellcode in einer Fedora-Distribution zu installieren. Der Kernel ist ein Vanillekern. Ich folge den Build-Anweisungen des Kernels genau:

make menuconfig
make
sudo make modules_install install
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Alles /bootscheint in Ordnung zu sein. Ich kann sehen System.map, initramfsund vmlinuzfür den neu kompilierten Kernel. Der vmlinuzLink zeigt auf vmlinuz-3.8.1. Es sind mehrere andere Kernel installiert, einschließlich eines Ubuntu-Kernels. grub2 erkennt sie alle und ich kann zu jedem von ihnen booten.

Beim Neustart werden alle Kernel als Menüeinträge angezeigt und ich wähle 3.8.1.

Dann sehe ich diese Nachricht:

early console in decompress_kernel
decompressing Linux... parsing ELF ... done
Booting the kernel.
[1.687084] systemd [1]:failed to mount /dev:no such device
[1.687524] systemd [1]:failed to mount /dev:no such device

Lösung:

Alle drei veröffentlichten Antworten bieten die Lösung. CONFIG_DEVTMPFS hat das Problem tatsächlich verursacht. Ich habe das / boot / config-… eines funktionierenden Kernels als .config in das Stammverzeichnis des Quellbaums kopiert und die oben gezeigten Standardbefehle zum Erstellen des Kernels ausgeführt.

mfrank.23
quelle
1
Warum baust du so einen alten Kernel, übrigens?
Vonbrand
Es hängt von der eigenen Definition von alt ab. Ich würde zum Beispiel v2.6 als alt betrachten :-). Ich mache einige Tests zu Kernel-Datenstrukturen für Forschungszwecke. Diese Version war in meiner Hand, aber viele andere würden es gut machen.
mfrank.23

Antworten:

4

Der einfachste Weg, um eine funktionierende Kernelkonfiguration zu erhalten, besteht darin, Fedoras einfach zu kopieren .configund sie dann make oldconfigzu konfigurieren. Die Konfiguration finden Sie unter/boot/config-*

vonbrand
quelle
6

Sie müssen Ihren Kernel mit den folgenden Optionen konfigurieren :

Linux kernel >= 3.0
CONFIG_DEVTMPFS
CONFIG_CGROUPS (it's OK to disable all controllers)
CONFIG_INOTIFY_USER
CONFIG_SIGNALFD
CONFIG_TIMERFD
CONFIG_EPOLL
CONFIG_NET
CONFIG_SYSFS
CONFIG_PROC_FS
CONFIG_FHANDLE (libudev, mount and bind mount handling)

Linux kernel >= 3.8 for Smack support

Udev will fail to work with the legacy layout:
CONFIG_SYSFS_DEPRECATED=n

Legacy hotplug slows down the system and confuses udev:
CONFIG_UEVENT_HELPER_PATH=""

Userspace firmware loading is deprecated, will go away, and
sometimes causes problems:
CONFIG_FW_LOADER_USER_HELPER=n

Some udev rules and virtualization detection relies on it:
CONFIG_DMIID

Support for some SCSI devices serial number retrieval, to
create additional symlinks in /dev/disk/ and /dev/tape:
CONFIG_BLK_DEV_BSG

Optional but strongly recommended:
CONFIG_IPV6
CONFIG_AUTOFS4_FS
CONFIG_TMPFS_POSIX_ACL
CONFIG_TMPFS_XATTR
CONFIG_SECCOMP

For systemd-bootchart, several proc debug interfaces are required:
CONFIG_SCHEDSTATS
CONFIG_SCHED_DEBUG

For UEFI systems:
CONFIG_EFI_VARS
CONFIG_EFI_PARTITION

Note that kernel auditing is broken when used with systemd's
container code. When using systemd in conjunction with
containers, please make sure to either turn off auditing at
runtime using the kernel command line option "audit=0", or
turn it off at kernel compile time using:
CONFIG_AUDIT=n
Sciurus
quelle
3

Bei einem ähnlichen Problem auf einem benutzerdefinierten System, auf dem systemd ausgeführt wird, scheint dies möglicherweise darauf zurückzuführen zu sein, dass "CONFIG_DEVTMPFS" in der Kernelkonfiguration nicht ausgewählt ist (beachten Sie, dass dies das erste Element in der Liste der Kernelanforderungen von sciurus für die Ausführung von systemd ist).

Um nun herauszufinden, wie dies korrigiert werden kann, starten Sie make menuconfigund verwenden Sie die Suchfunktion (drücken Sie /), um nach "DEVTMPFS" zu suchen. Der erste Treffer ist:

Symbol: DEVTMPFS [=y]  
Type  : boolean  
Prompt: Maintain a devtmpfs filesystem to mount at /dev                                                  
  Location:                                            
    -> Device Drivers
(1)   -> Generic Driver Options   

Niedrig und siehe da, es gibt eine solche Option unter Gerätetreiber-> Generische Treiberoptionen .

Wie vonbrand sagt, beginnen Sie am besten mit einer Konfiguration, die Ihrer aktuellen Konfiguration entspricht. Dies kann wahrscheinlich als gezippt gefunden werden /proc/config.gz. Kopieren Sie das aus und gunzip -c config.gz > .configverwenden Sie diese Datei als vorläufige Datei .configin Ihrem Quellbaum (weitere Informationen finden Sie in Schritt 2 hier ).

Goldlöckchen
quelle