欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    嵌入式Linux系统小型化技术.docx

    • 资源ID:17755195       资源大小:23.21KB        全文页数:14页
    • 资源格式: DOCX        下载积分:15.18金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15.18金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式Linux系统小型化技术.docx

    嵌入式Linux系统小型化技术 摘要:介绍了Linux在嵌入式领域中的应用和宿主机、目的机开发形式,详细地给出了精简内核的实现经过。分析了glibc系统库和ELF文件格式的构造和其中的分享库裁剪技术的原理,提出并实现了一种库裁剪方案。关键词:嵌入式;Linux;小型化一、概述嵌入式Linux一般是指对标准Linux发行版本进展小型化裁剪处理之后,合适于特定嵌入式应用场合的专用Linux操作系统。嵌入式系统通常是资源受限的系统,无论是处理器计算才能还是RAM或者其他存储器容量都比拟“小。因此,怎样创立一个小型化的Linux作为操作系统开发成为首先需要考虑的问题。嵌入式Linux系统中普遍采用三层构造:核心层主要是Linux内核和模块;调用接口层是以glibc库为主的系统库;应用层是根据用户需求设计的应用程序。为了实现资源的高利用率,后两层都以ELF文件形式存在,在运行经过中对外部功能代码动态加载。一般来讲,建立穿插平台开发环境是进展嵌入式软件开发的第一步。宿主机与目的机硬件平台的异构处理器体系构造不同是采用穿插开发的根本原因。另外,由于资源有限,直接在嵌入式系统的硬件平台上开发软件不方便、甚至不可能。因此,通常采用HostTarget开发形式,如表l。宿主机Host目的机TargetPC或工作站,其中x86CPU占优势嵌入式系统硬件,处理器多样化x86,ARM,PowerPC,MIPS,68K等Windows、Linux等桌面操作系统,丰富的集成开发环境如WindRiver的Tornado软件资源有限,开发阶段通常从宿主机下载align=center表1穿插平台发环境的特点/align穿插平台开发环境包括穿插编译器、穿插调试器和系统仿真器,比方嵌入式Linux开发经常用的GNU工具链。开发者需要根据目的平台来选择适宜的GNU穿插编译器,然后在宿主机上面重新编译内核和其他软件,这样得到的目的代码才能拿到目的机上面运行。这个经过相当繁琐且容易出错。宿主机和目的机一般通过以太网或串口连接。目前,世界上出现了数以百计的嵌入式Linux开发方案和发行版本,比方:ETLinux,LPR,C-Linux,ThinLinux等开发源代码的工程,如表2所示。ETLinux设计用于在小型工业计算机,尤其足PC104模块上运行LinuxRouterProjectLPR的目的是用于路由器、接入效劳器、瘦效劳器等网络没备和嵌入式系统,可以安装在一张软盘上。类似的工程还有LinuxOnAFloppyLOAFC-Linux在没有MMU的系统L运行的Linux。同前支持MotorolaDragonBallM68EZ328,M68328,M68EN322,ColdFire,QUICC,ARM7TDMI,MC68EN302,AxisETRAX,Intei960,PRISMA,Atari68k等微处理器ThinLinux一个为嵌入式和特定应用制作的Linux发行版,运行在Intel和PC兼容硬件上align=center表2几种开放源代码的嵌入式Linux发行版/align另外,还有:CoventiveXLinux,LineoEmbedix,LynuxWorksBlueCat,MontaVistaLinux等商业公司的发行版。同时,针对实时环境,有RT-Linux、RTAI等实时扩展。近年度来,越来越多的目的系统选择了性价比不断进步的x86处理器和成熟的PC架构作为硬件平台。LinuxDevices网站进展的调查显示,嵌入式系统开发者在过去2年度和将来2年度选择x86处理器作为目的平台的比例分别为3l%和35%,高居首位。对于宿主机和目的机都是PC兼容平台的开发者来讲,除了沿用上述形式之外,有更简单的创立小型化Linux系统的方法:以一个常规的Linux发行版为根底,编译内核、复制所需的文件,并利用初始化RAM盘initrd:INITialRamDisk机制创立根文件系统,就可以快速实现一个小型化Linux系统。二、小型化技术Linux已经越来越广泛地应用于各种嵌入式设备中。但是一般的Linux发行版都非常庞大,很难用于只有有限存储空间的嵌入式设备。所以我们必须对Linux系统进展裁剪。Linux系统大致有以下4种主要的裁剪技术,使用这些技术可以有效地减小系统的尺寸且不会影响系统的性能。删除冗余文件。一般的Linux发行版中都包含很多帮助文档、辅助程序、配置文件和数据模板,在嵌入式系统中这些文件都是不必要的,完全可以删除。甚至连配置文件中的大量注释也都可以被去掉。分享库裁剪。嵌入式系统的应用程序是有限的,分享库中就可能有很多永远不会被用到的冗余代码,这些代码就可以被删除。采用具有同样功能的替代软件包。Linux上有许多具有相似功能的软件包,可以选择其中占存储空间较小的软件包并其移植到嵌入式设备上,用来代替原来占空间较大那些的软件包。修改源码。包括重新配置、编译软件包,去掉不需要的功能;增加软件的模块性,进而有利于进步裁剪效率;重新配置内核,去掉不需要的驱动和模块。1、精简内核与传统嵌入式操作系统的微内核Micro-kerne1体系构造不同,Linux内核采用的是整体式构造Monolithic,整个内核是一个单独的、非常大的程序。其优点是可以使系统的各个局部直接沟通,有效地缩短任务之间的切换时间,进步系统响应速度。缺点也是明显的,即内核尺寸比拟大,因为Linux内核不仅包括如任务调度、内存管理、中断处理等根本的操作系统功能,同时还包括文件系统、网络协议、没备驱动程序等功能。Linux内核是高度模块化、可配置的,通过配置使内核具有不同的功能,进而减小内核的大小。例如,Linux支持的文件系统种类很多,包括ext2、ext3、FAT、Reiserfs、JFS等。可以根据实际情况选择所需的文件系统,比方仅仅把ext2文件系统编译进内核。编译内核的主要步骤如下“#代表命令提示符:#cdusrsrc1inux-2.4#makemenuconfig#makedep;makeclean;makebzlmage编译成功的内核文件为archi386bootbzlmage。详细方法参考内核源代码包中的README文件。为了进一步增加灵敏性、减小内核尺寸,Linux还提供了可加载内核模块机制,内核中的很多功能可以编译为模块,在内核运行时动态加载,而不是直接编译进内核。然而在嵌入式Linux系统中更倾向于根据需要编译一个独立的内核,较少使用模块机制。这样得到的内核通常在几百kB甚至1MB左右,相对传统的嵌入式操作系统内核来讲是比拟大的比方包含文件系统和网络支持的VxWorks内核大约250kB。在进展内核配置时,开发者要比拟解析各功能模块之间的依赖关系,否那么有可能造成编译失败。而在VxWorks内核的配置经过中,假如破坏了依赖关系,有比拟明确的指示,进而防止这种错误。2、分享库裁剪在小型化技术中,分享库裁剪容易用软件实现,做成自动裁剪工具,效果最明显。下面重点介绍分享库小型化技术,分享库小型化的根本思想是通过提取和解析系统库内目的文件、符号的依赖关系,通过对这些依赖构造关系模型进展关系演算,根据应用程序中的符号信息,在库目的文件一级实现系统库的小型化实现上分为四步:a、确定待调函数集。在ELF文件内部,存在一个Elf32-Sym数组构造的符号表,用于内部符号定义和外部符号引用,通过对这个符号表的分析可以将ELF应用程序中待调符号系统函数抽取出来,进而建立一个应用程序-待调函数符号的多对多关系。b、确定系统库函数与目的文件的对应关系。系统库逻辑上分成:库、目的文件、符号三个层次,库和目的文件都是ELF格式,通过对库的映像文件_pic.a和每个目的文件中的符号表分析得到库。目的文件的定义关系、目的文件-符号定义关系和目的文件-符号调用关系。c、确定系统库目的文件之间的互相依赖关系。通过对步骤b中相关关系的关系演算得到目的文件-目的文件的完全依赖关系。d、生成小型化系统库。通过对应用程序-待调符号表和目的文件-目的文件依赖表的关系演算得到待调函数所依赖的目的文件集合,将它们进展重新链接即可得到最小化的库文件。2.1、分享库裁剪技术的原理分享库中保存着预先编译好的目的代码,一般是被应用程序反复使用的公用代码。在Linux系统中,应用程序与库之间可以静态链接或者动态链接。静态链接时,链接器从库中选取应用程序需要的代码,然后复制到生成的可执行文件中。显然,当静态库被多个程序使用时,磁盘上、内存中都是多份冗余拷贝。动态链接时,链接器并不真的把库代码复制到可执行文件中;仅当可执行文件运行时,加载器才检查该库是否已经被其它可执行文件加载进内存,假如内存中不存在才从磁盘上加载该库。这样多个应用程序就可以分享库中的代码的同一份拷贝,节约了存储空间。这也是嵌入式Linux系统使用分享库的主要原因。当使用静态链接库时,链接器会自动地只把库中被使用的模块链接到可执行文件中。但是这种方法没有用在分享库中,主要是因为在应用程序执行之前链接器并不知道应用程序最终用到了库中的哪些局部。因此要对分享库进展裁剪必须先分析动态链接的原理。分享库和可执行文件中都有假设干个符号表,其中定义了一些外部符号,分为导出export符号和导入import符号这两种。导出符号是指在该文件中定义但可以被其它文件使用的符号,一般是可以由其它文件调用的函数;导入符号是指被该文件使用了但并没有定义的符号,一般是被该文件调用的函数,而且导入符号一般指明了定义该符号的分享库。加载器在加载可执行文件或者分享库之前会先遍历它的每个导入符号,检查该符号的相关代码是否已在内存中,否那么先查找并加载定义该符号的分享库。由于嵌入式Linux系统中的应用程序和分享库一般都是确定的,分享库中就可能存在永远不会被别的文件调用到的导出符号,将这些符号的相应代码从分享库中删除不会影响到系统的正常运行。现有裁剪技术都是以上述原理实现的。下面那么详细分析它的实现方法。2.2、ELF文件符号提取ELF格式是UNIX实验室作为应用程序二进制接口而开发和发布的,ELF是目前广泛应用于Linux系统中的一种文件格式。2.2.1、ELF文件进程映像加载ELF文件开始局部是一个ELFHeader构造,它包含两个指针,分别指向两个数组构造:Programheadertable和Sectionheadertable,Programheadertable中的数组元素对文件内部的可执行代码段进展定位;Sectionheadertable中的数组元素保存相关重定位和动态链接信息装载器通过控制这两类数组实现进程映像的加载。2.2.2、ELF文件的符号表和重定位经过ELF文件的Sectionheadertable中有一个类型为SHT_DYNSYM的Section,该Section记录了创立进程映像所需要的所有符号。a、符号值确定和符号定位,ELF文件中字符串ectionshstrtab用于保存所有字符串,ELF头通过e_shstrndx域保存节头名字字符串表.shstrtab的节索引。ELF文件中符号名字域值是.shstrtab节的一个字符索引:Syrnbol构造中St_name对应相应的字符串表一个索引,在相应的字符串表中对应其符号值,St_value对应两类不同地址:对于文件内部定义符号,对应该符号内容的文件内部相对地址;对于外部调用符号,对应待调符号的地址已解析或者重定位表中的一个入口未解析。St_info保存符号的类型和相应的属性。b、被调符号重定位。符号表中,STT-SEC-TION对应重定位入口信息表。重定位入口以数组的形式存在于ELF文件中,其中的R_offset保存着应用于重定位行为的地址,而R_addend对应一个偏移用于计算要存储于重定位域中的值。R_info中给出受重定位影响的符号索引和重定位应用的类型。例如:当类型为R_386_JMP_SLOT时,符号值就对应一个.plt经过连接表入口的位置c、外部符号装载。对于外部符号代码的装载,装载器通过lazyMODE装载方式将外部符号代码加载到进程映像中:首次调用外部符号通过PLT0中的装载代码和PLT1中出栈参数将待调符号代码加载到.got表中;以后对此待调符号的调用通过对应.got表入口进展控制传输。2.2.3、ELF文件符号提取实现对每个介入动态链接的分享目的文件来讲,其程序头表Programheadertable有一个类型为PT_DYNAMIC的入口元素。该入口所指向的段.dynamicsection是一个Elf32_Dyn的构造数组.Elf32_Dyn构造中有一个属性标志d_tag和一个结合构造d_un,d_tag控制d_un中的解释。数组中下标为DT_SYMTAB的入口指向符号表。通过对符号表、重定位表、经过连接表、全局经过表的相关控制构造进展分析,完成文件定义符号和待调符号的别离提取,算法如下:ELF文件中定义符号和待调符号由其st_value所指的目的进展区分:对应于.plt表的待调符号需要重定位;对应于内部符号,假如是弱类型WEAK或者全局类型GL0BOL那么用于其它文件调用。通过对ELF格式中的待调符号的提取,建立起应用程序和符号的依赖关系。2.3、嵌入式系统小型化结果与分析对各个表进展连接得到应用程序依赖的目的文件集合。将集合中的目的文件无重复记录并重新连接进而得到最小化库。前后库中各数据比照见表3。小型化后,系统库内各组成局部显著减少,库被缩减近50%。对于日益庞大的嵌入式系统中的应用程序,根据库文件内部的依赖关系,在其根底上对应用程序进展优化裁减,对一般性应用可以使系统库减小40%50%。小型化前小型化后目的文件个1183符号个91184861显性依赖条38191887间接依赖条120273554251242480byte685032bytealign=center表3系统库小型化前后对照/align三、完毕语近年度来嵌入式Linux技术迅速开展,各种商业和开放源码的Linux发行版为不同的硬件平台、不同的应用环境提供了多种选择。Linux的文件系统事实上非常的庞大。构造一个嵌入式的Linux文件系统是一个很复杂的经过。怎样让文件系统在保证平安的前提下精简得更紧凑、运行得更有效率,是需要深化探究的一个课题。十分是,分享库裁剪技术能将库中大局部冗余代码裁剪掉,但要求库的源码编写比拟标准,不同体系构造需要有不同的处理等。但毕竟库裁剪领域才开展不久,还不是很成熟。经过对该技术长时间的测试,相信我们可以弥补它的缺乏,使它可以在嵌入式Linux领域广泛使用。通过以上方法,我们构造了一个精简的嵌入式版本的Linux文件系统,它使得内核在系统尽量精简的情况下可以运行起来并知足产品和系统各方面的要求。0

    注意事项

    本文(嵌入式Linux系统小型化技术.docx)为本站会员(安***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开