制作根文件系统
linux各种根文件系统制作

内核在采用默认配置情况下,还要修改以下一些配置:make menuconfig进入菜单设置File systems --->[*] Miscellaneous filesystems ---><*> Journalling Flash File System v2 (JFFS2) support//支持JFFS2<*>Compressed ROM file system support (cramfs) //支持cramfs<*> YAFFS2 file system support //支持YAFFS2注意:如果上面这些选项没有选上,则内核无法找到根文件系统1、制作cramfs映像:压缩rootfs根文件系统生成cramfs./mkcramfs rootfs rootfs.cramfsrootfs.cramfs就是我们要烧写到目标板的映像文件2、在uboot下如下操作,将镜像rootfs.cramfs写入nandflash tftp 30008000 rootfs.cramfsnand erase 560000 40000000nand write 30008000 560000 31d000setenv bootargs 'noinitrd root=/dev/mtdblock3 console=ttySAC0,115200 init=/linuxrc mem=64M'saveenv3、进入文件系统后的运行界面创建一个文件:vi txt输入任意内容:asdasdasd保存:wq你会发现cramfs文件系统是只读的,无法保存提示:"txt" Read-only file system目录也无法创建的:[root@mini2440]#mkdir qqmkdir: cannot create directory 'qq': Read-only file system压缩rootfs根文件系统生成jffs2./mkfs.jffs2 -r rootfs -o rootfsmini.jffs2 -e 0x20000 --pad=0x800000 -nrootfsmini.jffs2就是我们要烧写到目标板的映像文件注意:(1)-r :指定要做成image的目录名。
根文件系统制作

根文件系统实验一、实验目标用busybox定制一个很小的文件系统,并且运行用户编译的hello(动态链接)。
二、软件包busybox:/downloads/busybox-1.10.3.tar.bz2bash:ftp:///gnu/bash/bash-3.2.tar.gz三、实验步骤3.1、建立工作目录设定工作目录为/root/build_rootfs/,该目录主要用来编译busybox,bash等制造根文件系统的软件,下载busybox,bash到该目录;mkdir/root/build_rootfs3.2、建立根目录该目录就是我们要移植到目标板上的目录,对于嵌入式的文件系统,根目录下必要的目录包括bin,dev,etc,usr,lib,sbin,proc,sys,tmp;这里设定根目录是/root/rootfs;busybox、bash编译之后,安装到该目录下;mkdir/root/rootfsmkdir/root/rootfs/{bin,dev,etc,usr,lib,sbin,proc,sys,tmp}mkdir/root/rootfs/usr/{bin,sbin,lib}创建节点以root用户执行,创建节点mknod dev/console c51mknod dev/null c133.3、拷贝动态链接库交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下;我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是/usr/local/arm/3.4.4/,所以链接库的目录是/usr/local/arm/3.4.4/sysroot/lib。
#进入链接库目录cd/usr/local/arm/3.4.4/sysroot/lib#编写一个shell文件,用于copy实际的共享链接库;主修订版本的符合链接;动态连接器及其符号链接到目标板根目录下的lib(/root/rootfs/lib)。
根文件系统制作,NFS挂接

2.根文件系统结构:
bin : 存放普通命令,所有用户共享的命令
sbin: 存放系统相关命令,只管管理员用户才能使用的命令
lib : 动态、静态库文件(一般是命令要使用到的库)
proc: proc文件系统的挂接点
tmp : tmp文件系统的挂接点,以及临时文件存放
dev : 设备文件(不是普通文件)
│ Define your directory to install BusyBox files/subdirs in. │
│ │
│ Defined at Config.in:338 │
│ Depends on: !FEATURE_PREFER_APPLETS && !PIE && !STATIC │
│ Prompt: Fancy shell prompts │
│ Defined at libbb/Config.in:97 │
│ Defined at Config.in:595 │
│ Location: │
│ │
│ insmod is used to load specified modules in the running kernel. │
│ │
│ Symbol: FEATURE_USERNAME_COMPLETION [=y] │
│ -> Busybox Settings │
│ -> Busybox Library Tuning │
│ -> Command line editing (FEATURE_EDITING [=y])
模块相关命令:
CONFIG_INSMOD: │
根文件系统制作

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。
根文件系统的制作

busybox-1.7.3制作根文件系统arm-linux-gcc3.4.1 参考文章1. linux-2.6.24.4内核移植到s3c2440----使用busybox-1.9.2制作根文件系统/yang_dk/archive/2008/05/09/2422898.aspx2. 用Busybox创建文件系统/u2/74383/showart_1135014.html1.[root@localhost busybox]#ttar -xjvf busybox-1.7.3.tar.bz22.[root@localhost busybox]#cd busybox-1.7.3修改Makefile中的174行的arch和编译工具链头。
ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-3.[root@localhost busybox-1.7.3]#make menuconfigBusybox Setting----->build option-->[ ] Build BusyBox as a static binary (no shared libs)[*] Build shared libbusybox[*] Produce a binary for each applet, linked against libbusybox [*] Produce additional busybox binary linked against libbusybox [ ] Build with Large File Support (for accessing files > 2 GB)installation option-->[*] Don't use /usrApplets links (as soft-links) --->(./_install) BusyBox installation prefixBusybox Library Tuning --->MD5: Trade Bytes for Speed[*] Faster /proc scanning code (+100 bytes)[*] Support for /etc/networks[*] Support for /etc/networks[*] Additional editing keys[*] vi-style line editing commands[*] History saving[*] Tab completion[*] Username completion[*] Fancy shell promptsLinux Module Utilities --->[*] insmod[*] Enable load map (-m) option[*] Symbols in load map[*] rmmod[*] lsmod[*] lsmod pretty output for 2.6.x Linux kernels[*] modprobe[ ] Multiple options parsing[ ] Fancy alias parsing--- Options common to multiple modutils[ ] Support tainted module checking with new kernels [ ] Support version 2.2.x to 2.4.x Linux kernels[*] Support version 2.6.x Linux kernels其他的用默认值若出现错误1.libbb/time.c:20: error: "CLOCK_MONOTONIC" undeclared (first use in this function)[root@localhost busybox-1.7.3]#make menuconfig去掉Busybox Settings---->Busybox Library Tuning--->[]Use clock_gettie(CLOCK_MONOTONIC) syscall2.miscutils/taskset.c:17: error: parse error before '*' tokenmiscutils/taskset.c:18: warning: function declaration isn't a prototypemiscutils/taskset.c: In function `__from_cpuset':miscutils/taskset.c:22: error: `CPU_SETSIZE' undeclared (first use in this function) miscutils/taskset.c:22: error: (Each undeclared identifier is reported only oncemiscutils/taskset.c:22: error: for each function it appears in.)miscutils/taskset.c:26: warning: implicit declaration of function `CPU_ISSET'miscutils/taskset.c:26: error: `mask' undeclared (first use in this function)miscutils/taskset.c: In function `taskset_main':miscutils/taskset.c:47: error: `cpu_set_t' undeclared (first use in this function)miscutils/taskset.c:47: error: parse error before "mask"miscutils/taskset.c:68: warning: implicit declaration of function `CPU_ZERO'miscutils/taskset.c:68: error: `new_mask' undeclared (first use in this function)miscutils/taskset.c:69: error: `CPU_SETSIZE' undeclared (first use in this function)miscutils/taskset.c:71: warning: implicit declaration of function `CPU_SET'miscutils/taskset.c:78: error: `mask' undeclared (first use in this function)make[1]: *** [miscutils/taskset.o] Error 1make: *** [miscutils] Error 2[root@localhost busybox-1.7.3]#make menuconfig去掉Miscellaneous Utilities--->[ ]task set******************************************************************************* ******************如果是静态3.[root@localhost busybox-1.7.3]#make menuconfigBusybox Setting----->build option-->[*] Build BusyBox as a static binary (no shared libs)[ ] Build shared libbusybox[ ] Produce a binary for each applet, linked against libbusybox [ ] Produce additional busybox binary linked against libbusybox [ ] Build with Large File Support (for accessing files > 2 GB)installation option-->[*] Don't use /usrApplets links (as soft-links) --->(./_install) BusyBox installation prefixLinux Module Utilities --->[*] insmod[*] Enable load map (-m) option[*] Symbols in load map[*] rmmod[*] lsmod[*] lsmod pretty output for 2.6.x Linux kernels[*] modprobe[ ] Multiple options parsing[ ] Fancy alias parsing--- Options common to multiple modutils[ ] Support tainted module checking with new kernels[ ] Support version 2.2.x to 2.4.x Linux kernels[*] Support version 2.6.x Linux kernels其他的用默认值若出现错误#if ENABLE_STATIC && defined(__GLIBC__) && !defined(__UCLIBC__) #warning Static linking against glibc produces buggy executables#warning (glibc does not cope well with ld --gc-sections).#warning See /bugzilla/show_bug.cgi?id=3400#warning Note that glibc is unsuitable for static linking anyway.#warning If you still want to do it, remove -Wl,--gc-sections#warning from top-level Makefile and remove this warning.#error Aborting compilation.#endif将applets/applets.c文件的开头的条件编译去掉******************************************************************************* ***************4.[root@localhost busybox-1.7.3]#make install[root@localhost busybox-1.7.3]#chmod 4755 ./_install/bin/busybox-rwsr-xr-x 1 root root 729120 05-12 20:48 busybox5.[root@localhost busybox-1.7.3]cd /root[root@localhost ~]mkdir rootfs6.[root@localhost ~]cd rootfs[root@localhost rootfs]mkdir bin dev etc lib proc sbin sys usr mnt tmp var[root@localhost rootfs]mkdir usr/bin usr/lib usr/sbin lib/modules[root@localhost rootfs]mknod -m 666 dev/console c 5 1[root@localhost rootfs]mknod -m 666 dev/ttyS0 c 4 64 [root@localhost rootfs]mknod -m 666 dev/ttyS1 c 4 65 [root@localhost rootfs]mknod -m 666 dev/null c 1 37.[root@localhost rootfs]cd etc[root@localhost etc]# vim profile#!/bin/sh#/etc/profile:system-wide .profile file for the Bourne shellsechoecho -n "Processing /etc/profile......"# Set search library pathexport LD_LIBRARY_PATH=/lib:/usr/lib# set user pathexport PATH=/bin:/sbin:/usr/bin:/usr/sbin#Set PS1USER = "`id -un`"LOGNAME=$USERPS1='[\u@\h\W]\$'PATH=$PATHecho "Done!"[root@localhost etc]#mkdir init.d[root@localhost etc]#cd init.d[root@localhost init.d]# more init.d/rcS#!/bin/sh# set hostname, needed host file in /etc directory #./etc/hosthostname `cat /etc/host`# mount all filesystem defined in "fstab"echo "#mount all......."/bin/mount -a#/bin/chmod 0666 /dev/nullecho "# starting mdev...."/bin/echo /sbin/mdev > /proc/sys/kernel/hotplugmdev -s/usr/etc/initecho "******************************************" echo " qhmzdxwdxy_jiangwei "echo " kernel linux-2.6.24.4 "echo " 2010-12-15 "echo " "echo "******************************************"[root@localhost etc]# vim fstabproc /proc proc defaults 0 0none /tmp ramfs defaults 0 0none /var ramfs defaults 0 0mdev /dev ramfs defaults 0 0sysfs /sys sysfs defaults 0 0[root@localhost etc]# vim fstab::sysinit:/etc/init.d/rcS::respawn:-/bin/shtty2::askfirst:-/bin/sh::ctrlaltdel:/bin/umount -a -r::shutdown:/bin umount -a -r::shutdown:/sbin/swapoff -a[root@ocalhost etc]# vim mdev.conf内容空8.复制主机/etc/下面的文件passwd, group, shadow文件到/etc9.在rootfs下,将刚才生成的_install下所有文件复制到rootfs/下[root@ocalhost rootfs]#cp -Rfv _install/* ./10.复制lib 文件到rootfs/lib目录下:[root@ocalhost lib]cp /usr/local/arm/3.4.1/arm-linux/lib/ld* .[root@ocalhost lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so . [root@ocalhost lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 . [root@ocalhost lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libm * . [root@ocalhost lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libcrypt*。
linux制作根文件系统的原理

linux制作根文件系统的原理
制作根文件系统是Linux系统中的一个重要过程,它涉及到文
件系统的组织和安装。
根文件系统是Linux系统中的根目录,包含
了操作系统运行所需的所有文件和目录。
制作根文件系统的原理涉
及到以下几个方面:
1. 文件系统类型,Linux支持多种文件系统类型,如ext4、XFS、Btrfs等。
制作根文件系统时,需要选择合适的文件系统类型,根据实际需求和性能要求进行选择。
2. 文件系统组织,根文件系统的组织结构包括了目录结构、配
置文件、库文件、可执行文件等。
在制作根文件系统时,需要将这
些文件按照一定的目录结构组织起来,确保系统能够正常运行。
3. 安装过程,制作根文件系统通常是在一个干净的环境中进行,可以通过chroot命令将当前系统切换到一个新的根目录下,然后在
这个新的根目录下进行文件的安装和配置,以确保新的根文件系统
能够正常运行。
4. 内核模块和驱动程序,根文件系统中还需要包含操作系统所
需的内核模块和驱动程序,以支持硬件设备的正常工作。
在制作根
文件系统时,需要将这些模块和驱动程序一并包含进去。
5. 引导加载程序,根文件系统的制作还需要考虑引导加载程序,以确保系统能够正确引导并加载根文件系统。
这涉及到引导加载程
序的配置和安装。
总的来说,制作根文件系统的原理涉及到文件系统类型的选择、文件系统的组织、安装过程、内核模块和驱动程序的包含以及引导
加载程序的配置等多个方面。
这些都是确保根文件系统能够正常运
行的重要因素。
第6课 根文件系统的制作及完善-20150713

复习: (1)今天掌握: (1)一、根文件系统制作 (1)1、Linux目录: (1)2、busybox下载、配置 (2)3、在编译安装好的路径创建3个目录 (3)4、填充lib文件--库文件 (3)5、创建console和null文件 (3)6、制作inittab格式 (4)7、挂载最小根文件系统 (4)7.1、REDHAT方面: (4)7.2、开发板方面 (7)挂接成功: (8)其他知识点: (8)二、完善根文件系统 (9)1、编写etc/init.d/rcS (9)2、编写etc/fstab (9)3、创建两个文件proc sys (10)复习:开发板环境的搭建:步骤:Bootloader(u-boot):引导操作系统Linux内核:启动应用程序(任务)根文件系统:存放在存储设备(SD、eMMC、nandflash)今天掌握:Linux内核如何去启动根文件;先把环境搭建起来;Nfs挂载问题解决;开发板挂载根文件系统常见问题:1、nfs配置没成功(重启REDHAT)2、REDHAT的ip消失了;-->重新配置ip3、防护墙没关:(service iptables stop)4、Bootargs设置出错console=ttySAC0Nfsroot=服务器ip:挂载路径(绝对)ip=板子ip:服务器ip:网关:子网掩码::eth0:off一、根文件系统制作1、Linux目录:Bin常用命令Sbin 系统命令Etc 配置文件Lib 库文件Dev 设备文件2、busybox 下载、配置1)Busybox :主要帮我们生成linux 的各种命令2)指定交叉编译器(在开发板上运行)3)busybox 的配置(1)拷贝busybox-1.21.1.tar.bz2到/works 目录下;(2)解压tar -xjvf busybox-1.21.1.tar.bz2(3)配置:[root@localhost works]#cd busybox-1.21.1[root@localhost busybox-1.21.1]#make menuconfigBusybox Settings --->Build Options --->[]Build BusyBox as a static binary (no shared libs)(NEW)/*使用交叉编译器*/(arm-linux-)Cross Compiler prefix (NEW)Installation Options ("make install"behavior)--->基本的目录把/wors/system/fs_mini 目录创建好(/work/system/fs_mini )BusyBox installation prefix Busybox Library Tuning --->/*tab 功能*/[*]Tab completion (NEW)(4)编译:[root@localhost busybox-1.21.1]#make install3、在编译安装好的路径创建3个目录进入编译好的路径:/works/system/fs_mini创建3个目录:[root@localhost fs_mini]#mkdir dev lib etc4、填充lib 文件--库文件拷贝交叉编译中的lib 文件:cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/*./lib/-d -rf注:拷贝库一般加上-d ;因为要拷贝链接文件(动态)。
busybox详解制作根文件系统

