検索
ホームページシステムチュートリアルLinuxLinux ルート ファイル システムの秘密
Linux ルート ファイル システムの秘密Feb 15, 2024 pm 01:42 PM
linuxLinuxチュートリアルLinuxシステムLinux オペレーティング システムLinuxコマンドシェルスクリプト埋め込みLinuxLinux を始めるLinux学習

Linux は、サーバー、デスクトップ、組み込みデバイスなどのさまざまな分野で広く使用されている、オープンソースでポータブルなカスタマイズ可能なオペレーティング システムです。 Linux の中核はカーネルであり、ハードウェア リソースの管理と基本サービスの提供を担当します。ただし、カーネルは独立したエンティティではなく、さまざまなデータやプログラムを保存しアクセスするためにファイル システムを必要とします。ファイル システムは、ファイルを整理および管理する方法であり、ファイルの名前、場所、属性、権限、その他の情報を定義します。 Linux には、ext4、xfs、btrfs など、さまざまな種類のファイル システムがあり、それぞれに独自の特徴と利点があります。ただし、すべてのファイル システムの中に、Linux システムの基盤および中核となる特別なファイル システムがあり、それがルート ファイル システム (rootfs) です。では、ルート ファイル システムとは何でしょうか?それは何をするためのものか?どのように作成され、管理されているのでしょうか?この記事では、次の側面から質問に答えます:

Linux ルート ファイル システムの秘密

1. ルート ファイル システム

ファイル システムは、ディスク (光ディスク、フロッピー ディスク、フラッシュ ディスク、その他のストレージ デバイスを含む) またはパーティションに含まれるディレクトリ構造です。該当するディスク デバイスには 1 つ以上のファイル システムを含めることができます。ファイル システムをマウントするには、最初にファイル システムをマウントする必要があります。ファイル システムをマウントするには、マウント ポイントを指定する必要があります。

注: 私たちのアプリケーション開発では、開発ボードを購入すると、メーカーから既製のルート ファイル システムとブートローダーが提供されます。必要に応じて、新しいルート ファイルを最初から作成せずにコマンドを変更できます。ただし、ここでの作成プロセスにより、Linux ファイル システムについてより深く理解できるようになります。

2. メイン ルート ファイル システム

* Linux では rootfs は必須です。 PC は主に RAM ディスクを実装し、ルート ファイル システムを HD (ハードディスク、ハード ディスク) に直接マウントします。組み込みシステムは通常、HD からではなくフラッシュから起動します。最も単純な方法は、rootfs を RAM の RAMDisk にロードすることです。少し複雑です。 1 つはフラッシュから Cramfs を直接読み取る方法で、より複雑な方法はフラッシュ上にパーティションを作成して JFFS2 などのファイル システムを構築する方法です。

* RAMDisk は、準備された rootfs を圧縮してフラッシュに書き込みます。起動時に、ブートローダーはそれを RAM にロードし、解凍して、/ にマウントします。この方法は操作が簡単ですが、RAM 内のファイル システムは圧縮されていないため、多くの組み込みシステムでは希少なリソースである RAM が必要です。

ramdisk はメモリ スペースを使用してハードディスク パーティションをシミュレートします。Ramdisk は通常、ディスク ファイル システム圧縮を使用し、フラッシュに保存されます。システムの初期化中に、SDRAM に解凍され、ルート ファイル システムにマウントされます。Linux システムでは、ramdisk には1 つはフォーマットとロードが可能で、Linux カーネル 2.0/2.2 ですでにサポートされていますが、欠点はサイズが固定であることです。もう 1 つは 2.4 カーネルでのみサポートされ、ramfs を通じて実装されます。フォーマットすることはできませんが、使いやすく、必要な容量に応じてサイズが増減するため、現在 Linux で一般的に使用されている RAM ディスク技術です。

* initrd は RAMDisk のフォーマットです。カーネル 2.4 より前は、image-initrd でした。カーネル 2.5 では cpio-initrd が導入されました。これにより、Linux の起動プロセスが大幅に簡素化され、Linux の基本哲学「シンプルに、愚かにせよ」に準拠しました ( KISS) ただし、cpio-initrd は新しい形式であるため、十分にテストされておらず、Image-initrd は主に組み込み Linux で使用されています。

* Cramfs は Linus によって書かれた非常にシンプルなファイル システムで、圧縮率が高く、RAM にロードせずにフラッシュから直接実行することもできるため、RAM を節約できます。ただし、Cramfs は読み取り専用なので、実行時に変更が必要なディレクトリ (/etc、/var、/tmp など) には不便なので、これらのディレクトリは ramfs などの書き込み可能な fs にするのが一般的です。

