IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 操作系统 > LINUX > Linux根文件系统的制作

Linux根文件系统的制作

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

  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

#p#副标题#e#

  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,库文件可以从P

关键词标签:Linux,根文件系统

相关阅读 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux实现SCSI硬盘热插拔及在线识别 Linux下用CDMA modem拨号上网

文章评论
发表评论

热门文章 安装红帽子RedHat Linux9.0操作系统教程 安装红帽子RedHat Linux9.0操作系统教程 Linux服务器:设计高性能网站架构-LLMP Linux服务器:设计高性能网站架构-LLMP 使用Clonezilla迁移到虚拟Linux环境 使用Clonezilla迁移到虚拟Linux环境 Linux上的MRTG流量监控中心 Linux上的MRTG流量监控中心 Linux 双网卡绑定一个IP原理及实现 Linux 双网卡绑定一个IP原理及实现 linux和windows等系统远程控制ubuntu桌面 linux和windows等系统远程控制ubuntu桌面

相关下载

人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载 linux命令行浏览器的使用方法 Linux NFS服务固定端口及防火墙配置 U盘安装Ubuntu 10.04 Linux清除用户登录记录和命令历史方法