Anpassungsmethode des Linux-Peripheriedateisystems

Anpassungsmethode des Linux-Peripheriedateisystems

Vorwort

Wenn wir von Linux-Systemen sprechen, meinen wir im Allgemeinen verschiedene Betriebssystemdistributionen, die auf dem Linux-Kernel und dem GNU-Projekt basieren. Um die Verwendung des Linux-Betriebssystems zu beherrschen, den Betriebsablauf des Linux-Betriebssystems zu verstehen, die Beziehung zwischen dem Kernel und dem Peripherie-Unterstützungssystem zu verstehen und mein Verständnis von Open Source-Betriebssystemen zu vertiefen, habe ich beschlossen, das Rad neu zu erfinden – ein Linux-Dateisystem selbst anzupassen.

Hierzu gibt es zwei Möglichkeiten:

Implementieren Sie init direkt selbst**\*(M1)***

Hardwareinformationen des BIOS laden -> MBR lesen –> Grub ausführen -> Kernel laden –> Treiber laden –> init –> bash ausführen

Verwenden Sie system/sbin/init**\*(M2)***

Laden Sie die Hardwareinformationen des BIOS -> Lesen Sie MBR –> Führen Sie Grub aus -> Laden Sie Kernel –> Laden Sie Treiber –> init –> /sbin/init -> Holen Sie sich Runlevel-Informationen -> /etc/rc.d/rc.sysinit -> Dienste –> /etc/rc.d/rc.local –> mingetty –> Login

Wählen wir zuerst *M1* aus.

Ideen

  • Kopieren Sie die benötigten Komponenten vom Originalsystem auf den neuen Speicher
  • Testen auf der RAM-Disk mit dem initrd.img-Mechanismus
  • Beginnen Sie mit dem Originaldateikernel und -modul

Schritt 1: Holen Sie sich die Shell-Version von initrd.img

Zunächst können wir ein Skript „init“ schreiben, damit der Kernel nach dem Start mit dem Dateisystem direkt eine Bash abrufen kann.


Skript init erstellen

Darunter: Das Verzeichnis /bin enthält häufig verwendete Befehle, init ist ein von Ihnen selbst geschriebenes Skript und das Verzeichnis /lib64 enthält die dynamischen Bibliotheken, von denen die Anwendung abhängt.

Init-Inhalt

Jetzt müssen wir die Befehlszeile verwenden, Bin- und Sbin-Verzeichnisse erstellen und grundlegende Befehle wie Bash, ls, rm, cp, mv, echo, cat, less usw. hinzufügen. Da diese Befehle auf einige dynamisch verknüpfte gemeinsam genutzte Bibliotheken in Verzeichnissen wie /lib64 angewiesen sind, müssen Sie die abhängigen Bibliotheken in das dem Minisystem entsprechende Verzeichnis kopieren und den Befehl ldd verwenden, um die Anwendung und ihre abhängigen dynamischen Bibliotheken abzufragen. Führen Sie nach Abschluss Folgendes aus:

finden . | cpio -H newc -o | gzip > /boot/initrd.img

Packen Sie das Root-Dateisystem in initrd.img und legen Sie es in das /boot-Verzeichnis. Das System führt init beim Start automatisch in initrd.img aus.

Nachdem Sie so viel Aufwand in die Generierung von initrd.img gesteckt haben, wie testen Sie nun die neu erstellte initrd.img? Sie müssen zum Testen einen Eintrag in die Startkonfigurationsdatei von Grub hinzufügen.

Titel CentOS 6 Mini
Wurzel (hd0,0)
kernel/vmlinuz-2.6.32-642.el6.x86_64
initrd /initrd.img

Nach dem Neustart werden die Startoptionen angezeigt.

Schritt 2: Vervollständigen Sie die Möglichkeit, das Originalsystem zu montieren

Um das ursprüngliche System zu mounten, müssen die Treibermodule, die für die Ausführung des ursprünglichen Systems erforderlich sind, in initrd.img geladen werden, z. B. der Treiber des ext4-Dateisystems, die zugehörigen Treiber des SCSI-Geräts usw. /sbin/modinfo arbeitet mit /sbin/insmod zusammen und der Treiber wird in /module abgelegt

Schritt 3: Vervollständigen Sie die Möglichkeit zur Geräteverwaltung (udev)

