问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么时候要重新制作Linux的根文件系统?谢谢

发布网友 发布时间:2022-04-28 16:46

我来回答

3个回答

热心网友 时间:2022-06-19 19:04

首先要理解什么是根文件系统,如果你不是做应用开发如嵌入式等等话,就不需要修改。

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等,为部分相应库建立快捷方式,提供一些应用程序按快捷方式名称调用。

热心网友 时间:2022-06-19 19:04

1,当需要添加一些常用的应用程序,如ftp, telnet等,单独编译这些通用应用程序比较麻烦,不如直接使用busybox添加这些模块,重新制作文件系统。
2,需要添加一些动态库,配置文件,图片,视频等大文件时,已制作好的文件系统不包含这些文件。
在bootloader配置正确的NFS参数就可以启动网络文件系统,设备启动后直接映射到网络上,在被映射的开发机上添加删除文件都不影响嵌入式设备的使用,便于开发调试。

热心网友 时间:2022-06-19 19:05

自己只做过软盘的,确实做过光盘的,都是用现成的。
但帮你找了一篇文章,你可以研究一下。

另外,虚机团上产品团购,超级便宜
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 红米5 plus怎么强制关机 linux的文件系统到底是什么?为什么一般的教程总会强调他的目录结构... 谁给我一段美女的视频 红米定时关机怎么设置 那里有高清晰的美女图片或视频下载?谢谢高人指点1 红米手机设置自动开关机怎样再更改时间 从快手上自己的手机上下载美女的照片和视频犯法吗? linux系统通常为什么要把硬盘划分为多个文件系统,简述文件系统的安装过程 线程撕裂者超频好超吗 关于linux下修改网卡物理地址的问题!! linux高手请进啊!! linux系统网卡设置问题! 怎么修改网卡的device name-Linux系统管理 如何更改linux系统网卡地址 linux ubuntu 怎么修改网卡名称 linux如何修改网卡配置 空间说说删除了怎么恢复 空间的说说删除了怎么恢复? 买了一套手竿浮钓鲢鳙弹簧钩钓组配了一个大肚漂,有没有大神知道该怎么调漂啊? 钓鱼用的大肚子漂怎样用? 大肚漂不往下沉 为什么索尼蓝牙耳机连小米手机说话会沙哑? 快手天天给我推荐美女的视频忍不住要看 把快手注销重新注册是不是就可以重新来过了? 新买的蓝牙耳机为什么有声音的时候会有一种 呲呲 的声音 Linux 根文件系统 为什么 重要 蓝牙耳机声音变“沙”(即不清晰),怎样才能变回原来那样清晰? 我的快手不看美女为什么发现里会突然都是美女? 蓝牙音箱声音变小嘶哑怎么回事 linux 文件系统 为什么需要加载 手机应用,今天看见朋友在玩一款应用说媲美快手什么的,可以看美女*小视频的,谁知道叫什么?哪位好人 蓝牙耳机声音有点沙哑是为什么 快手上面播的最强女保安视频哪里弄? 为什么玩王者荣耀的时候用蓝牙耳机会出现声音沙哑和卡顿 蓝牙耳机进水了还能 我需要一个刷视频的软件。但不要西瓜视频那样的更新慢。不要快手那样的有美女? 手机连接蓝牙耳机后声音不好是为什么?有点沙哑 谁有快手里两个穿衬衣牛仔裤的美女在ktv跳社会摇的视频 有没有知道这个美女的快手ID号的,或者是在哪能看到他的视频。有重赏哦。 oppo7007手机蓝牙耳机沙哑怎么办 oppo r805手机用蓝牙耳机声音嘶哑,有杂音是怎么回事。。 手机没有卡怎么拍抖音