* SquashFS は Cramfs の拡張機能です。 Cramfs のいくつかの制限を克服し、フラッシュと RAM の使用に関しても利点があります。ただし、開発者によると、パフォーマンスの点では Cramfs ほど優れていない可能性があります。これは新しいアプローチでもあり、組み込みシステムに採用する前にさらなるテストが必要になります。

3.Ramdisk の作成

RAMDiskの作成方法は次のとおりです。
(1) PC の Linux OS 環境で、ブロックデバイスに仮想化できるファイルを生成します (ファイル名は init.img とする)。

リーリー

bs*count はブロックデバイスのサイズ (単位: バイト) init.img ファイルを生成した後、ファイルをフォーマットする必要があります。

リーリー

(2) 新しいフォルダー ram を作成し、init.img を ram ディレクトリに添付します。

$ mkdir ram
$ mount init.img ram/ -o loop

这时,读写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

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

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

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

进入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

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

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

创建节点的命令如下:

# mknod dev/console c 5 1
# mknod dev/null c 1 3 移植Busybox:

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

[root@190 busybox-1.2.0]# make menuconfig

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

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

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

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

安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下:
拷贝一些管理员控制程序到/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

上記の分析を通じて、ルート ファイル システムは Linux システムの重要な部分であり、Linux システムの起動と操作に必要な主要なファイルとディレクトリが含まれていることがわかります。ルート ファイル システムは通常、/ (ルート) ディレクトリの下にマウントされ、他のファイル システムのマウント ポイントを含めることができます。ルート ファイル システムは、さまざまな種類のファイル システム形式を使用でき、多数のツールを使用して作成および管理できます。たとえば、mkfs コマンドを使用してパーティションまたはデバイスをルート ファイル システムとしてフォーマットしたり、mount コマンドを使用してルート ファイル システムをマウントまたはアンマウントしたり、df コマンドを使用してルート ファイル システムの使用状況を表示したりできます。ファイルシステムなど。つまり、ルート ファイル システムは Linux システムの秘密であり、Linux システムに安定した柔軟な基盤を提供します。

以上がLinux ルート ファイル システムの秘密の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は良许Linux教程网で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
什么是linux设备节点什么是linux设备节点Apr 18, 2022 pm 08:10 PM

linux设备节点是应用程序和设备驱动程序沟通的一个桥梁;设备节点被创建在“/dev”,是连接内核与用户层的枢纽,相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息。设备节点使用户可以与内核进行硬件的沟通,读写设备以及其他的操作。

Linux中open和fopen的区别有哪些Linux中open和fopen的区别有哪些Apr 29, 2022 pm 06:57 PM

区别:1、open是UNIX系统调用函数,而fopen是ANSIC标准中的C语言库函数;2、open的移植性没fopen好;3、fopen只能操纵普通正规文件,而open可以操作普通文件、网络套接字等;4、open无缓冲,fopen有缓冲。

linux怎么判断pcre是否安装linux怎么判断pcre是否安装May 09, 2022 pm 04:14 PM

在linux中,可以利用“rpm -qa pcre”命令判断pcre是否安装;rpm命令专门用于管理各项套件,使用该命令后,若结果中出现pcre的版本信息,则表示pcre已经安装,若没有出现版本信息,则表示没有安装pcre。

linux中eof是什么linux中eof是什么May 07, 2022 pm 04:26 PM

在linux中,eof是自定义终止符,是“END Of File”的缩写;因为是自定义的终止符,所以eof就不是固定的,可以随意的设置别名,linux中按“ctrl+d”就代表eof,eof一般会配合cat命令用于多行文本输出,指文件末尾。

linux中什么叫端口映射linux中什么叫端口映射May 09, 2022 pm 01:49 PM

端口映射又称端口转发,是指将外部主机的IP地址的端口映射到Intranet中的一台计算机,当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上;可以通过使用动态或固定的公共网络IP路由ADSL宽带路由器来实现。

linux怎么查询mac地址linux怎么查询mac地址Apr 24, 2022 pm 08:01 PM

linux查询mac地址的方法:1、打开系统,在桌面中点击鼠标右键,选择“打开终端”;2、在终端中,执行“ifconfig”命令,查看输出结果,在输出信息第四行中紧跟“ether”单词后的字符串就是mac地址。

手机远程linux工具有哪些手机远程linux工具有哪些Apr 29, 2022 pm 05:30 PM

手机远程linux工具有:1、JuiceSSH,是一款功能强大的安卓SSH客户端应用,可直接对linux服务进行管理;2、Termius,可以利用手机来连接Linux服务器;3、Termux,一个强大的远程终端工具;4、向日葵远程控制等等。

linux中lsb是什么意思linux中lsb是什么意思May 07, 2022 pm 05:08 PM

linux中,lsb是linux标准基础的意思,是“Linux Standards Base”的缩写,是linux标准化领域中的标准;lsb制定了应用程序与运行环境之间的二进制接口,保证了linux发行版与linux应用程序之间的良好结合。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン