Inhaltsverzeichnis
1. Root-Dateisystem" >1. Root-Dateisystem
2. Haupt-Root-Dateisystem" >2. Haupt-Root-Dateisystem
3.Ramdisk-Produktion" >3.Ramdisk-Produktion
4.Cramfs制作" >4.Cramfs制作
5.其他根文件系统的制作" >5.其他根文件系统的制作
6.BusyBox编译制作" >6.BusyBox编译制作
Heim System-Tutorial LINUX Geheimnisse des Linux-Root-Dateisystems

Geheimnisse des Linux-Root-Dateisystems

Feb 15, 2024 pm 01:42 PM
linux linux教程 linux系统 linux操作系统 linux命令 shell脚本 eingebettetes Linux Erste Schritte mit Linux Linux-Lernen

Linux ist ein tragbares, anpassbares Open-Source-Betriebssystem, das in verschiedenen Bereichen wie Servern, Desktops, eingebetteten Geräten usw. weit verbreitet ist. Der Kern von Linux ist der Kernel, der für die Verwaltung der Hardwareressourcen und die Bereitstellung grundlegender Dienste verantwortlich ist. Der Kernel ist jedoch keine unabhängige Einheit und benötigt ein Dateisystem, um verschiedene Daten und Programme zu speichern und darauf zuzugreifen. Ein Dateisystem ist eine Methode zum Organisieren und Verwalten von Dateien. Es definiert den Namen, den Speicherort, die Attribute, Berechtigungen und andere Informationen der Datei. Unter Linux gibt es viele verschiedene Arten von Dateisystemen, wie z. B. ext4, xfs, btrfs usw., von denen jedes seine eigenen Eigenschaften und Vorteile hat. Unter allen Dateisystemen gibt es jedoch ein spezielles Dateisystem, das die Grundlage und den Kern des Linux-Systems bildet, nämlich das Root-Dateisystem (rootfs). Was ist also das Root-Dateisystem? Was tut es? Wie wird es erstellt und verwaltet? In diesem Artikel werden die Fragen unter folgenden Gesichtspunkten beantwortet:

Geheimnisse des Linux-Root-Dateisystems

1. Root-Dateisystem

Ein Dateisystem ist eine Verzeichnisstruktur, die in einer Festplatte (einschließlich optischer Festplatten, Disketten, Flash-Festplatten und anderen Speichergeräten) enthalten ist. Ein entsprechendes Festplattengerät kann ein oder mehrere Dateisysteme enthalten , Als Erstes müssen Sie das Dateisystem mounten. Um das Dateisystem zu mounten, müssen Sie einen Mountpunkt angeben.

Hinweis: Für unsere Anwendungsentwicklung stellt der Hersteller beim Kauf eines Entwicklungsboards ein vorgefertigtes Root-Dateisystem und BootLoader zur Verfügung. Bei Bedarf können wir die Befehle ändern, ohne ein neues Root-Dateisystem zu erstellen. Der Produktionsprozess hier kann uns jedoch ein tieferes Verständnis des Linux-Dateisystems vermitteln.

2. Haupt-Root-Dateisystem

* Unter Linux ist rootfs unerlässlich. Der PC implementiert hauptsächlich Ramdisk und mountet das Root-Dateisystem im Allgemeinen nicht von HD, sondern von Flash. Die einfachste Methode besteht darin, Rootfs in die RAMDisk zu laden Eine besteht darin, Cramfs direkt aus Flash zu lesen, und die kompliziertere Möglichkeit besteht darin, auf Flash zu partitionieren und ein Dateisystem wie JFFS2 zu erstellen.

* RAMDisk komprimiert die vorbereiteten Rootfs und schreibt sie in Flash. Beim Start lädt der Bootloader sie in den RAM, dekomprimiert sie und mountet sie dann in /. Diese Methode ist einfach zu bedienen, aber das Dateisystem im RAM ist nicht komprimiert und erfordert daher RAM, eine knappe Ressource in vielen eingebetteten Systemen.