Die Verwendung von udevd, einem Dienstprogramm zum Verwalten und Überwachen von Hostgeräten, zum automatischen Laden der erforderlichen Treibermodule ist zuverlässiger, als dies selbst zu implementieren. Die udevd-Regeldatei befindet sich im Verzeichnis /lib/udev/ und die Konfigurationsdatei im Verzeichnis /etc/udev/. Gleichzeitig wird auch der in /etc/nsswitch.conf konfigurierte Name Service Switch benötigt. Die abhängige Bibliothek ist die Datei, die mit libnss im Verzeichnis /lib beginnt. Kopieren Sie die obigen Dateien in unser Verzeichnis und starten Sie dann den udevd-Dienst mit dem Befehl /sbin/start\_udev. (udevd muss einige andere Systembefehle aufrufen, wie etwa /sbin/modprobe, die mit strace verfolgt und abgerufen werden können).


Mini-Systemverzeichnisdatei

Das System speichert verfügbare Geräte im Verzeichnis /dev und /log ist die vom Befehl strace generierte Protokolldatei.

Schritt 4: Vervollständigen Sie die Anmeldefunktion

Da der Anmeldemechanismus relativ komplex ist und viele Aspekte wie Prozessverwaltungsmechanismus, Prozessgruppe, Konsole usw. umfasst, verwenden wir *M2*, um den Befehl /sbin/init in das kleine Systemverzeichnis zu kopieren und das Init-Skript in

#!/bin/bash
exec /sbin/init

Nachdem die Kontrolle an /sbin/init übergeben wurde, muss der Benutzer beim Systemstart warten, bis eine Reihe von Aufrufen abgeschlossen ist und die Anmeldeoberfläche aufgerufen wird, bevor er die Kontrolle wiedererlangen kann.

Der Prozess /sbin/init ist grob in drei Teile unterteilt: Der erste Teil besteht aus dem Laden des Treibermoduls durch udevd, der Überprüfung des Dateisystems und dem Root-Wechsel, und die entsprechende Konfiguration befindet sich in /etc/rc.sysinit; der zweite Teil besteht aus dem Starten verschiedener Dienste, und die entsprechende Konfiguration befindet sich im Verzeichnis /etc/rc.d/; der dritte Teil ist der Anmeldeteil, der den Aufruf von Befehlen wie /sbin/mingetty und /bin/login erfordert. Kopieren Sie die obigen Befehle und Dateien in das Verzeichnis, das dem kleinen System entspricht, und ändern Sie die Konfiguration.

Da initrd.img nach dem Start des Minisystems direkt als temporäres Root-Dateisystem im Speicher ausgeführt wird und unser Minisystem keinen Root-Wechsel durchführen muss, wird der Funktionshauptteil von remount_needed() in /etc/rc.sysinit auskommentiert, sodass kein Root-Wechsel erfolgt.

Da das System die neue Startmethode Upstart verwendet (das Programm /sbin/init wurde geändert und wird nun vom Upstart-Softwarepaket bereitgestellt), kopieren Sie die für den Upstart-Start relevanten Konfigurationsdateien in das Minisystemverzeichnis:

/etc/inittab konfiguriert den Standard-Runlevel
/etc/init/rcS.conf lädt das Skript rc.sysinit, um die Systeminitialisierung abzuschließen
/etc/init/rc.conf kompatibles Skript, verantwortlich für die Anrufverarbeitung jedes Runlevels
/etc/init/rcS-sulogin.conf startet die Umgebung /sbin/sushell für den Einzelbenutzermodus
/etc/init/control-alt-delete.conf Steuerterminal Hotkey-Bedienung Strg+Alt+Entf
/etc/init/start-ttys.conf konfiguriert die Anzahl der geöffneten TTY-Terminals und Gerätedateien
/etc/sysconfig/init steuert die Anzahl der offenen TTY-Terminals und das Terminal-Farbschema
/etc/init/tty.conf steuert das Öffnen von TTY-Terminals

Ändern Sie die Ausführungspriorität von bootmini/etc/inittab auf 2. Wenn das System dann startet, führt /sbin/init die Dateien aus, die mit S im Verzeichnis bootmini/etc/rc.d/rc2.d/ beginnen. Ändern Sie die Namen einiger Servicedateien, die nicht aktiviert werden müssen, so, dass sie mit K beginnen.