详解制作根文件系统单击,返回主页,查看更多内容一、FHS(Filesystem Hierarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。
该标准规定了根目录下各个子目录的名称及其存放的内容:制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。
其过程大体包括:•编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录•利用交叉编译工具链,构建/lib目录•手工构建/etc目录•手工构建最简化的/dev目录•创建其它空目录•配置系统自动生成/proc目录•利用udev构建完整的/dev目录•制作根文件系统的jffs2映像文件下面就来详细介绍这个过程。
二、编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录这些目录下存储的主要是常用命令的二进制文件。
如果要自己编写这几百个常用命令的源程序,my god,这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀——busybox,事情就简单很多。
1、从/下载busybox-1.7.0.tar.bz22、tar xjvf busybox-1.7.0.tar.bz2解包3、修改Makefile文件175 ARCH ?= arm176 CROSS_COMPILE ?= arm-linux-4、make menuconfig配置busyboxbusybox配置主要分两部分。
第一部分是Busybox Settings,主要编译和安装busybox的一些选项。
这里主要需要配置:1)、Build Options -- Build BusyBox as a static binary (no shared libs),表示编译busybox时,是否静态链接C库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– Linux和UNIX的文件系统是一个以“/ “为根的阶层式的树状文件结构,/ 因此 被称为根目录。
– 在早期的UNIX系统中,各个厂家各自定义了自己的UNIX系统的文件系统构成, 比较混乱。为了避免在Linux也产生同样的问题,在Linux面世不久,就开始了 对Linux文件系统进行标准化的活动。 – FHS标准定义了如下的内容。 1. 文件系统中每个区域的用途 2. 所需要的最小构成的文件和目录
根文件系统
• 配置基本的linux命令(嵌入式linux通过busybox制作)
– cat, chmod, chown, cp, chroot, copi, date, dd, df, dmesg, dos2unix, du, echo, env, expr, find, grep, gunzip, gzip, halt, id, ifconfig, init, insmod等等
crw-------- 1 root root 13, 32 Feb 23 2004 /dev/input/mouse0
crw-rw-rw 1 root root 1,
•
典型设备
keyboards, mice, parallel port, IrDA, Bluetooth port, consoles, terminals, sound, video...
•
– 提高软件的可移植性
•
根文件系统 /bin
/dev /etc /lib /mnt /opt /proc /sbin /tmp
目录
内容
可执行程序 块、字符设备节点文件 主要配置文件和初始化执行文件 基本的库文件, 茹:C 库,和内核模块(modules) 挂载点,临时挂载文件系统用 附加的软件包 虚拟文件系统,用于内核和进程通讯 基本的系统管理程序 临时文件目录
$ mknod /dev/hda1 b 3 1
•
基本设备节点(见下表)
•
根文件系统
根文件系统
• 使用不同的文件目录层次结构?
– FHS规定了制定根文件系统的规则 • 通常大多少应用程序和发布依赖这些规则,但这些规则不是内核强制的 – 在嵌入式Linux系统中,你可以构建一个完全不同的根目录层备中的哪个设备 – 内核中的相关文档 Documentation/devices.txt
根文件系统
• 创建设备节点
– 创建设备文件的一般语法: $ mknod /dev/<device> [c|b] <major> <minor> – 例如:
$ mknod /dev/ttySAC0 c 4 64
•
配置用户自己的应用
– 桌面管理器等等
根文件系统
• 库文件目录
– /lib: 系统和运行基本命令时需要的动态库文件 – /usr/lib:所有的其他库 – /usr/lib/xxx: 一些工具包的私有库
– 如:/usr/lib/perl5
根文件系统
• Linux 设备文件
– Linux 系统中所有的对象(包括设备)都是以文件的形式体现的 – Linux系统中,所有的设备文件(如:设备节点),通常放到 /dev下 – 嵌入式系统中只需要创建必须的设备节点即可
• int, insmod, route, mkfs, rmmod, ifconfig
– /usr/bin: 更多非必须的用户程序 • autorun, bibtex, latex, biff, ftp, wc, whereis, whoami – /usr/sbin: 更多非必须的root工具程序 • automount, httpd, in.telnetd, in.talkd, sendmail
根文件系统
• 块设备
– “b” 指明该设备节点是块设备 (ls -l) brw-rw--- 1 root disk 3, 1 Feb 23 2004 hda1 brw-rw--- 1 jdoe floppy 2, 0 Feb 23 2004 fd0
brw-rw--- 1 root disk
brw-rw--- 1 root disk brw------- 1 root root – 典型块设备
• 相应的AP配置需要适当调整
– 建议遵循FHS来构建根文件系统
构建根文件系统的步骤
•
• • • • • •
制作根文件系统
主要内容
•
• • • • • •
根文件系统
构建根文件系统的步骤 BusyBox简介 配置编译BusyBox Busybox init启动过程分析 构建根文件系统的其他部分 文件系统特性
根文件系统
• 根文件系统:根文件系统(root filesystem)是存放运行、维护系统所必 须的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也 可以安装各种软件包。
/usr
/sys /var
更多的用户程序,包括X server
虚拟文件系统 sysfs 挂载点 可变信息储存,如log等
根文件系统
• 程序文件目录
– /bin: 普通用户和root用户都能执行的基本程序 • ping, mknod, mount, tar, grep, gzip, etc – /sbin: root用户能执行的基本程序
7, 0 Feb 23 2004 loop0
1, 1 Feb 23 2004 ram1 8, 1 Feb 23 2004 sda1
磁盘, ramdisk,SD卡,U盘等等
根文件系统
• 设备的主设备号次设备号
– Linux系统是通过主设备号和次设备号来区分设备的 – 主设备号: (major) • 内核用来区分哪类设备
根文件系统
• 字符设备
ls –l /dev/ “c” 指明该设备节点是字符设备 crw-rw---- 1 root uucp 4, crw--w---- 1 jdoe tty 64 Feb 23 2004 /dev/ttyS0 136, 1 Feb 23 2004 /dev/pts/1 3 Feb 23 2004 /dev/null