ramdisk verwendet Speicherplatz, um Festplattenpartitionen zu simulieren und wird während der Systeminitialisierung im SDRAM gespeichert. In Linux-Systemen gibt es zwei Arten von ramdisk: Zum einen kann es formatiert und geladen werden und wird bereits im Linux-Kernel 2.0/2.2 unterstützt. Das andere ist, dass die Größe nur vom 2.4-Kernel unterstützt wird und nicht über ramfs implementiert werden kann Aber es ist einfach zu verwenden und seine Größe vergrößert oder verkleinert sich je nach benötigtem Speicherplatz. Es handelt sich derzeit um eine häufig verwendete Ramdisk-Technologie.

* initrd ist das Format von RAMDisk. Mit image-initrd wurde in Kernel 2.5 cpio-initrd eingeführt, was den Linux-Startvorgang erheblich vereinfachte und der Grundphilosophie von Linux entsprach: Keep it simple, dump (KISS). Allerdings wurde cpio-initrd als neues Format hauptsächlich in eingebettetem Linux verwendet.

* Cramfs ist ein sehr einfaches Dateisystem, das von Linus geschrieben wurde. Es verfügt über eine gute Komprimierung und kann auch direkt aus Flash ausgeführt werden, ohne in den RAM zu laden, wodurch RAM gespart wird. Allerdings ist Cramfs schreibgeschützt, was für Verzeichnisse, die zur Laufzeit geändert werden müssen (z. B. /etc, /var, /tmp), unpraktisch ist. Daher werden diese Verzeichnisse im Allgemeinen in beschreibbare FS umgewandelt, z. B. ramfs.

* SquashFS ist eine Erweiterung zu Cramfs. Es durchbricht einige Einschränkungen von Cramfs und bietet auch Vorteile hinsichtlich der Flash- und RAM-Nutzung. Den Entwicklern zufolge ist es jedoch hinsichtlich der Leistung möglicherweise nicht so gut wie Cramfs. Dies ist auch ein neuer Ansatz, der vor der Einführung in eingebetteten Systemen weitere Tests erfordert.

3.Ramdisk-Produktion

So erstellen Sie eine RAMDisk:
(1) Generieren Sie in der Linux-Betriebssystemumgebung des PCs eine Datei, die in ein Blockgerät virtualisiert werden kann. Gehen Sie davon aus, dass der Dateiname init.img lautet.

$ dd if=/dev/zero of=init.img bs=4096 count=1024
Nach dem Login kopieren

wobei bs*count die Blockgerätegröße ist (Einheit: Bytes). Nach dem Generieren der init.img-Datei muss die Datei auch formatiert werden.

$ mke2fs –m0 –F init.img
Nach dem Login kopieren

(2) Erstellen Sie einen neuen Ordner ram und hängen Sie init.img an das ram-Verzeichnis an.

$ mkdir ram
$ mount init.img ram/ -o loop
Nach dem Login kopieren

这时,读写ram目录,等效于读写init.img文件。用户可以将根文系统所需的文件写入到ram目录中。往ram目录写完文件以后,还需要使用umount ram命令卸载init.img,才能将已写入的文件保存到init.img中。

(3)添加完毕,需要umount ram

4.Cramfs制作

CramFS(Compressed Rom File System)是Linux Torvalds在Transmeta任职时,所参与开发的文件系统。它是针对Linux内核2.4之后的版本所设计的一种新型只读文件系统,采用了zlib 压缩,压缩比一般可以达到1:2,但仍可以作到高效的随机读取,Linux系统中,通常把不需要经常修改的目录压缩存放,并在系统引导的时候再将压缩文件 解开。因为Cramfs不会影响系统的读取文件的速度,而且是一个高度压缩的文件系统。因此非常广泛应用于嵌入式系统中。