In der Datei bootmini/etc/rc.d/rc.local können Sie Vorgänge hinzufügen, die Benutzer benötigen und die nach dem Systemstart automatisch ausgeführt werden sollen.

Das Anmeldeprogramm basiert auf dem Authentifizierungssystem PAM. Die Konfigurationsdateien befinden sich im Verzeichnis /etc/pam.d/. Die zugehörigen Bibliotheksdateien sind /lib64/security/ und die davon abhängigen Bibliotheksdateien. Die Anmeldung umfasst auch die Benutzergruppenverwaltung /bin/chgrp, /bin/chown, /bin/chmod usw. Die Dateien, in denen Benutzernamen gespeichert werden, sind /etc/passwd und /etc/group, und die Benutzerkennwortdatei ist /etc/shadow. Einige weitere beteiligte Dateien können mit Hilfe von strace analysiert werden.

Ein komplettes Minisystem, das auf einer echten Maschine laufen kann

Einige Verzeichnisdateien:

/usw


/bin

/sbin

/usr/bin


/usr/sbin

An diesem Punkt kann davon ausgegangen werden, dass das Dateisystem ausgeführt wird. Im nächsten Artikel werden wir das Rad neu erfinden und den Linux-Kernel anpassen. Den tatsächlichen Maschineneffekt werden wir auch im nächsten Artikel sehen.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Anwendungsbeispiele für Arrays und assoziative Arrays in der Linux-Shell
  • Implementierungsmethode von Android zum Ausführen von Shell-Skripten im Linux-Terminal, um das Protokoll der aktuell ausgeführten App direkt auszudrucken
  • So führen Sie Linux-Befehlsprogramme remote und stapelweise mit pyqt aus
  • Verwendung der Zabbix-API in einer Linux-Shell-Umgebung
  • So stellen Sie versehentlich gelöschte Nachrichtendateien unter Linux wieder her
  • Zusammenfassung der Lösungen für allgemeine Linux-Probleme
  • Detaillierte Analyse des Linux-Kernel-Makros container_of
  • Linux wird geladen, vmlinux wird debuggt
  • Detailliertes Beispiel zum Ändern des Linux-Kontokennworts
  • So lassen Sie DOSBox nach dem Start automatisch Befehle ausführen

<<:  Analyse des Problems des Datenverlusts durch erzwungene Aktualisierung von Vuex

>>:  Detailliertes Beispiel für die Datenmigration bei einem IOS-Datenbank-Upgrade

Artikel empfehlen

MySQL-Trigger: Erstellen und Verwenden von Triggern

Dieser Artikel beschreibt anhand von Beispielen d...

XHTML-Erste-Schritte-Tutorial: Einfache Webseitenerstellung

Erstellen Sie Ihre erste Webseite in einer Minute...

Implementierung der Parametersprungfunktion im Vue-Projekt

Seitenbeschreibung:​ Hauptseite: Name —> shish...

So fügen Sie eine Festplatte in Vmware hinzu: Erweitern Sie die Festplatte

In diesem Artikel wird beschrieben, wie Sie eine ...

Detaillierte Erklärung der langsamen Remote-Verbindung von Navicat zu MySQL

Die endgültige Lösung ist im letzten Bild Wenn Si...

Detaillierte Erklärung zur Verwendung von HTML-Einbettungs-Tags und -Attributen

1. Grundlegende Grammatik Code kopieren Der Code ...

So erstellen Sie einen NFS-Dienst in Ubuntu 16.04

Einführung in NFS NFS (Network File System) ist e...

Nginx-Signalsteuerung

Einführung in Nginx Nginx ist ein leistungsstarke...

Detaillierte Anweisungen zur Installation der MySQL5.7-Datenbank unter Centos7.2

Das MySQL auf dem Server ist in der Version 8.0.1...

Schneller Einstieg in die Teleport-Komponenten und Verwendungssyntax von VUE 3

Inhaltsverzeichnis 1. Einführung in das Teleporti...

Detaillierte Erklärung der Docker-Einstiegspunktdatei

Schließen Sie beim Schreiben einer Docker-Datei e...

Detaillierte Erklärung zur Verwendung des Grep-Befehls in Linux

Linux-Grep-Befehl Mit dem Linux-Befehl grep könne...