Linux剪裁方式研究2006
Linux系统应用愈加广泛,但该系统庞大,剪裁困难。基于保留内核和系统必需文件的原则,介绍了当前应用较广的几种方式。
Linux剪裁原理:
剪裁Linux系统,必须首先了解Linux系统的启动过程、系统文件结构和软件安装方式。
Linux系统的启动过程大致包括bios2部份、引导磁道、内核、根文件及系统初始化。根文件目录框架包括目录/bin、/sbin、/usr、/etc、/dev、/root、/boot、/mnt、/proc、/home和lib。
常见的几种方式:(1)订制安装法。(2)rpm剪裁法。(3)手工删掉法。
使用busybox后须要改变原先Linux系统的初始化过程,由于busybox的一些命令与原先的有些区别,会造成Linux系统不能否顺利初始化,同时也可以进一步缩小Linux。
Linux根文件系统是Linux内核启动期间进行的最后操作之一,它是Linux嵌入式系统的一个重要组成部份,系统地剖析了Linux嵌入式系统根文件系统的类型,内容选择以及制做方式。
Linux嵌入式系统根文件系统的选择与制做2006
Linux应用于嵌入式系统的开发有如下一些优点:
(1)Linux自身具备一整套工具链,容易自行构建嵌入式系统的开发环境和交叉运行环境,而且可以跨越在嵌入式系统开发中仿真工具ICE的障碍。
(2)内核的完全开放,可以自己设计和开发出真正的硬实时系统;对于软实时系统,在Linux中也容易实现。
(3)强悍的网路支持,可以借助Linux的完了过合同栈将其开发成为嵌入式的TCP/IP网路合同栈。
而/home/mnt/opt/root是针对多用户的,所以嵌入式系统中可以不要,是否要boot目投档决于加载程序是否会在内核启动之前从根文件系统拿回内核。注意储存二补码的几个目录:/bin/sbin/usr/bin/usr/sbin的区别,/bin储存用户和管理员都必需的命令,/sbin储存管理员必备的命令而普通用户不须要的,/usr/bin储存的不是用户必备的命令,/usr/sbin不是管理员必备的命令。
/lib里的文件可以用glibc的也可以选用uClibc的,前者与后者兼容,容积小好多。必须包含的库文件主要有两类:以*.so结尾实际的库文件和以*.so.version主修版本联接文件,它们是在程序运行时使用。必须包括下述文件:
ld-2.1.3.solibutil-2.1.3.sold-linux.so.2libutil.so.1libc-2.1.3.solibtermcap.so.2.0.8libc.so.6libtermcap.so.2libcrypt-2.1.3.solibresolv.so.2libcrypt.so.1libresolv-2.1.3.solibdb-2.1.3.solibpthread.so.0libdb.so.3libpthread-0.8.solibdl-2.1.3.solibproc.so.2.0.0libdl.so.2libnss-files.so.2libm-2.1.3.solibnss-files-2.1.3.solibm.so.6libnss-dns.so.2libnsl-2.1.3.solibnss-dns-2.1.3.solibnsl.so.
/etc目录包含了Linux的配置文件,它们决定Linux的引导,运行特点。
Ramdisk上的Ext2fs
优点:稳定、可靠、健壮,即可在所有基于Linux的系统上都可使用Ext2fs。
缺点:(1)Ext2fs是为IDE设备那样的块设备设计的,这种设备的逻辑块大小是512字节,1K字节等这样的倍数。不太适宜于磁道大小因设备不同而不同的闪存设备。(2)Ext2fs没有提供对磁道的擦除/写操作的良好管理。为了在一个磁道中擦除单个字节,必需将整个磁道复制到RAM,之后擦除,再重写入。(3)Ext2fs不能防御掉电的情况,不支持耗损平衡。
JFFS2
(1)JFFS2在磁道级别上执行闪存擦除/写/读操作比Ext2fs好。
(2)JFFS2提供了比Ext2fs更好的崩溃/掉电安全保护。
(3)专门为闪存芯片所创建,提供了更好的闪存管理。
CRAMFS
是一种被压缩的只读文件系统,压缩比50%,界于RAMDISK和JFFS2之间的一种文件系统。
TMPFS
基于显存的文件系统,主要用于降低对系统的毋须要的闪存写操作这一惟一目的。由于TMPFS留驻在RAM中,所以写/读/擦除操作发生在RAM而不是在显存中。还是用c盘交换空间来储存,但是当为储存文件而恳求页面时,使用虚拟显存子系统。
优点:(1)动态文件系统的大小可以依据具体的文件或目录数目来缩放。(2)因为留驻在RAM中,读写操作很快。
缺点:系统重新引导时,会遗失所有数据。
根文件系统的选择原则:
少flash,大RAM,RAMdisk可能是最佳选择。RAMdisk上的文件系统是经过压缩的,一般压缩比比原生文件系统(CRAMFS和JFFS2)高好多,并且会使用较高的RAM。假如须要永久性储存,不适宜使用RAMdisk。据悉,RAM价钱相对于flash要实惠linux课程,而且更耗电。
若果系统拥有稍稍多一点的flash,或则会尽可能给实际在目标版上执行的应用程序保留RAM空间,并且可以为运行时解压缩出若干额外的CPU周期,这么CRAMFS是个十分好的选项。其压缩比高于RAMdisk,但它的能力对大多数不须要永久储存性嵌入式的应拿来说早已够了。
假如须要随时改变文件系统的任何部份,JFFS2将会是最好的选择。JFFS2会为垃圾回收功能维护空间,但是它的元数据的结构容许文件系统的写入操作,所以JFFS2可以提供断电可靠性和耗损平衡这两个对使用flash系统来说十分重要的特点。而且假如使用NAND方式的flash设备,便不适宜使用JFFS2。
基于ARM的嵌入式Linux操作系统移植的研究2006
ARMLinux支持包括ARM7、ARM9、StrongARM等系列的ARM处理器,这种ARM处理器都带有显存管理单元MMU,对于不带显存管理单元的CPU,通常采用uClinux作为其操作系统。
略。
基于ARM的嵌入式文件系统研究与设计2010
在储存设备中,SD卡及兼容SD卡合同的TF卡以其容积小、接口简单、成本低、性能好、安全性高等特性在嵌入式储存设备中抢占了很大的市场份额。FAT文件格式以其兼容性好、应用广泛、安全性高、数据储存共享性好等优点被作为文件格式应用于嵌入式文件系统的涉及中。
μC/OS-II实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字讯号处理器。
略。
基于嵌入式Linux的Ext2根文件系统制做剖析2015
基于PowerPC架构下的MPC83798379E处理器,剖析了在Linux2.6内核的基础上制做Ext2根文件系统的全过程,并给出了烧录运行结果。根文件系统包含了一百多个常用Linux命令,涵盖了必备的链接库文件,压缩后的烧录镜像只有2.3MB,可满足大部份系统的要求。
PowerPC是1991年,由Apple、IBM、Motorola3家公司组成的AIM联盟退出了一种精简指令集微处理器架构,具有优异的性能、较低的能量耗损以及较少的散热量。
使用busybox来制做根文件系统。原始大小为14.1M,经ext2压缩以后为2.3MB。
嵌入式Linux剪裁研究2009
Linux操作系统设计的初衷是用于桌面,它是一个通用的操作系统。但因为嵌入式系统使用环境的限制,嵌入式系统自身的一些特殊性能要求,包括不同程序的实时性、系统的容积、功能、可移植性、可剪裁性等方面的要求,是的开发嵌入式的Linux系统要做许多工作。
嵌入式Linux系统的实时性问题
Linux是分时系统。Linux分为用户态和内核态两种模式,进程运行在用户态时,假若实时进程具有高的优先级,可占领进程;但若果运行在内核时,实时进程不能占领进程。在定时器上,也有一些缺陷:(1)Linux周期模式定时器频度仅为100Hz,远不能满足多种实时应用的要求。(2)软定时由时钟定时器完成,当软定时器较多时,势必导致共享时钟定时器的冲突。据悉,Linux进程采用多级轮转调度算法,一个进程在一个时间片内未完成,其优先级将减少。似乎给实时进程提供了较高的优先级,然而并没有加入时间限制。据悉,大量的非实时进程也可能对实时进程导致阻塞。
嵌入式Linux系统的GUI支持问题
嵌入式GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。一般具有重型、占用资源少、高性能、可配置的特征,一些较成熟的嵌入式GUI:Microwindows、MiniGUI、OpenGUI等。
嵌入式Linux系统的剪裁
两种形式:一是以一个早已安装好的系统为基础,删掉掉不须要的文件,以减少整个系统的规格,而事实上这个方式几乎是行不通的。二是从零开始按照须要建立整个系统,一个个安装须要的软件包。
一般包含三个部份:Linux内核,根文件系统和引导器。
Kernel提供了一个操作系统的基本功能,如显存管理,进程调度,文件系统,网路等,以及设备驱动程序。
Rootfilesystem是储存运行、维护系统所必须的各类工具软件、库文件、脚本、配置文件和其他特殊文件(如设备节点)的地方,也可以安装各类软件包。一般根文件系统坐落某个c盘分区。
BootLoader的任务是从引导设备装载内核,引导系统运行。Linux常见的有初期的LILO和近日的GRUB。
嵌入式Linux根文件系统的建立与剖析2015
Linux系统移植主要包括bootloader的移植、内核移植、根文件系统的移植。
嵌入式Linux共享库剪裁技术剖析与改进2009
Linux系统大致有以下4中主要的剪裁技术。
(1)删掉冗余文件。帮助文档、辅助程序、配置文件和数据模块等。
(2)共享库剪裁。嵌入式系统应用程序是有限的,共享库中可能有好多永远不会用到的冗余代码。
(3)采用具有通用功能的取代软件包。Linux上有许多具有相像功能的软件包,可以选择其中占储存空间较小的软件包并移植到嵌入式设备上。
(4)更改源码,包括重新配置、编译。除去不须要的功能,重新配置内核等。
在Linux系统中,应用程序与库之间可以静态链接或动态链接。静态链接时,链接器从库中选定应用程序须要的代码,之后复制到生成的可执行文件中。其实,当静态库被多个程序使用时,c盘上、内存中都是多份冗余拷贝。动态链接时,链接器并不真的把库代码复制到可执行文件中;仅当可执行文件运行时,加载器才检测该库是否早已被其它可执行文件加载进显存,假如显存中不存在才从c盘上加载该库。这样多个应用程序就可以共享库中的代码的同一份拷贝,节省了储存空间。
共享库和可执行文件中都有若干个符号表,其中定义了一些外部符号,分为导入(export)符号和导出(import)符号这两种。导入符号是指在该文件中定义但可以被其它文件使用的符号,通常是可以由其它文件调用的函数;导出符号是指被该文件使用了但并没有定义的符号,通常是被该文件调用的函数,并且导出符号通常指明了定义该符号的共享库。
共享库中就可能存在永远不会被别的文件调用到的导入符号,将这种符号的相应代码从共享库中删掉不会影响到系统的正常运行。
用nm、readelf或obidump等工具可以读出二补码文件(共享库或应用程序或其中间目标文件)中的所有外部符号的信息。
查找ψ中可能被应用程序和其它共享库用到的导入(入)符号。查找提供这种符号的目标文件并重新链接成较小的共享库。重复前两步操作直至剪裁不能继续进行为止。
不足:首先,上述库裁
剪技术的细度只达到了目标文件级linux 下载,未被裁切掉的目标文件中还是有毋须要的导入符号及代码;其次因为库的源码编撰没有规范的标准,导致剪裁难度加强;第三,不同体系结构须要有不同的剪裁处理。
嵌入式Linux系统的剪裁优化和测试技术2012
内核剪裁形式有多种,有基于原内核提供的kbuild体系的剪裁方式,有基于代码剖析的linux剪裁方式,有基于调用图的linux剪裁方式。基于短开发周期的需求考虑,选择采用kbuild体系的剪裁方式。Kbuild体系通过预定义一些变量(obj-m,obj-y)和目标(bzImage),使内核的编译和扩充显得非常便捷,具有很强的可订制性。
Y-将该功能编译进内核;
N-不将该功能编译进内核;
M-将该功能编译成可以在须要时动态插入到内核中的模块;
略。
嵌入式Linux系统的移植及其根文件系统的实现2005
系统板储存器空间分配
在宿主机上制做一个4MB大小的randisk根文件系统,流程如下:
ddif=/dev/zeroof=my_ramdiskbs=1kcount=4096
/*创建一个大小为4MB的块linux内核裁剪,读写块大小为1kB,输入文件/dev/zero,输出文件my_ramdisk*/
mke2fs-vm0my_ramdisk4096/*用mke2fs将my_ramdisk转换为4MB的ext2格式FS*/
mount-oloopmy_randisk/mnt/my_ramdisk_directory
/*用mount将my_ramdisk挂载到/mnt/my_ramdisk_directory目录,该目录应先建好*/
gzipmy_ramdisk/*压缩my_ramdisk,生成文件系统映像*/
面向应用的嵌入式Linux剪裁方式研究与实现2009
函数调用关系图的原理是提取程序工作过程中的各函数之间的调用关系,从而直观的呈现出整个程序的函数关系结构,帮助我们更好的理解内核结构。将应用程序、系统库以及内核具象下来,构造一个整体的函数调用关系结布光,之后按照这个关系图删掉毋须要的代码,最终所得到的将是面向应用的嵌入式Linux系统。
因为面向应用的剪裁方式主要是依据嵌入式系统早期所设计的具体应用目标,采用从上到下步步深入的代码剖析的方式,进而能得到针对具体应用量体裁衣,按需剪裁,获得比较理想的剪裁率。在实际的嵌入式系统中,系统的应用范围在系统设计早期早已确定,但是之后修改的可能性比较小,因而可以采用面向应用的剪裁方式。
微型嵌入式实时操作系统文件系统2015
略。
基于ARM的嵌入式Linux移植技术2010
嵌入式操作系统种类繁杂,常见的使用广泛的有:嵌入式Linux、WindowsCE、VxWorks、μC/OS-II、PalmOS等。
嵌入式Linux特征:源代码开放,技术支持强悍。内核稳定可靠,剪裁后十分小,效率高,半年左右就有新的内核版本发行。uClinux是专为没有显存管理单元或虚拟显存的处理器而涉及的嵌入式操作系统。
WindowsCE特征是模块化、结构化、与处理器无关、图形用户界面出众、基于Win32应用程序插口、产品开发较为容易等。
Vxworks是一款实时性很强的嵌入式操作系统,可靠性良好、用户开发环境友好、内核性能高、任务可剪裁。价钱不菲。
μC/OS-II,用ANSIC编撰了绝大部份源码,移植性强、支持8位、16位、32位处理器,源码开放,结构精巧,可剪裁linux内核裁剪,可固化,占领式实时多任务等。
PalmOS,特征是强悍的灵活性和联通性,性能稳定,设计简约高效,应用程序丰富,操作系统插口开放。
目前关于Linux内核剪裁有三种方式:
(1)Linux自带的配置编译工具,可以使用该工具对Linux内核编译、定制。
(2)对内核源代码更改实现系统剪裁。
(3)以系统调用关系为基准对Linux内核进行剪裁。
根文件系统在传统PC机上挂载主要有两种方法,一种是Ramdisk加载,另一种是通过硬碟的直接挂载来实现。因为嵌入式系统资源有限,好多情况下都是通过Flash启动。嵌入式系统对根文件系统的加载主要通过两种方式来实现。一种实现途径是加载根文件系统到RAM的Ramdisk。开机启动时一部份显存会被Ramdisk虚拟称块设备,同时把压缩好的文件系统映像进行解压缩,最后储存在Ramdisk中。另一种实现途径是MTD驱动。嵌入式中好多系统,例如YAFFS、YAFFS2、Cramfs、JFFS2等都可以被安装称MTD块设备。Flash芯片驱动也在MTD中包含,这些驱动程序主要面对下层,实现读、写、擦除等相关操作,MTD负责封装这种操作,之后为用户层提供设备,设备的类型主要有MTDblock和MTDchar。
基于ARM的嵌入式Linux移植与剪裁研究2007
太旧,略。
基于ARM的嵌入式平台的研究与实现2009
本轮述说了一个移植bootloader、kernel、rootfs案例。类似其他论文。
基于ARM的嵌入式闪存驱动与UBIFS文件系统的剖析与实现2014
大多数通用文件系统都是针对速率较慢的传统硬碟开发的,缓存技术须要花费大量系统资源,而嵌入式系统本身的系统资源就比较有限;嵌入式系统应用场合通常比较恶劣,而通用文件系统的可靠性不足;NANDFlash的插口访问不同于传统硬碟,如使用通用文件系统未能保证NANDFlash的ECC校准与坏块管理机制的灵活性。
为了能降低NANDFlash使用寿命与减短文件系统挂载时间,UBIFS应运而生。它具有耗损平衡、垃圾搜集和坏块管理等机制。相比较早出现的YAFFSJFFS等,有优秀的启动速率,占用显存更少,在大容量NANDFlash应用上表现尤其突出。
JFFS2读写速率块,并且挂载速率慢。
RawFlash与其他Flash的区别
UBI只能工作在RawFlash上。UBI提供了基于MTD分区之上的卷分区与坏块管理、损耗均衡机制。UBIFS工作在UBI卷之上,无需关系MTD层与Flash层的操作。
UBIFS的异地更新机制。
UBIFSVSYAFFS2,启动时间快5s左右。
精简型嵌入式文件系统设计2010
对于存在寿命问题的Flash储存介质来说,传统文件系统是不能直接使用的,必须降低Flash转换层FTL,但性能会收到FTL困局的约束而大大增加。
当更改或新建的文件写入储存器时,传统文件系统在写入文件内容时,并没有同时写入文件的元数据(meta-data,与文件有关的信息,比如:权限、所有者以及创建和访问时间),而是等到有空的时侯才写入。假如在写入文件的元数据是忽然断电,会导致不一致,好多不一致,会造成很严重的后果。日志文件系统能挺好的解决这个问题。日志文件系统用独立的日志文件跟踪c盘内容的变化。在任何写入前,现将系统改动写入日志尾部,当断电时,只要测量日志尾部,就可以迅速回复整个系统,大大减短了系统崩溃的恢复时间。日志文件系统主要分为两类:
(1)LogStructure日志文件系统:日志是整个系统的惟一结构,整个c盘被看做一个大的日志文件,整个c盘都由日志来管理,日志是文件系统在c盘上的惟一代表,所有的写操作都在日志的尾部进行。日志可以扩充,每次c盘块被更改后,它总要写往一个新的地址。这就意味着日志中的一些老的数据块变得过时,每隔一定的时间,消除程序会把它们回收,同时对这个c盘的日志数据进行整理:消除所有的过时块,把有线的数据集中到日志的逻辑意义上的尾部,这样日志逻辑上的前部能够过被重新借助了。
(2)MetaData日志文件系统:仅仅记录元数据的更改。文件系统在c盘上界定一块单独的区域,或则在文件系统内部制订一个特殊的文件来保存日志,把元数据的更改记录在日志的尾部。
NTFS文件系统重要特点:
(1)通用索引功能:文件可以构建关于任何属性的索引。
(2)大c盘和大文件:更有效地支持特别大的c盘和特别大的文件。
(3)多数据流:文件的实际内容被当成字节流来处理。
(4)可恢复性:当发送故障时,NTFS能重建文件卷,并返回到一致的状态。NTFS都会对重要的系统数据进行冗余储存。
(5)安全性:使用Windows对象模型来施行安全机制。
REFS是一种针对NANDFlash储存介质涉及的嵌入式文件,负责对嵌入式系统中的Flash储存器空间进行有效的组织和管理,并对用户或进程提供以文件为对象的操作方式函数。
(1)具有耗损平衡特点
(2)文件读写符合NANDFlash的页读写和块擦除特征
(3)坏块管理能力
(4)具有恢复文件和系统自我修补能力,增强可靠性
(5)具有良好的时间性能
(6)具有可移植和可扩充性能。
嵌入式Linux内核剪裁及移植的研究与实现2009
略。
嵌入式储存设备上文件系统的设计与实现2007
略。
嵌入式设备中基于NANDFlash的文件系统设计和优化2013
Flash储存器的优点:
(1)读性能的一致,无寻道和旋转操作下,使随机读性能与次序读性能几乎一致;
(2)与富含机械组成的c盘相比,Flash储存器的读、写延后显著增加;
(3)高可靠性,平均无故时间比c盘长一个数目级;
(4)低煤耗,单位时间内能量消耗显著高于RAM和c盘储存器。
嵌入式文件系统的研究与设计2007
略。
嵌入式Linux系统剪裁技术的剖析与研究2011
从软件的角度看,嵌入式Linux通常由Linux内核、文件系统、应用程序三个部份组成。因而现有的Linux的剪裁主要包括三个方面:内核的剪裁、Linux库剪裁、应用程序的剪裁。
内核剪裁:见前面所提。
库剪裁:可借助uClibc建立嵌入式Linux系统比glibc占用更小的空间。
应用程序的剪裁(shell),通常使用BusyBox来取代shell程序,大大减少系统的容积。
文章对现有的GNUlibc剪裁原理进行较细致的剖析,设计了新的GNUlibc剪裁方案。
嵌入式Linux系统订制和剪裁技术的研究与实现2006
略。
嵌入式系统中NANDFlash文件系统的研究2010
略。