构建linux根文件系统|Linux的根分区的文件系统类型是什么

构建linux根文件系统|Linux的根分区的文件系统类型是什么的第1张示图

Ⅰ linux的根分区的文件系统类型是什么

linux文件系统格式挺复杂多样的,如ext、ext2、ext3、ext4、jsf、 、xfs、ReiserFS等。一般情况下,linux根分区文件系统多数用ext3、ext4,安装时你可以选择。

Ⅱ 如何制作 linux 文件系统

一、什么是文件系统 (Filesystem)文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。二、主要嵌入式采用的文件系统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.这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试三、建一个包含所有文件的目录1、建一个目录rootfs 用来装文件系统2、mkdir bin dev etc lib proc sbin tmp usr var3、ln -fs bin/busybox linuxrc(使用busybox)4、到系统 /dev 把所有的device打一个包,拷贝到 dev下面(最省事的做法);或者使用mknod来自己建所需要的device,我自己用的如下:crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console crw-rw-rw- 1 root root 5, 64 2006-02-24 13:12 cua0 crw-rw-rw- 1 root root 63, 0 2006-02-24 13:12 dk0 crw-rw-rw- 1 root root 63, 1 2006-02-24 13:12 dk1 drwxr-xr-x 2 root root 4096 2006-02-24 13:12 flash brw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 hda crw-rw-rw- 1 root root 36, 10 2006-02-24 13:12 ipsec crw-rw-rw- 1 root root 241, 0 2006-02-24 13:12 ixNpe crw-rw-rw- 1 root root 1, 2 2006-02-24 13:12 kmem crw-rw-rw- 1 root root 126, 0 2006-02-24 13:12 ledman lrwxrwxrwx 1 root root 16 2007-09-19 14:08 log -> /tmp/var/log/log crw-rw-rw- 1 root root 1, 1 2006-02-24 13:12 mem crw-rw-rw- 1 root root 90, 0 2006-02-24 13:12 mtd0 brw-rw-rw- 1 root root 31, 0 2006-02-24 13:12 mtdblock0 brw-rw-rw- 1 root root 31, 1 2006-02-24 13:12 mtdblock1 brw-rw-rw- 1 root root 31, 2 2006-02-24 13:12 mtdblock2 brw-rw-rw- 1 root root 31, 3 2006-02-24 13:12 mtdblock3 brw-rw-rw- 1 root root 31, 4 2006-02-24 13:12 mtdblock4 brw-rw-rw- 1 root root 31, 5 2006-02-24 13:12 mtdblock5 brw-rw-rw- 1 root root 31, 6 2006-02-24 13:12 mtdblock6 crw-rw-rw- 1 root root 90, 1 2006-02-24 13:12 mtdr0 crw-rw-rw- 1 root root 1, 3 2006-02-24 13:12 null crw-rw-rw- 1 root root 108, 0 2006-02-24 13:12 ppp crw-r——r—— 1 root root 5, 2 2006-03-29 15:56 ptmx drwxr-xr-x 2 root root 4096 2006-03-29 15:56 pts crw-rw-rw- 1 root root 2, 0 2006-02-24 13:12 ptyp0 brw-rw-rw- 1 root root 1, 0 2006-02-24 13:12 ram0 crw-rw-rw- 1 root root 1, 8 2006-02-24 13:12 random crw-rw-rw- 1 root root 5, 0 2006-02-24 13:12 tty crw-rw-rw- 1 root root 4, 0 2006-02-24 13:12 tty0 crw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 ttyp0 crw-rw-rw- 1 root root 4, 64 2006-02-24 13:12 ttyS0 crw-rw-rw- 1 root root 1, 9 2006-02-24 13:12 urandom crw-rw-rw- 1 root root 1, 5 2006-02-24 13:12 zero举例: mknod console c 5 1 这样 crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console5、将编译好的busybox拷贝到/bin下面,除了busybox外,所有其他的命令都是他的linkash chgrp clear dd echo fgrep gzip ip ls modprobe mv ping pwd sed stty tar true zcat busybox chmod cp df egrep grep hostname kill mkdir more netstat ping2file rm sh sync tftp umount cat chown date dmesg false gunzip ifconfig ln mknod mount pidof ps rmdir sleep sysinfo touch uname所有的命令你可以在busybox下面用make menuconfig来增减6、同样/sbin下面也是busybox的linkhalt ifconfig init insmod klogd losetup lsmod mkswap modprobe reboot rmmod route swapoff swapon[NextPage]7、同样/usr/bin下面也是busybox的linkbasename dirname env free id logger reset tail tr tty uptime which xargsawk cut expr head killall mkfifo sort test traceroute uniq wc whoami yes上面几乎是最全的link,各个看官可以酌情删减,不过link也不占什么空间!8、同样/usr/sbin下面放着所有编译完的可执行文件,具体就不多说了9、非常重要之/lib,务必重视找到你编译环境的target目录,把需要的lib文件先用strip压缩(非target目录下的,而已编译环境提供的strip),先把最基本的libc, ld等等,必须同样做跟target/lib里面一样的link.然后根据特定的应用加相应的lib,不要把不用的加进去,lib比较占空间。10、在/etc下面加上需要的配置文件,最最重要的是rcS#!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin/scripts UTC=yes mount -n -t proc proc /proc mount -n -t ramfs ramfs /tmp mount -n -t devpts devpts /dev/pts # build var directories /bin/mkdir -m 0777 /tmp/var /bin/mkdir -m 0777 /var/lock /bin/mkdir -m 0777 /var/log /bin/mkdir -m 0777 /var/run /bin/mkdir -m 0777 /var/tmp #/bin/mkdir -m 0777 /tmp/etc #/bin/cp -a /usr/etc//etc #/bin/cp -a /usr/dev//dev/ # loads the NPE ethernet moles into the kernel. insmod /lib/moles/2.6.13.2/intel/ixp400.ko # Firmware code for NPE Engine. cat /etc/IxNpeMicrocode.dat > /dev/ixNpe insmod /lib/moles/2.6.13.2/intel/ixp400_eth.ko netdev_max_backlog=500 insmod /lib/moles/led.ko insmod /lib/moles/push_button.ko下面的具体应用没有再举例加上了,这个是系统init必须的。其他的情况类似如此了,下面里面给了一个lunksys的GPL项目的target.四、生成一个ramdisk#!/bin/sh MODULE_NAME=ramdisk RAMPATH=`pwd` TMPPATH=${RAMPATH}/tmp SOURCE=${RAMPATH}/……/target if [ ! -d ${TMPPATH} ] then mkdir ${TMPPATH} fi if [ `whoami` != 'root' ] then { echo "You should run the shell as root, Please rerun as a root." echo "Aborting." exit 1 } fi # Clear in tmp path rm -rf ${TMPPATH}/tmpmnt rm -rf ${TMPPATH}/ramrootfs mkdir ${TMPPATH}/tmpmnt # Clear the old ramdisk rm -f ${RAMPATH}/$MODULE_NAME # Make a temp file which size is suitable dd if=/dev/zero of=${TMPPATH}/ramrootfs bs=1k count=6144 # Create a ext2 filesystem mke2fs -F -m 0 -i 2000 ${TMPPATH}/ramrootfs # Mount it to tmpmnt/ mount -o loop -t ext2 ${TMPPATH}/ramrootfs ${TMPPATH}/tmpmnt # Copy everything from kernel to this. cd ${TMPPATH}/tmpmnt echo ${SOURCE} cp -av ${SOURCE}/. cd ${TMPPATH} # Unmount it the ext2 filesystem umount ${TMPPATH}/tmpmnt cat ${TMPPATH}/ramrootfs | gzip -9 > /${RAMPATH}/ramdisk echo Copying ramdisk image to ${RAMPATH} sync这里给出一个自动生成脚本!五、生成一个cramfs找到cramfs的toolchain./mkcramfs -r $(FS1_DIR) $(FS_NAME)。1六、生成一个mksquashfs找到squashfs的toolchain./mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments -noI做文件系统最困难和最可能出问题的地方是在/lib库和/dev方面,请大家多注意这两方面。

