基于embes的linux内核的剪断机_第1页
基于embes的linux内核的剪断机_第2页
基于embes的linux内核的剪断机_第3页
基于embes的linux内核的剪断机_第4页
基于embes的linux内核的剪断机_第5页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于embes的linux内核的剪断机

作为嵌入式系统的核心组成部分,嵌入式系统需要满足一些重要的功能,如嵌入式系统的有限资源、特定应用、特定硬件和应用应用。但是,每个嵌入式系统在功能、成本、体积、规模、实时性等各个方面的要求都不相同,因此研究与开发一个嵌入式实时操作系统来满足嵌入式系统多样性要求具有很重要的理论和现实价值,而嵌入式操作系统的可定制剪裁的研究对满足嵌入式系统的多样性要求同样具有重要的理论和实用价值。1系统的微内核在Linux系统结构中,系统内核是关键的核心部分,它向外提供了对计算机的核心管理调用,完成了操作系统的基本任务,一般来说,操作系统内核分为单内核和微内核两大类:单内核(monolithickernel):单内核将操作系统的所有功能都放入内核中,在单内核的结构中,内核是许多服务进程的集合,它们彼此相互调用,因而独立性与配置性有限。微内核(microkernel):微内核将许多操作系统功能放入分离的服务进程中,客户进程通过消息传递调用这些操作系统服务,其根本思想是保持微内核尽量的小,其他模块都依赖于微内核或其他内核。这种方式有助于实现模块间的隔离,因而具有很好的裁剪,配置性,选取微内核成为系统的一大潮流。系统却恰恰使用了单内核结构,由于Linux是一个实用主义的操作系统,它更注重功能的强大和高效率的代码,于是,全局性的优化必然以损失结构精练作为代价,导致Linux中的每一个部件都不能被轻易拆除,虽然Linux是个单内核操作系统,但它与传统的单内核UNIX操作系统不同,Linux使用了一种独特的模块机制。内核只保留启动系统必需的代码,而其他运行时才需要用到的代码(如网络、文件系统、各种驱动程序等)则被设计成内核的模块,在运行时由内核自动装入内存,Linux的这种模块机制在一定程度上弥补了单内核裁剪、配置能力差的弱点,Linux内核主要由5个子系统模块组成,如图1所示。2动态加载模块目前对Linux内核进行裁剪定制,主要有以下两种方法。(1)在不修改内核源代码的基础上,通过配置工具逐个定制裁剪生成配置文件,然后根据配置文件条件编译生成目标系统内核映象文件。第一步:通过命令tar解压内核,得到内核源代码目录,必须明确哪些需要在启动时被载入内核的映像中,哪些是需要时才载入的内核模块,而这些模块只能通过动态加载的方式才能完成对所需要内核的配置。第二步:执行命令makemrproper清除目录下所有的配置文件和先前生成核心时产生的中间文件,之后就可以对内核进行配置。第三步:Linux内核本身提供了基于字符和XWindow的配置工具,分别是:Smakeoldconfig(在原有内核配置基础上进行修改)Smakeconfig(基于文本的命令行方式配置界面)Smakemenuconfig(基于curses的全屏幕配置界面)Smakexconfig(基于XWindow图形窗口模式的配置界面)进行配置时,大部分选项可以使用其缺省值,只有一小部分需要根据用户不同的需要进行选择。例如,系统如果配有SCSI卡等,需要在网络配置中选择SCSI卡的支持。对每一个配置选项,用户有三种选择,它们分别代表的含义如下:“Y”——将该功能编译进内核;“N”——不将该功能编译进内核;“M”——将该功能编译成可以在需要时动态插入到内核中的模块。将与核心其他部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于缩减内核,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。动态加载是嵌入式开发中常用的手段,首先利用tftp,ftp或nfs将动态加载模块下载到目标板上,然后利用命令insmod加载模块,如果没有失败信息,利用命令lsmod查看模块表中是否有模块信息,通常该模块信息会以列表的方式列出,如果列表中有模块信息,则表明模块加载成功。如果想要卸载模块,则利用命令rmmod完成,输入命令lsmod,如果列表中没有该模块信息,说明操作成功。完成配置信息后,接着就是内核裁剪编译生成。第四步:在源代码目录执行命令makedep,该命令用于检查每一个目标文件(.o)对相应的头文件(.h)的依赖信息并记录在.hdepend和.depend文件中。如果使用了内核模块机制,则还要检查每一个能导出符号表的文件(包括模块文件和产生内核映像的驻留文件)的符号版本信息。第五步:完成检查文件间的依赖关系后,执行生成内核映像的命令makezImage/bzImage,如果生成的内核映像较小,一般内核映像在1M以下,采用makezImage,如果生成的内核映像较大,一般内核映像在1M以上,则采用makebzImage,它们采用了不同的映像布局和引导机制,可根据生成映像文件的大小加以选择。第六步:最后用makemodules命令生成所有的内核模块。具体的命令如下:(2)在对Linux内核的裁剪编译配置进行分析后,发现在内核裁剪配置时,只是把配置的功能选项信息保存在.config文件和autoconf.h文件中,然后提交给内核编译使用。这样,可以不用在裁剪内核时对内核裁剪配置进行手动选择,可以根据应用程序的需要,通过自动修改.config文件和autoconf.h文件,达到对嵌入式Linux内核自动裁剪配置,实现的方案如下。第一步:按照方法一,生成一个实时的嵌入式Linux内核。第二步:手工建立库函数与Linux内核功能对应关系的集合,为应用程序自动查找需要的功能部分做好准备。第三步:自动识别应用程序调用的与内核相关的函数,并根据这些库函数自动查找库函数与内核功能对应,生成特定应用程序需要的Linux内核功能集合。第四步:根据开发板的硬件情况及其它的一些应用需求,生成初始的.config文件和autoconf.h文件。第五步:有第三步的结果,根据对应的关系自动选择内核功能,修改.config文件和autoconf.h文件,添加一些相关的选项,生成最后需要的.config文件和autoconf.h文件。第六步:根据新的.config文件和autoconf.h文件,执行makedep和makezImage生成特定应用程序的嵌入试Linux内核的映像文件。方法一裁剪比较简单,只要执行makemenuconfig/xconfig/config对内核的需要的各个功能模块进行选择,然后执行命令makedep,makezImage生成裁剪的嵌入式内核,但是裁剪的粒度不够细,不能满足系统“量体裁衣”的标准。方法二通过修改.config文件和autoconf.h文件来提供细粒度的裁剪,需要开发人员对Linux内核机理清晰明确,而且非常熟悉Linux内核及编译机制。3cygwell-4实现本过程主要来源于项目“嵌入式Linux数据采集系统”的一部分,该项目以S3C2410处理器为平台,通过蓝牙把采集到的数据以无线通讯的方式传给上位机,蓝牙采用USB接口进行传输,因此在裁剪时把除HCIUSBdriver项以外均可以裁剪掉用于节省内存空间,而需要的蓝牙底层协议除SCOlinkssupport以外,都要选上。实验过程是基于EmbestEDUKIT-Ⅱ/Ⅲ实验平台、内核版本为2.4.18,补丁为patch-2.4.18-rmk.tar.bz2,交叉编译器为cross-2.95.tar.bz2,文件系统为root.cramfs.tar.bz2。第一步:安装Cygwin运行环境,安装过程中一般在ALL处设置为Install状态,即全部安装,加上存放编译工具和例程的空间,至少需要一个容量在2GB以上的分区,如果不全部安装,在后面的操作过程中会因为缺少源文件而无法进行下去。第二步:安装成功后双击桌面的Cygwin快捷方式,输入命令cd进入根目录,为完成编译环境变量与源文件路径与工作路径设置,输入命令Ssourcetmpedukit-2410set-env-linux.sh,通常每次打开Cygwin时,都需要执行一遍,以正确设置代码编译所需变量,若在Cygwinetcprofile文件的“exportPATH”行前插入本文件的内容,这样每次打开Cygwin时,本文件就可以自动运行了,注意如果此时必须关掉EMBESTIDE软件,否则两者之间会导致冲突,导致编译内核时产生错误,当输入命令makedep后,若Cygwin显示出错则有几种可能,一种是原来内核出现错误,这时必须从新解压内核,然后从新编译,另外一种是检查实验箱是否已经与主机连接,而且要保证接线接口正确,实验箱必须处于打开状态,因为软件的兼容性不好所以要关掉防火墙,否则也会有冲突现象发生,若宿主机IP为90,在主机命令行中输入ping90即可。第三步:开始对内核裁剪,依次执行如下命令:ScdSWORKDIRkernel出现内核配置图形界面。第四步:点击图1LoadConfigurationfromFile来选择S3C2410处理器的配置文件edukit2410-amd。第五步:点击OK,保存以后,然后对蓝牙模块进行配置来满足应用要求,点Bluetoothsupport选项,配置如下:“Y”—Bluetoothsubsystemsupport;L2CAPprotocolsupport;RFCOMMprotocolsupport;RFCOMMTTYsupport;BNEPprotocolsupport;Multicastfiltersupport;Protocolfiltersupport;“N”—SCOlinkssupport;HIDPprotocolsupport;第六步:接着点击Bluetoothdevicedrivers选项,因为主要进行USB通信,因此对其进行配置如下:“Y”—HCIUSBdriver;“N”—SCO(voice)support;HCIUARTdriver;HCIBlueFRITZ1USBdriver;HCIDTL1(PCCard)driver;HCIBT3C(PCCard)driver;HCIBlueCard(PC)driver;HCIUART(PCCard)driver;HCIVHCI(VirtualHCIdevice)driver;第七步:点击OK,然后点击SaveandExit,完成内核的配置,然后回到Cygwin界面,执行下列命令:完成对蓝牙通信内核的配置。本实验仅仅是对蓝牙内核进行裁剪,虽然仅减少了几K空间,但对内存的抗耗能力确是有很大的提高。4linux系统的定制深入理解Linux内核结构,熟练掌握内核模块间的调用关系,是掌握内核裁剪的关键所在,Linux已经具有一定的定制能力,目前的定制主要通过条件编译和动态模块加载来实现,Li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论