目錄
#1.根檔案系統" >#1.根檔案系統
2.主要的根檔案系統" >2.主要的根檔案系統
3.Ramdisk製作" >3.Ramdisk製作
4.Cramfs制作" >4.Cramfs制作
5.其他根文件系统的制作" >5.其他根文件系统的制作
6.BusyBox编译制作" >6.BusyBox编译制作
首頁 系統教程 Linux Linux根檔案系統的秘密

Linux根檔案系統的秘密

Feb 15, 2024 pm 01:42 PM
linux linux教程 linux系統 linux作業系統 linux指令 shell腳本 嵌入式linux linux入門 linux學習

Linux是一種開源、可移植、可自訂的作業系統,它廣泛應用於各種領域,如伺服器、桌面、嵌入式裝置等。 Linux的核心是內核,它負責管理硬體資源和提供基本的服務。但是,核心並不是一個獨立的實體,它需要一個檔案系統來儲存和存取各種資料和程式。檔案系統是一種組織和管理檔案的方法,它定義了檔案的名稱、位置、屬性、權限等資訊。在Linux中,有許多不同類型的檔案系統,如ext4、xfs、btrfs等,它們各有特點和優勢。但是,在所有的檔案系統中,有一個特殊的檔案系統,它是Linux系統的基礎和核心,它就是根檔案系統(rootfs)。那麼,根檔案系統是什麼?它有什麼作用?它又是如何創建和管理的呢?本文將從以下幾個面向來解答:

Linux根檔案系統的秘密

#1.根檔案系統

#檔案系統是包含在一個磁碟(包括光碟、磁碟機、隨身碟及其它儲存裝置)或分割區的目錄結構;一個可套用的磁碟裝置可以包含一個或多個檔案系統;如果您想進入一個檔案系統,首先您要做的是掛載(mount)檔案系統;為了掛載(mount)檔案系統,您必須指定一個掛載點。

附註:對於我們應用開發來說,購買開發板的時候,廠商會提供好現成的根文件系統和BootLoader等,如果需要,我們可以改變其中的命令而無需從頭開始製作一個新的根文件系統。不過這兒的製作過程可以讓我們更深一點理解Linux的檔案系統。

2.主要的根檔案系統

#* Linux 中,rootfs 是不可或缺的。 PC 上主要實作有ramdisk 和直接掛載HD(Harddisk,硬碟)上的根檔案系統;嵌入式中一般不從HD 啟動,而是從Flash 啟動,最簡單的方法是將rootfs load 到RAM 的RAMDisk,稍微複雜的就是直接從Flash 讀取的Cramfs,更複雜的是在Flash 上分割區,並建置JFFS2 等檔案系統。

* RAMDisk 將製作好的 rootfs 壓縮後寫入 Flash,啟動的時候由 Bootloader load 到RAM,解壓縮,然後掛載到 /。這種方法操作簡單,但是在 RAM 中的檔案系統不是壓縮的,因此需要佔用許多嵌入式系統中稀有資源 RAM。

ramdisk 就是用記憶體空間來模擬出硬碟分割區,ramdisk通常使用磁碟檔案系統的壓縮存放在flash中,在系統初始化時,解壓縮到SDRAM並掛載根檔案系統, 在linux系統中,ramdisk有二種,一種就是可以格式化並載入,在linux核心2.0/2.2就已經支援,其不足之處是大小固定;另一種是2.4的核心才支援,透過,ramfs來實現,他不能被格式化,但用起來方便,其大小隨所需的空間增加或減少,是目前linux常用的ramdisk技術。

* initrd 是RAMDisk 的格式,kernel 2.4 之前都是image-initrd,Kernel 2.5 引入了cpio-initrd,大大簡化了Linux 的啟動過程,附合Linux 的基本哲學:Keep it simple, stupid(KISS) . 不過cpio-initrd 作為新的格式,還沒有經過廣泛測試,嵌入式Linux 中主要採用的還是image-initrd。

* Cramfs 是 Linus 寫的很簡單的檔案系統,有很好的壓縮綠,也可以直接從 Flash 上運行,不須 load 到 RAM 中,因此節約了 RAM。但 Cramfs 是唯讀的,對於需要執行時修改的目錄(如: /etc, /var, /tmp)多有不便,因此,一般將這些目錄做成ramfs 等可寫的 fs。