在嵌入式的 环境之下,内存和外存资源都需要节约使用。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先要把Flash上的映像文件解压缩到内存 中,构造起RAMDISK环境,才可以开始运行程序。但是它也有很致命的弱点。在正常情况下,同样的代码不仅在Flash中占据了空间(以压缩后的形式存 在),而且还在内存中占用了更大的空间(以解压缩之后的形式存在),这违背了嵌入式环境下尽量节省资源的要求。

使用CramFS文件 系统就是一种解决这个问题的方式。CramFS是一个压缩格式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需 要访问某个位置的数据的时候,马上计算出该数据在CramFS中的位置,将它实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数 据。CramFS中的解压缩以及解压缩之后的内存中数据存放位置都是由CramFS文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方 式增强了透明度,对开发人员来说,既方便,又节省了存储空间。

但是Cramfs也有其缺点:延迟、小于16MB、不支持写,只支持PAGE_CREATE_SIZE=4096的内核。

制作的命令:(root文件夹中存放着文件系统)

#mkcramfs root cramfs.img
Nach dem Login kopieren

5.其他根文件系统的制作

制作yaffs文件系统: mkyaffsimage myroots myroots.img
制作squashfs: mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments –noI
Nach dem Login kopieren

6.BusyBox编译制作

建立目标板空根目录文件夹及根目录下的文件夹:

[root@190 friendly-arm]# mkdir myroots
[root@190 friendly-arm]#pwd
/friendly-arm/myroots
[root@190 friendly-arm]#cd myroots
[root@190 myroots]# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var
[root@190 myroots]# mkdir etc/init.d
Nach dem Login kopieren

进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:

#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
trap ":" INT QUIT TSTP
Nach dem Login kopieren

创建 dev 中的节点
如果使用“linux 2.6.xx”的内核,应该事先创建节点“console”、“null”。否则在系统启动时内容会提示以下错误:

Warning: unable to open an initial console.
Kernel panic - not syncing: Attempted to kill init!
Nach dem Login kopieren

创建节点的命令如下:

# mknod dev/console c 5 1
# mknod dev/null c 1 3 移植Busybox:
Nach dem Login kopieren

进入到压缩文件存放的目录下,并解压。然后进入解压后的busybox目录文件夹,随后配置busybox 。

[root@190 busybox-1.2.0]# make menuconfig
Nach dem Login kopieren

由于每个版本的配置选项组织有所不同。不管怎样,我们注意以下选项就行了:

1) Support for devfs
2) Build BusyBox as a static binary ( no shared libs ) //将busybox编译成静态链接
3) Do you want to build busybox with a Cross Compile?
(/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix //指定交叉编译器
4) init
5) Support reading an inittab file //支持init读取/etc/inittab 配置文件
6) (X) ash选中ash //建立的rcS脚本才能执行
7)ash
8)cp cat ls mkdir mv //可执行命令工具的选择,自己看着办吧,需要用到的就选上
9) mount
10) umount
11) Support loopback mounts
12) Support for the old /etc/mtab file
13) insmod
14) Support version 2.2.x to 2.4.x Linux kernels
15) Support version 2.6.x Linux kernels
16) vi
17)don’t use user
Nach dem Login kopieren

以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有问题。
配置好之后,保存退出。然后对其编译和安装到刚才建立的根文件系统目录下:

[root@190 busybox-1.2.0] make TARGET_ARCH=arm CROSS=arm-linux- \ PREFIX=/friendly-arm/myroots/ all install
Nach dem Login kopieren

安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下:
拷贝一些管理员控制程序到/sbin目录下,最重要的就是要包含一个init命令;
拷贝应用程序运行时所需要的库到/lib,库文件可以从PC机上的交叉编译工具安装目录下拷贝,如libc-2.2.2.so、libcryt-2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,为部分相应库建立快捷方式,提供一些应用程序按快 捷方式名称调用。值得注意的是C库要采用C库的版本glibc, glibc位于/lib/libc.so.6

Anhand der obigen Analyse können wir erkennen, dass das Root-Dateisystem ein wichtiger Teil des Linux-Systems ist. Es enthält wichtige Dateien und Verzeichnisse, die für den Start und Betrieb des Linux-Systems erforderlich sind. Das Root-Dateisystem wird normalerweise im Verzeichnis / (Root) gemountet und kann Mountpunkte für andere Dateisysteme enthalten. Root-Dateisysteme können verschiedene Arten von Dateisystemformaten verwenden und mit einer Reihe von Tools erstellt und verwaltet werden. Beispielsweise können wir den Befehl mkfs verwenden, um eine Partition oder ein Gerät als Root-Dateisystem zu formatieren, wir können den Befehl mount verwenden, um ein Root-Dateisystem zu mounten oder die Bereitstellung aufzuheben, und wir können den Befehl df verwenden, um die Nutzung einer Root-Datei anzuzeigen System usw. Kurz gesagt, das Root-Dateisystem ist das Geheimnis des Linux-Systems und bietet eine stabile und flexible Grundlage für das Linux-System.

Das obige ist der detaillierte Inhalt vonGeheimnisse des Linux-Root-Dateisystems. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So öffnen Sie Web.xml So öffnen Sie Web.xml Apr 03, 2025 am 06:51 AM

Um eine Web.xml -Datei zu öffnen, können Sie die folgenden Methoden verwenden: Verwenden Sie einen Texteditor (z.

Vier Möglichkeiten zur Implementierung von Multithreading in C -Sprache Vier Möglichkeiten zur Implementierung von Multithreading in C -Sprache Apr 03, 2025 pm 03:00 PM

Multithreading in der Sprache kann die Programmeffizienz erheblich verbessern. Es gibt vier Hauptmethoden, um Multithreading in C -Sprache zu implementieren: Erstellen Sie unabhängige Prozesse: Erstellen Sie mehrere unabhängig laufende Prozesse. Jeder Prozess hat seinen eigenen Speicherplatz. Pseudo-MultitHhreading: Erstellen Sie mehrere Ausführungsströme in einem Prozess, der denselben Speicherplatz freigibt und abwechselnd ausführt. Multi-Thread-Bibliothek: Verwenden Sie Multi-Thread-Bibliotheken wie PThreads, um Threads zu erstellen und zu verwalten, wodurch reichhaltige Funktionen der Thread-Betriebsfunktionen bereitgestellt werden. Coroutine: Eine leichte Multi-Thread-Implementierung, die Aufgaben in kleine Unteraufgaben unterteilt und sie wiederum ausführt.

Wofür wird der Linux am besten verwendet? Wofür wird der Linux am besten verwendet? Apr 03, 2025 am 12:11 AM

Linux wird am besten als Serververwaltung, eingebettete Systeme und Desktop -Umgebungen verwendet. 1) In der Serververwaltung wird Linux verwendet, um Websites, Datenbanken und Anwendungen zu hosten und Stabilität und Zuverlässigkeit bereitzustellen. 2) In eingebetteten Systemen wird Linux aufgrund seiner Flexibilität und Stabilität in Smart Home und Automotive Electronic Systems häufig verwendet. 3) In der Desktop -Umgebung bietet Linux reichhaltige Anwendungen und eine effiziente Leistung.

Wie ist Debian Hadoop -Kompatibilität? Wie ist Debian Hadoop -Kompatibilität? Apr 02, 2025 am 08:42 AM

Debianlinux ist bekannt für seine Stabilität und Sicherheit und wird in Server-, Entwicklungs- und Desktop -Umgebungen häufig verwendet. Während es derzeit einen Mangel an offiziellen Anweisungen zur direkten Kompatibilität mit Debian und Hadoop gibt, wird dieser Artikel Sie dazu veranlassen, Hadoop in Ihrem Debian -System bereitzustellen. Debian -Systemanforderungen: Bevor Sie mit der Hadoop -Konfiguration beginnen, stellen Sie bitte sicher, dass Ihr Debian -System die Mindestanforderungen von Hadoop erfüllt, einschließlich der Installation der erforderlichen Java -Laufzeitumgebung (JRE) und Hadoop -Pakete. Schritte zur Bereitstellung von Hadoop -Bereitstellungen: Download und Unzip Hadoop: Laden Sie die Hadoop -Version von der offiziellen Apachehadoop -Website herunter und lösen Sie sie

Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann? Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann? Apr 02, 2025 pm 03:48 PM

Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann? Bei der Entwicklung in Go ist die Verbindung zu Oracle -Datenbanken eine übliche Anforderung ...