Ⅲ 如何使用Busybox构建出基本的嵌入式Linux根文件系统研究

为了方便和简化嵌入式Linux开发过程中的调试过程,主要研究了如何使用Busybox构建出基本的嵌入式Linux根文件系统,包括Busybox的配置、编译和安装。在此基础上,进一步构建出基于NFS的嵌入式Linux根文件系统,并给出了启动脚本和配置文件。这种根文件系统可以方便地在线更改、调试程序,降低了嵌入式系统的开发门槛。随着信息技术的发展,嵌入式系统技术已经广泛应用于国防、通信、工业控制、消费电子等诸多领域。其中,Linux作为一款开源、成熟且高效稳定的多任务操作系统,先天具有许多不可比拟的优势,已成为目前最具潜力的嵌入式操作系统。众所周知,构建根文件系统对于嵌入式Linux开发至关重要,它是内核启动后加载的第1个文件系统,是决定系统能否正常启动的关键所在。在开发阶段,程序往往需要反复多次的调试,鉴于此,构建基于NFS(NetworkFileSystem)的根文件系统就尤为重要;这样就免去了对目标开发板的反复烧写,方便地在线对程序进行更改与调试。本文以Busybox软件为基础,介绍了一种实用的NFS根文件系统构建方法。1嵌入式根文件系统简介Linux启动时,第一个必须挂载的就是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会报错进而退出启动。系统成功启动之后,才可以自动或手动挂载其他的文件系统。Linux系统各个分区存储文件时,需要遵循一定的格式,这种文件格式称为文件系统类型,比如常见的有ext2,ext3,ext4等。在存储设备方面,FLASH是目前嵌入式系统中广泛采用的主流存储设备,它是一种可电擦写的非易失性存储器,具有体积小,功耗低,密度高等优点。目前FLASH中常见的文件系统主要有Cramfs,Jffs2,Yaffs2等。嵌入式Linux基本的根文件目录结构如表1所示。2Busybox简介Busybox常被形象地称为嵌入式Linux系统开发中的“瑞士军刀”,它将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具相比较,Busybox所提供的功能和参数略少,但在比较小的系统或者嵌入式系统中已经足够了。它仅用一个可执行文件就可以提供基本的Linux操作系统所需的命令,体积很小,配置起来也很方便。