* SquashFS 是 Cramfs 的增強。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有優勢。不過,根據開發者介紹,在效能上可能不如 Cramfs。這也是一種新方法,在嵌入式系統採用之前,需要經過更多的測試。

3.Ramdisk製作

#RAMDisk的製作方法如下:
(1) 在PC機的Linux作業系統環境下,產生可以虛擬成區塊裝置的文件,假設文件名稱為init.img。

$ dd if=/dev/zero of=init.img bs=4096 count=1024
登入後複製

其中bs*count為區塊裝置大小(單位:位元組),產生init.img檔案以後,還必須對該檔案進行格式化。

$ mke2fs –m0 –F 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何在macOS上將apscheduler定時任務配置為服務? 如何在macOS上將apscheduler定時任務配置為服務? Apr 01, 2025 pm 06:09 PM

在macOS上將apscheduler定時任務配置為服務在macOS平台上,如果你想將apscheduler定時任務配置為一個服務,類似於ngin...

c語言多線程的四種實現方式 c語言多線程的四種實現方式 Apr 03, 2025 pm 03:00 PM

語言多線程可以大大提升程序效率,C 語言中多線程的實現方式主要有四種:創建獨立進程:創建多個獨立運行的進程,每個進程擁有自己的內存空間。偽多線程:在一個進程中創建多個執行流,這些執行流共享同一內存空間,並交替執行。多線程庫:使用pthreads等多線程庫創建和管理線程,提供了豐富的線程操作函數。協程:一種輕量級的多線程實現,將任務劃分成小的子任務,輪流執行。

web.xml怎麼打開 web.xml怎麼打開 Apr 03, 2025 am 06:51 AM

要打開 web.xml 文件,可以使用以下方法:使用文本編輯器(如記事本或 TextEdit)使用集成開發環境(如 Eclipse 或 NetBeans)使用命令行編輯命令(Windows:notepad web.xml;Mac/Linux:open -a TextEdit web.xml)

Linux系統自帶Python解釋器能刪除嗎? Linux系統自帶Python解釋器能刪除嗎? Apr 02, 2025 am 07:00 AM

關於Linux系統自帶Python解釋器的刪除問題許多Linux發行版在安裝時會預裝Python解釋器,它並非通過軟件包管理器�...

Linux最好使用的是什麼? Linux最好使用的是什麼? Apr 03, 2025 am 12:11 AM

Linux最適合用作服務器管理、嵌入式系統和桌面環境。 1)在服務器管理中,Linux用於託管網站、數據庫和應用程序,提供穩定性和可靠性。 2)在嵌入式系統中,Linux因其靈活性和穩定性被廣泛應用於智能家居和汽車電子系統。 3)在桌面環境中,Linux提供了豐富的應用和高效的性能。

Debian Hadoop 兼容性怎樣 Debian Hadoop 兼容性怎樣 Apr 02, 2025 am 08:42 AM

DebianLinux以其稳定性和安全性著称,广泛应用于服务器、开发和桌面环境。虽然目前缺乏关于Debian与Hadoop直接兼容性的官方说明,但本文将指导您如何在Debian系统上部署Hadoop。Debian系统需求:在开始Hadoop配置前,请确保您的Debian系统满足Hadoop的最低运行要求,这包括安装必要的Java运行时环境(JRE)和Hadoop软件包。Hadoop部署步骤:下载并解压Hadoop:从ApacheHadoop官方网站下载您需要的Hadoop版本,并将其解

Debian Strings能否兼容多種瀏覽器 Debian Strings能否兼容多種瀏覽器 Apr 02, 2025 am 08:30 AM

“DebianStrings”並非標準術語,其具體含義尚不明確。本文無法直接評論其瀏覽器兼容性。然而,如果“DebianStrings”指的是在Debian系統上運行的Web應用,則其瀏覽器兼容性取決於應用本身的技術架構。大多數現代Web應用都致力於跨瀏覽器兼容性。這依賴於遵循Web標準,並使用兼容性良好的前端技術(如HTML、CSS、JavaScript)以及後端技術(如PHP、Python、Node.js等)。為了確保應用與多種瀏覽器兼容,開發者通常需要進行跨瀏覽器測試,並使用響應式

See all articles