Rumah > Tutorial sistem > LINUX > Rahsia sistem fail akar Linux

Rahsia sistem fail akar Linux

WBOY
Lepaskan: 2024-02-15 13:42:05
ke hadapan
1344 orang telah melayarinya

Linux ialah sistem pengendalian sumber terbuka, mudah alih dan boleh disesuaikan yang digunakan secara meluas dalam pelbagai bidang, seperti pelayan, desktop, peranti terbenam, dsb. Teras Linux ialah kernel, yang bertanggungjawab mengurus sumber perkakasan dan menyediakan perkhidmatan asas. Walau bagaimanapun, kernel bukanlah entiti bebas dan memerlukan sistem fail untuk menyimpan dan mengakses pelbagai data dan program. Sistem fail ialah kaedah mengatur dan mengurus fail Ia mentakrifkan nama fail, lokasi, atribut, kebenaran dan maklumat lain. Di Linux, terdapat pelbagai jenis sistem fail, seperti ext4, xfs, btrfs, dsb., yang masing-masing mempunyai ciri dan kelebihan tersendiri. Walau bagaimanapun, di antara semua sistem fail, terdapat sistem fail khas, yang merupakan asas dan teras sistem Linux, iaitu sistem fail akar (rootfs). Jadi, apakah sistem fail akar? Apa yang ia lakukan? Bagaimanakah ia dicipta dan diuruskan? Artikel ini akan menjawab soalan dari aspek berikut:

Rahsia sistem fail akar Linux

1. Sistem fail akar

Sistem fail ialah struktur direktori yang disertakan dalam cakera (termasuk cakera optik, cakera liut, cakera kilat dan peranti storan lain) atau sekatan peranti cakera yang berkenaan boleh mengandungi satu atau lebih sistem fail jika anda ingin memasukkan sistem fail; , Perkara pertama yang anda perlu lakukan ialah memasang sistem fail untuk memasang sistem fail, anda mesti menentukan titik pelekap.

Nota: Untuk pembangunan aplikasi kami, apabila membeli papan pembangunan, pengilang akan menyediakan sistem fail root siap pakai dan BootLoader Jika perlu, kami boleh menukar arahan tanpa membuat sistem fail akar baharu dari awal. Walau bagaimanapun, proses pengeluaran di sini boleh memberi kita pemahaman yang lebih mendalam tentang sistem fail Linux.

2. Sistem fail akar utama

* Dalam Linux, rootfs adalah penting. PC terutamanya melaksanakan ramdisk dan secara langsung memasang sistem fail akar pada HD (Harddisk, cakera keras biasanya tidak boot dari HD, tetapi dari Flash Kaedah yang paling mudah adalah untuk memuatkan rootfs ke RAMDisk yang lebih rumit satu ialah membaca Cramfs terus daripada Flash, dan yang lebih rumit ialah membahagikan pada Flash dan membina sistem fail seperti JFFS2.

* RAMDisk memampatkan rootfs yang disediakan dan menulisnya ke Flash Semasa permulaan, Pemuat But memuatkannya ke dalam RAM, menyahmampatnya, dan kemudian melekapkannya ke /. Kaedah ini mudah dikendalikan, tetapi sistem fail dalam RAM tidak dimampatkan, jadi ia memerlukan RAM, sumber yang terhad dalam banyak sistem terbenam.

ramdisk menggunakan ruang memori untuk mensimulasikan partition cakera keras Ramdisk biasanya menggunakan pemampatan sistem fail cakera dan disimpan dalam flash Semasa pemulaan sistem, ia dinyahmampatkan ke SDRAM dan dipasang dengan sistem fail akar ramdisk , satu ialah ia boleh diformat dan dimuatkan, dan sudah disokong dalam kernel Linux 2.0/2.2. Kelemahannya ialah saiznya tetap hanya disokong oleh kernel 2.4, dan ia tidak boleh diformatkan. Tetapi ia mudah digunakan, dan saiznya bertambah atau berkurangan mengikut ruang yang diperlukan Ia adalah teknologi ramdisk yang biasa digunakan pada masa ini.

* initrd ialah format RAMDisk Sebelum kernel 2.4, ia adalah image-initrd 2.5 memperkenalkan cpio-initrd, yang sangat memudahkan proses permulaan Linux dan mematuhi falsafah asas Linux: Keep it simple, stupid (KISS) . Walau bagaimanapun, Sebagai format baharu, cpio-initrd belum diuji secara meluas terutamanya dalam Linux terbenam.

* Cramfs ialah sistem fail yang sangat ringkas yang ditulis oleh Linus Ia mempunyai pemampatan yang baik dan juga boleh dijalankan terus daripada Flash tanpa memuatkan ke dalam RAM, sekali gus menjimatkan RAM. Walau bagaimanapun, Cramfs adalah baca sahaja, yang menyusahkan untuk direktori yang perlu diubah suai semasa runtime (seperti /etc, /var, /tmp, oleh itu, direktori ini biasanya dijadikan fs boleh ditulis seperti ramfs).

* SquashFS ialah peningkatan kepada Cramfs. Menerobos beberapa batasan Cramfs, ia juga mempunyai kelebihan dari segi penggunaan Flash dan RAM. Walau bagaimanapun, menurut pembangun, ia mungkin tidak sebaik Cramfs dari segi prestasi. Ini juga merupakan pendekatan baharu yang memerlukan lebih banyak ujian sebelum diterima pakai dalam sistem terbenam.

3.Ramdisk production

Cara membuat RAMDisk adalah seperti berikut:
(1) Dalam persekitaran sistem pengendalian Linux PC, hasilkan fail yang boleh dimayakan ke dalam peranti blok Anggapkan bahawa nama fail ialah init.img.

$ dd if=/dev/zero of=init.img bs=4096 count=1024
Salin selepas log masuk

di mana bs*count ialah saiz peranti blok (unit: bait). Selepas menjana fail init.img, fail itu juga mesti diformatkan.

$ mke2fs –m0 –F init.img
Salin selepas log masuk

(2) Buat ram folder baharu dan lampirkan init.img pada direktori ram.

$ mkdir ram
$ mount init.img ram/ -o loop
Salin selepas log masuk

这时,读写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
Salin selepas log masuk

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

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

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
Salin selepas log masuk

进入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
Salin selepas log masuk

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

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

创建节点的命令如下:

# mknod dev/console c 5 1
# mknod dev/null c 1 3 移植Busybox:
Salin selepas log masuk

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

[root@190 busybox-1.2.0]# make menuconfig
Salin selepas log masuk

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

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
Salin selepas log masuk

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

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

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

Melalui analisis di atas, kita dapat melihat bahawa sistem fail akar adalah bahagian penting dalam sistem Linux Ia mengandungi fail utama dan direktori yang diperlukan untuk permulaan dan operasi sistem Linux. Sistem fail akar biasanya dipasang di bawah direktori / (root) dan boleh mengandungi titik pelekap untuk sistem fail lain. Sistem fail akar boleh menggunakan pelbagai jenis format sistem fail dan boleh dibuat serta diuruskan melalui beberapa alat. Sebagai contoh, kita boleh menggunakan arahan mkfs untuk memformat partition atau peranti sebagai sistem fail akar, kita boleh menggunakan perintah mount untuk melekap atau menyahlekap sistem fail root, dan kita boleh menggunakan perintah df untuk melihat penggunaan root. sistem fail, dsb. Ringkasnya, sistem fail akar adalah rahsia sistem Linux, yang menyediakan asas yang stabil dan fleksibel untuk sistem Linux.

Atas ialah kandungan terperinci Rahsia sistem fail akar Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:lxlinux.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan