嵌入式Linux根文件系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BusyBox在缺省情况下会使用/etc/init.d/rcS命令行。
执行所有会导致init暂停的inittab命令。 执行所有仅执行一次的inittab命令。 一旦完成以上工作,init进程便会循环执行以下工作: 执行所有终止时必须重新启动的inittab命令。 执行所有终止时必须重新启动但启动前必须先询问过用户的 inittab命令。
自摆放的都是与Perl有关的链接库和模块。
如何在目标板的根文件系统上安装链接库,让我
们开发的应用程序使用他们。
你可以在交叉编译工具建立期间列出 /usr/local/arm/3.4.1/arm-linux/lib目 录的内容,检查它所安装的所有链接库。
实际的共享链接库
这类文件的文件名格式为libLIBRARY_NAME-VERSION.so其中。 LBRARY_NAME是链接库的名称,VERSION是你使用的链接库的版本 编号。例如,glibc 2.2.3的数学链接库的名称为libm-2.2.3.so。
Cramfs:
Cramfs是Linux的创始人 Linus Torvalds参与开发的一种只读
的压缩文件系统。它也基于MTD驱动程序。
在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,
其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统 可通过更低容量的FLASH存储相同的文件,从而降低系统成本。
Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应
用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行。
Romfs:
传统型的Romfs文件系统是一种简单的、紧凑的、
只读的文件系统,不支持动态擦写保存,按顺序 存放数据,因而支持应用程序以XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节
Jffs2: 日志闪存文件系统版本2 主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、 基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平 衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系 而使jffs2的运行速度大大放慢。
yaffs/yaffs2:
嵌入式文件系统
基于FLASH的文件系统
jffs2 Yaffs/Yaffs2 Cramfs Romfs
基于RAM的文件系统
Ramdisk
ramfs/tmpfs
网络文件系统NFS
jffs2 :
JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核 为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文 件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统, 所以JFFS2也可以用在Linux, uCLinux中。
根文件系统引导过程
一般的系统先启动的是/sbin/init,而如同原始的主流 init,BusyBox也可以处理系统的启动工作。 BusyBox的init尤其适合在嵌入式系统中使用,因为它
可以为嵌入式系统提供所需要的大部分init功能,却不会
让嵌入式系统被System V init的额外特性拖累。
基本根文件系统目录构成解析
目录名称 含义
/bin /boot /dev /etc /home /lib /media /mnt /opt /proc /root /sbin /src /sys /var
存放二进制程序,如:ls,cp 存放系统启动的一些程序 存放设备文件 存放系统配置文件,如:group,profile 用户根目录 存放库文件 媒介的挂载点,如:闪存 该目录用来为其他文件系统提供安装点 不随发行版本一起交付的程序 proc文件系统 超级用户根目录 存放超级用户运行的二进制文件 存放一些服务的目录 sys文件系统的目录 存放经常变化的文件,如临时文件等
用来进行堆(heap)和堆栈 (stack)内存统计的进程 NIS网络服务链接库进程 这是NIS与Name Switch Service(NSS)兼容的进程 DNS的NSS进程 文件查询的NSS进程 Hesiod名称服务的NSS进 程 NIS的NSS进程 NIS plus的NSS进程 程序计数器统计进程
生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数 据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也 提高了数据读写速度。
Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,
文件系统大小可随所含文件内容大小变化。
Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。
与版本无关的符号链接指向主修订版本的符号链接 这些符号链接的主要功能,是为需要链接特定链接库的所有程序提供 一个通用的条目,与主修订版本的编号或glibc涉及的版本无关。这 些符号链接典型的格式为libLIBRARY_NAME.so.例如,libm. so指向libm.so.6,libm.so.6指向实际的共享链接库libm2.2.3.so。
在Linux的启动阶段,initrd提供了一套机制,可以将内
核映像和根文件系统一起载入内存。
ramfs/tmpfs:
Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟
文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大 能使用的内存大小。
Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发
嵌入式Linux根文件系统
介绍Linux文件系统 什么是根文件系统 根文件系统的目录构成 根文件系统的内容组成 Busybox的作用以及如何编译生成它
文件系统简介
嵌入式Linux根文件系统
嵌入式Linux系统的建立
根文件系统引导过程
嵌入式文件系统 NFS环境建立与使用
文件系统的简介
主修订版本的符号链接 主修订版本的编号方式与实际的版本号不同。以glibc 2.2.3实际的共享C 链接库libc-2.2.3.so为例,它的主修订版本编号为6。相对而言,libdl2.2.3. so的主修订版本编号为2。主修订版本的符号链接的名称格式为 libLIBRARY_NAME.so.MAJOR_REVISION _VERSION,其中 MAJOR_REVISION_VERSION是链接库的主修订版本编号。以实际的 C链接库为例,其符号链接的名称为libc.so.6。libdl则是libdl.so.2。
yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件
系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。
yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,
后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回 收速度、读/写速度等方面均有大幅提升。
根文件系统的基本结构
/bin、/dev、/etc、/lib、/proc、/sbin和/usr,都是 不可或缺的。
为多用户提供可扩展环境的所有目录(例如/home、/mnt、
/opt和/root)可以省略。
调整根文件系统的时候,我们甚至可以进一步移除/tmp和 /var,不过这么做可能会危害到某些软件的运行。因此不建 议采用这种过于简化的做法。
链接库目录Lib
至于链接库的摆放位置,也是同样的道理。系统引导以及
执行最基本命令需要的链接库会摆在/lib。所有其他的链 接库则会摆在/usr/lib。通常,套件安装时,会在 /usr/lib中产生子目录,以便摆放它自己的链接库。
以Perl 5.x为例,它会产生/usr/lib/perl5目录,里
静态链接库文件 选择以静态方式链接链接库的应用程序便会使用这些静态库文件。这 些包的文件名格式为IibLIBRARY_NAME.a,例如libdl的静态包 文件就是libdl.a。
链接库组件
ld libBrokenLocale
内容提要
动态链接器 必要
引用提示
修正进程,让locale(本地) 很少用到 特性,有问题的应用程序得 以正常执行,经由预先加载 来覆盖应用程序的预,设值 (需使用LD_PRELOAD。) 很少用到 用来捕捉内存区段错误 (segmenta.tion fauh) 以及进行回溯的进程
Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、 jffs2、YAFFS、ramfs、romfs和nfs等,为了对各类文件系统进行统 一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为 各类文件系统提供一个统一的操作界面和应用编程接口。 Linux下的文件系统结构如下:
二进制目录Bin
在根文件系统上,存放二进制文件的目录主要有四个/bin、
/sbin、/usr/bin和/usr/sbin。二进制文件要放在其中哪 个目录,这与它在系统中所扮演的角色有很大的关系。如果这
是用户和系统管理员必备的二进制文件,就会放在/bin。如
果这是系统管理员必备、但是一般用户根本不会用到的二进制 工件,就会放在/sbin。相对而言,如果不是用户必备的二进 制文件,多半会放在/usr/bin;如果不是系统管理必备的工 具,多半会放在/usr/sbin。
根文件系统
简单的来说,根文件系统就是一种目录结构,那么根文件 系统和普通的文件系统有什么区别呢?其实根文件系统就 是要包括Linux启动时所必须的目录和关键性的文件,例
如Linux启动时都需要有init目录下的相关文件,在
Linux挂载分区时Linux一定会找/etc/fstab这个挂载 文件等,根文件系统中还包括了许多的应用程序bin目录 等,任何包括这些Linux系统启动所必须的文件都可以成 为根文件系统。
省RAM空间。uClinux系统通常采用Romfs文件系统。
Ramdisk:
Ramdisk是将一部分固定大小的内存当作分区来使用。
它并非一个实际的文件系统,而是一种将实际的文件系统 装入内存的机制,并且可以作为根文件系统。将一些经常 被访问而又不会更改的文件(如只读的根文件系统)通过 Ramdisk放在内存中,可以明显地提高系统的性能。
不同的文件系统类型有不同的特点,因而根据存储设备的 硬件特性、系统需求等有不同的应用场合。
在嵌入式Linux应用中,主要的存储设备为RAM(通常是 SDRAM)和ROM(常采用FLASH存储器),常用的基于 存储设备的文件系统类型包括:jffs2, yaffs, cramfs,
romfs, ramdisk, ramfs/tmpfs等。
libSegFault
libanl
libc libcrypt
异步名称查询进程
主C链接库进程 密码学进程
很少用到
必要 大多数涉及认证之应用程序 需要用到
libdl
libra
用来动态加载共享目的文件 的进程
数学Hale Waihona Puke Baidu程
使用dlopen()之类函数的 应用程序需要用到
数学函数需要用到
libmemusage libnsl libnss_compdt libnss_dns libnss_files libnss_hesiod libnss_nis libnss_nisplus libpcprofile
因为/sbin/init是/bin/busybox的符号链接,所以 BusyBox是目标板系统上执行的第一应用程序。当 BusyBox知道调用它的目的是要执行init,它会立即跳
转到init进程。
BusyBox的init进程会依次进行以下工作:
为init设置信号处理进程。
初始化控制台。
剖析inittab文件、/etc/inittab文件。 执行系统初始化的命令行。
yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系
统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更 快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,
除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。