Ⅳ Linux 根文件系统制作

用grub 4 dos里面的grldr引导其实是最方便的把grldr直接放到C:在windows的引导菜单里加入内C:\grldr="GRUB"重启进入grub就可以用来引导linux了不过容要有一定的基础至于安装时要不要解压ISO这个要看用的是什么LINUX了susu是要解压的RH类, den类就不用了你用的那个是怎样的就不知道了, 不过要引导linux的ISO(安装文件),当然要用引导器解释磁盘的方法输入地址啦在grub里就是 hda* hdb*进入内核就是 /dev/hda* /dev/hdb* /dev/sda*等等类似的地址啦不过不知道你看不看得明白上面的东东呢

Ⅳ Linux根文件系统基本包括哪些内容

/bin:存放最常用命令;/boot:启动Linux的核心文件;/dev:设备文件;/etc:存放各种配置文件;/home:用户主目录;/lib:系统最基本的动态链接共享库;/mnt:一般是空的,用来临时挂载别的文件系统;/proc:虚拟目录,是内存的映射;/sbin:系统管理员命令存放目录;/usr:最大的目录,存许应用程序和文件;/usr/X11R6:X-Window目录;/usr/src:Linux源代码;/usr/include:系统头文件;/usr/lib:存放常用动态链接共享库、静态档案库;/usr/bin、/usr/sbin:这是对/bin、/sbin的一个补充;

Ⅵ 如何制作Linux根文件系统

