嵌入式Linux系统小型化技术
发布时间:2007/8/30 0:00:00 访问次数:524
作者Email: zhh@httc.cn
介绍了Linux在嵌入式领域中的应用和宿主机、目标机开发模式,详细地给出了精简内核的实现过程。分析了glibc系统库和ELF文件格式的结构和其中的共享库裁剪技术的原理,提出并实现了一种库裁剪方案。
关键词 嵌入式;Linux;小型化
一、 概述
嵌入式Linux一般是指对标准Linux发行版本进行小型化裁剪处理之后,适合于特定嵌入式应用场合的专用Linux操作系统。嵌入式系统通常是资源受限的系统,无论是处理器计算能力还是RAM或其他存储器容量都比较“小”。因此,如何创建一个小型化的Linux作为操作系统开发成为首先需要考虑的问题。嵌入式Linux系统中普遍采用三层结构:核心层主要是Linux内核和模块;调用接口层是以glibc库为主的系统库;应用层是根据用户需求设计的应用程序。为了实现资源的高利用率,后两层都以ELF文件形式存在,在运行过程中对外部功能代码动态加载。
一般来说,建立交叉平台开发环境是进行嵌入式软件开发的第一步。宿主机与目标机硬件平台的异构(处理器体系结构不同)是采用交叉开发的根本原因。另外,由于资源有限,直接在嵌入式系统的硬件平台上开发软件不方便、甚至不可能。因此,通常采用Host/Target开发模式,如表l。
宿主机(Host)目标机(Target)
硬件PC 或者工作站,其中x86CPU占优势嵌入式系统硬件,处理器多样化(x86,ARM,PowerPC,MIPS,68K等)
软件Windows、Linux等桌面操作系统,丰富的集成开发环境(如WindRiver 的Tornado)软件资源有限,开发阶段通常从宿主机下载
表1 交叉平台发环境的特点
交叉平台开发环境包括交叉编译器、交叉调试器和系统仿真器,比如嵌入式Linux开发经常用的GNU工具链。开发者需要根据目标平台来选择合适的GNU交叉编译器,然后在宿主机上面重新编译内核和其他软件,这样得到的目标代码才能拿到目标机上面运行。这个过程相当繁琐且容易出错。宿主机和目标机一般通过以太网或者串口连接。目前,世界上出现了数以百计的嵌入式Linux开发计划和发行版本,比如:ETLinux,LPR,μC-Linux,ThinLinux等开发源代码的项目,如表2所示。
名称特点
ETLinux设计用于在小型工业计算机,尤其足PC/104模块上运行
Linux
Router
ProjectLPR 的目标是用于路由器、接入服务器、瘦服务器等网络没备和嵌入式系统,可以安装在一张软盘上。类似的项目还有Linux On A Floppy(LOAF)
μC-Linux在没有MMU 的系统L运行的Linux。同前支持Motorola DragonBall (M68EZ328), M68328,M68EN322, ColdFire, QUICC, ARM7TDMI,MC68EN302,Axis ETRAX,Inte]i960,PRISMA,Atari 68k等微处理器
ThinLinux一个为嵌入式和特定应用制作的Linux发行版,运行在Intel和PC兼容硬件上
表2 几种开放源代码的嵌入式Linux发行版
另外,还有:Coventive XLinux,LineoEmbedix,LynuxWorks BlueCat,MontaVista Linux等商业公司的发行版。同时,针对实时环境,有RT-Linux、RTAI等实时扩展。近年来,越来越多的目标系统选择了性价比不断提高的x86处理器和成熟的PC架构作为硬件平台。LinuxDevices.com网站进行的调查显示,嵌入式系统开发者在过去2年和未来2年选择x86处理器作为目标平台的比例分别为3l%和35%,高居首位。
对于宿主机和目标机都是PC兼容平台的开发者来说,除了沿用上述模式之外,有更简单的创建小型化Linux系统的方法:以一个常规的Linux发行版为基础,编译内核、复制所需的文件,并利用初始化RAM盘(initrd:INITial Ram Disk)机制创建根文件系统,就可以快速实现一个小型化Linux系统。
二、 小型化技术
Linux已经越来越广泛地应用于各种嵌入式设备中。但是一般的Linux发行版都非常庞大,很难用于只有有限存储空间的嵌入式设备。所以我们必须对Linux系统进行裁剪。Linux系统大致有以下4种主要的裁剪技术,使用这些技术可以有效地减小系统的尺寸且不会影响系统的性能。① 删除冗余文件。一般的Linux发行版中都包含很多帮助文档、辅助程序、配置文件和数据模板,在嵌入式系统中这些文件都是不必要的,完全可以删除。甚至连配置文件中的大量注释也都可以被去掉。② 共享库裁剪。嵌入式系统的应用程序是有限的,共享库中就可能有很多永远不会被用到的冗余代码,这些代码就可以被删除。③ 采用具有同样功能的替代软件包。Linux上有许多具有相似功能的软件包,可以选择其中占存储空间较小的软件包并其移植到嵌入式设备上,用来代替原来占空间较大那些的软件包。④ 修改源码。包括重新配置、编译软件包,去掉不需要的功能;增加软件的模块性,从而有利于提高裁剪效率;重新配置内核,去掉不需要的驱动和模块。
1、精
作者Email: zhh@httc.cn
介绍了Linux在嵌入式领域中的应用和宿主机、目标机开发模式,详细地给出了精简内核的实现过程。分析了glibc系统库和ELF文件格式的结构和其中的共享库裁剪技术的原理,提出并实现了一种库裁剪方案。
关键词 嵌入式;Linux;小型化
一、 概述
嵌入式Linux一般是指对标准Linux发行版本进行小型化裁剪处理之后,适合于特定嵌入式应用场合的专用Linux操作系统。嵌入式系统通常是资源受限的系统,无论是处理器计算能力还是RAM或其他存储器容量都比较“小”。因此,如何创建一个小型化的Linux作为操作系统开发成为首先需要考虑的问题。嵌入式Linux系统中普遍采用三层结构:核心层主要是Linux内核和模块;调用接口层是以glibc库为主的系统库;应用层是根据用户需求设计的应用程序。为了实现资源的高利用率,后两层都以ELF文件形式存在,在运行过程中对外部功能代码动态加载。
一般来说,建立交叉平台开发环境是进行嵌入式软件开发的第一步。宿主机与目标机硬件平台的异构(处理器体系结构不同)是采用交叉开发的根本原因。另外,由于资源有限,直接在嵌入式系统的硬件平台上开发软件不方便、甚至不可能。因此,通常采用Host/Target开发模式,如表l。
宿主机(Host)目标机(Target)
硬件PC 或者工作站,其中x86CPU占优势嵌入式系统硬件,处理器多样化(x86,ARM,PowerPC,MIPS,68K等)
软件Windows、Linux等桌面操作系统,丰富的集成开发环境(如WindRiver 的Tornado)软件资源有限,开发阶段通常从宿主机下载
表1 交叉平台发环境的特点
交叉平台开发环境包括交叉编译器、交叉调试器和系统仿真器,比如嵌入式Linux开发经常用的GNU工具链。开发者需要根据目标平台来选择合适的GNU交叉编译器,然后在宿主机上面重新编译内核和其他软件,这样得到的目标代码才能拿到目标机上面运行。这个过程相当繁琐且容易出错。宿主机和目标机一般通过以太网或者串口连接。目前,世界上出现了数以百计的嵌入式Linux开发计划和发行版本,比如:ETLinux,LPR,μC-Linux,ThinLinux等开发源代码的项目,如表2所示。
名称特点
ETLinux设计用于在小型工业计算机,尤其足PC/104模块上运行
Linux
Router
ProjectLPR 的目标是用于路由器、接入服务器、瘦服务器等网络没备和嵌入式系统,可以安装在一张软盘上。类似的项目还有Linux On A Floppy(LOAF)
μC-Linux在没有MMU 的系统L运行的Linux。同前支持Motorola DragonBall (M68EZ328), M68328,M68EN322, ColdFire, QUICC, ARM7TDMI,MC68EN302,Axis ETRAX,Inte]i960,PRISMA,Atari 68k等微处理器
ThinLinux一个为嵌入式和特定应用制作的Linux发行版,运行在Intel和PC兼容硬件上
表2 几种开放源代码的嵌入式Linux发行版
另外,还有:Coventive XLinux,LineoEmbedix,LynuxWorks BlueCat,MontaVista Linux等商业公司的发行版。同时,针对实时环境,有RT-Linux、RTAI等实时扩展。近年来,越来越多的目标系统选择了性价比不断提高的x86处理器和成熟的PC架构作为硬件平台。LinuxDevices.com网站进行的调查显示,嵌入式系统开发者在过去2年和未来2年选择x86处理器作为目标平台的比例分别为3l%和35%,高居首位。
对于宿主机和目标机都是PC兼容平台的开发者来说,除了沿用上述模式之外,有更简单的创建小型化Linux系统的方法:以一个常规的Linux发行版为基础,编译内核、复制所需的文件,并利用初始化RAM盘(initrd:INITial Ram Disk)机制创建根文件系统,就可以快速实现一个小型化Linux系统。
二、 小型化技术
Linux已经越来越广泛地应用于各种嵌入式设备中。但是一般的Linux发行版都非常庞大,很难用于只有有限存储空间的嵌入式设备。所以我们必须对Linux系统进行裁剪。Linux系统大致有以下4种主要的裁剪技术,使用这些技术可以有效地减小系统的尺寸且不会影响系统的性能。① 删除冗余文件。一般的Linux发行版中都包含很多帮助文档、辅助程序、配置文件和数据模板,在嵌入式系统中这些文件都是不必要的,完全可以删除。甚至连配置文件中的大量注释也都可以被去掉。② 共享库裁剪。嵌入式系统的应用程序是有限的,共享库中就可能有很多永远不会被用到的冗余代码,这些代码就可以被删除。③ 采用具有同样功能的替代软件包。Linux上有许多具有相似功能的软件包,可以选择其中占存储空间较小的软件包并其移植到嵌入式设备上,用来代替原来占空间较大那些的软件包。④ 修改源码。包括重新配置、编译软件包,去掉不需要的功能;增加软件的模块性,从而有利于提高裁剪效率;重新配置内核,去掉不需要的驱动和模块。
1、精