Ist Debian Strings kompatibel mit mehreren Browsern Ist Debian Strings kompatibel mit mehreren Browsern Apr 02, 2025 am 08:30 AM

"DebianStrings" ist kein Standardbegriff und seine spezifische Bedeutung ist noch unklar. Dieser Artikel kann seine Browserkompatibilität nicht direkt kommentieren. Wenn sich jedoch "DebianStrings" auf eine Webanwendung bezieht, die auf einem Debian -System ausgeführt wird, hängt seine Browserkompatibilität von der technischen Architektur der Anwendung selbst ab. Die meisten modernen Webanwendungen sind für die Kompatibilität des Cross-Browsers verpflichtet. Dies beruht auf den folgenden Webstandards und der Verwendung gut kompatibler Front-End-Technologien (wie HTML, CSS, JavaScript) und Back-End-Technologien (wie PHP, Python, Node.js usw.). Um sicherzustellen, dass die Anwendung mit mehreren Browsern kompatibel ist, müssen Entwickler häufig Kreuzbrowser-Tests durchführen und die Reaktionsfähigkeit verwenden

Ich kann mich nicht als Stamm bei MySQL anmelden Ich kann mich nicht als Stamm bei MySQL anmelden Apr 08, 2025 pm 04:54 PM

Die Hauptgründe, warum Sie sich bei MySQL nicht als Root anmelden können, sind Berechtigungsprobleme, Konfigurationsdateifehler, Kennwort inkonsistent, Socket -Dateiprobleme oder Firewall -Interception. Die Lösung umfasst: Überprüfen Sie, ob der Parameter Bind-Address in der Konfigurationsdatei korrekt konfiguriert ist. Überprüfen Sie, ob die Root -Benutzerberechtigungen geändert oder gelöscht und zurückgesetzt wurden. Stellen Sie sicher, dass das Passwort korrekt ist, einschließlich Fall- und Sonderzeichen. Überprüfen Sie die Einstellungen und Pfade der Socket -Dateiberechtigte. Überprüfen Sie, ob die Firewall Verbindungen zum MySQL -Server blockiert.

libv sind zwei libv sind zwei Apr 03, 2025 pm 08:03 PM

Ich habe ein Projekt namens Lua-Libuv entwickelt und freue mich, meine Erfahrungen zu teilen. Die ursprüngliche Absicht des Projekts besteht darin, zu untersuchen, wie Libuv (eine in C geschriebene asynchrone E/A -Bibliothek) verwendet wird, um einen einfachen HTTP -Server zu erstellen, ohne die C -Sprache ausführlich lernen zu müssen. Mit Hilfe von ChatGPT habe ich den Basiscode von http.c. Beim Umgang mit anhaltenden Verbindungen habe ich zum richtigen Zeitpunkt erfolgreich die Schließung der Verbindung und die Freilegung von Ressourcen implementiert. Zuerst habe ich versucht, einen einfachen Server zu erstellen, der das Hauptprogramm beendete, indem ich die Verbindung schließt, aber ich hatte einige Probleme. Ich habe versucht, Datenblöcke mit Streaming zu senden, und während es funktioniert, blockiert dies den Haupt -Thread. Am Ende habe ich mich entschlossen, diesen Ansatz aufzugeben, weil mein Ziel nicht darin bestand, eine Tiefe der C -Sprache zu lernen. Endlich, ich

See all articles