根文件系统一直以来都是所有类Unix操作系统的一个重要组成部分,也可以认为是嵌入式Linux系统区别于其他一些传统嵌入式操作系统的重要特征,它给Linux带来了许多强大和灵活的功能,同时也带来了一些复杂性。我们需要清楚的了解根文件系统的基本结构,以及细心的选择所需要的系统库、内核模块和应用程序等,并配置好各种初始化脚本文件,以及选择合适的文件系统类型并把它放到实际的存储设备的合适位置。Linux的根文件系统以树型结构组织,包含内核和系统管理所需要的各种文件和程序,一般说来根目录”/”下的顶层目录都有一些比较固定命名和用途。下面列出了一个Linux根文件系统中的比较常见的目录结构:/bin 存放二进制可执行命令的目录该目录下存放所有用户都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。/bin目录下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,m knod,[,test等“[”命令其实就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。/dev 存放设备文件的目录该目录下存放的是设备文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。/etc 存放系统管理和配置文件的目录该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。/home 用户主目录,比如用户user的主目录就是/home/user,可以用~user表示用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。/lib 存放动态链接共享库的目录该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。/sbin存放系统管理员使用的管理程序的目录该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基 本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。/sbin目录下常用的命令有:shutdown reboot fdisk fsck等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。/tmp 公用的临时文件存储点用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。/root 系统管理员的主目录根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、硬盘。/proc 虚拟文件系统,可直接访问这个目录来获取系统信息。这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。/usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。/var 某些大文件的溢出区与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。———————————————————————一、移植环境:1、 Ubuntu 10.10发行版2、 u-boot.bin3、 目标机:FS_S5PC100平台4、 交叉编译器 arm-cortex_a8-linux-gnueabi-gcc———————————————————————二、移植步骤1、 源码下载我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:http://busybox.net/downloads/2、 解压源码$ tar xvf busybox-1.17.3.tar.bz23、 进入源码目录$ cd busybox-1.17.34、 配置源码$ make menuconfigBusybox Settings —> Build Options —> [*] Build BusyBox as a static binary (no shared libs) [ ] Force NOMMU build [ ] Build with Large File Support (for accessing files > 2 GB) (arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix () Additional CFLAGS5、 编译$ make6、 安装busybox默认安装路径为源码目录下的_install$ make install7、 进入安装目录下$ cd _install$ lsbin linuxrc sbin usr8、 创建其他需要的目录$ mkdir dev etc mnt proc var tmp sys root9、 添加库在_install目录下创建一个lib文件夹,将工具链中的库拷贝到lib目录下$ mkdir lib$ cp /home/linux/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/lib/* ./lib/删除lib下的所有目录、.o文件和.a文件,对库进行瘦身以减小文件系统的大小$ rm *.o *.a$ arm-cortex_a8-linux-gnueabi-strip lib/*10、 添加系统启动文件在etc下添加文件inittab$ vim /etc/inittab文件内容如下:#this is run first except when booting in single-user mode.:: sysinit:/etc/init.d/rcS# /bin/sh invocations on selected ttys# Start an "askfirst" shell on the console (whatever that may be)::askfirst:-/bin/sh# Stuff to do when restarting the init process::restart:/sbin/init# Stuff to do before rebooting::ctrlaltdel:/sbin/reboot在etc下添加文件fstab$ vim /etc/fstab文件内容如下:#device mount-point type options mp fsck orderproc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev tmpfs defaults 0 0这里我们挂在的文件系统有三个proc、sysfs和tmpfs,在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持修改内核配置:$ make menuconfigFile systems —> Pseudo filesystems —> [*] Virtual memory file system support (former shm fs) [*] Tmpfs POSIX Access Control Lists重新编译内核$ make zImage在etc下创建init.d目录,并在init.d下创建rcS文件$ mkdir /etc/init.d -p$ vim /etc/init.d/rcSrcS文件内容为:#!/bin/sh# This is the first script called by init process/bin/mount -a为rcS添加可执行权限:$ chmod +x init.d/rcS在etc下添加profile文件$ vim /etc/profile文件内容为:#!/bin/shexport HOSTNAME=farsightexport USER=rootexport HOME=root#export PS1="\[\[email protected]\h \W\]\$ "export PS1="[[email protected]$HOSTNAME \W]\# "PATH=/bin:/sbin:/usr/bin:/usr/sbinLD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATHexport PATH LD_LIBRARY_PATH11、 设备文件创建根文件系统中有一个设备节点是必须的,在dev下创建console节点$ mknod dev/console c 5 1重要:新制作的文件系统尺寸若超出8M,删除不需要的库文件。

Ⅶ linux内核编译和根文件系统制作过程

内核编译:makemenuconfig配置相应的平台,然后保存退出直接make命令就可以编译了。文件系统制作:一般都用busybox开源软件来做,下载,解压,然后makemenuconfig配置你想要的属性,然后保存退出,make就可以了,然后makeinstall就会在目录下看到__install的目录就是你要的根文件系统目录了。

Ⅷ 在构建嵌入式Linux系统时,其根文件系统必须包含哪些目录

根据Filesystem Hierarchy Standard(文件系统目录标准,简称FHS)中包含的根文件系统官版方规则:bin 必要的用户命令(二权进制文件)boot 引导加载程序所使用的静态文件 dev 设备文件和其他特殊文件etc 系统配置文件,包括启动文件home 用户主目录lib 必要的程序库(例如c程序库)以及内核模块media 挂载点,用于可移除媒体mnt 挂载点,用于暂时挂载的文件系统opt 附加的软件套件proc 用于提供内核与进程信息的虚拟文件系统root root用户的主目录sbin 必要的系统管理员命令sys 系统信息与控制(总线、设备以及驱动程序)的虚拟文件系统tmp 暂时性的文件 usr 在第二层包含了对大多数用户游泳的大量应用程序和文件,包括X服务器var 用于存放监控程序和工具程序的可变的数据当然这不是必须的,只是一个标准。可以按自己的需要去添加和删除

Ⅸ 怎样制作嵌入式linux根文件系统

简单的说:先配置文件系统的基本目录,包含/bin /sbin /etc /usr /tmp /root 等基本目录,把应用程序放到这些目录中,再用mkcamfs等工具来打包文件系统即可。细节上的话要说的就多了

Ⅹ 什么时候要重新制作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 ram4. 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.img5. 其他根文件系统的制作制作yaffs文件系统: mkyaffsimage myroots myroots.img制作squashfs: mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments –noI6. BusyBox编译以及移植(根文件系统内命令的制作移植)建立目标板空根目录文件夹及根目录下的文件夹:[[email protected] friendly-arm]# mkdir myroots[[email protected] friendly-arm]#pwd/friendly-arm/myroots[[email protected] friendly-arm]#cd myroots[[email protected] myroots]# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var[[email protected] myroots]# mkdir etc/init.d进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:#! /bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=Sprevlevel=Numask 022export 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 。[[email protected] busybox-1.2.0]# make menuconfig由于每个版本的配置选项组织有所不同。不管怎样,我们注意以下选项就行了:1) Support for devfs2) 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) init5) Support reading an inittab file //支持init读取/etc/inittab 配置文件6) (X) ash选中ash //建立的rcS脚本才能执行7)ash8)cp cat ls mkdir mv //可执行命令工具的选择,自己看着办吧,需要用到的就选上9) mount10) umount11) Support loopback mounts12) Support for the old /etc/mtab file13) insmod14) Support version 2.2.x to 2.4.x Linux kernels15) Support version 2.6.x Linux kernels16) vi17)don’t use user以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有问题。配置好之后,保存退出。然后对其编译和安装到刚才建立的根文件系统目录下:[[email protected] 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等,为部分相应库建立快捷方式,提供一些应用程序按快捷方式名称调用。

未经允许不得转载:山九号 » 构建linux根文件系统|Linux的根分区的文件系统类型是什么

赞 (0)