摘要:Yocto Project是一个开源项目,可以在任意硬件上(如x86、x86-64、ARM、PPC、MIPS)为任意嵌入式设备构建自定义嵌入式Linux应用所需的模板、工具和资源,极大地简化了开发过程。本设计主要基于Yocto Project在嵌入式设备上轻松定制嵌入式Linux应用,并实现Yocto Project的定制过程。
关键词:Linux;Yocto Project;定制系统
引言
Linux作为嵌入式系统的主要工具,具有源代码开放、完全可定制、支持许多网络协议、服务器级别高、可靠性高等很多优点。但现有的嵌入式Linux市场开始分化,现有的选择包括半导体厂商提供的实例方案、嵌入式OSV提供商应用的嵌入式Linux产品、嵌入式产品开发商的自有方案和开源项目等。由于缺乏一致性,造成了嵌入式开发高昂的维护成本,不仅嵌入式开发缺乏足够的专业人员,而且开发过程存在安全漏洞问题。在Yocto Project项目中,可以使用许多高效的工具,从而轻松定制嵌入式Linux产品。
1 YoCto Proiect的原理和架构
Yocto Project是一个开源项目,由Linux Foundation主导并被嵌入式业界领导者所支持。Yocto Project与OpenEmbedded兼容,后者包括了许多开源项目的构建方法,可以作为Yocto Project的有效补充。Yocto Project提供基于社区测试的支持多种架构的镜像。Yocto Project的优点如下:具有高质量的构建系统,平等地支持所有主流的嵌入式架构(ARM、Power PC、MIPS、x86(32&64位)),紧密跟踪许多上游开源项目的最新发布版本,具有统一的Linux BSP格式和应用程序开发套件,还可轻松地实现从原型切换到商用嵌入式Linux产品。
Yocto Project架构中用户自定义层由用户根据需求定制,包括定制层、BSP(Board Support Package)层、特性层和核心元数据(CoreRe cipe)层。上层开源组建最常用的命令为BusyBox和Eglibc等。架构中应用的开发套件,由Poky构建系统生成交叉工具链,使用ADT installer来定制交叉开发环境,可以支持在目标系统和sysroot上的包管理架构,包括Eclipse/Anjuta集成开发环境的插件、调用安装好的交叉工具链,以及模板和调试工具。元数据准备好了由元工具(bitbake)解析、执行。元工具抽象构建一个软件过程中的fetch、unpack、patch、configu re、cornpile、packagc等任务;同时,元工具还负责按不同软件之间的依赖关系有序地执行编译。编译成功后,用户自定义的Yocto镜像就可以在嵌入式设备上使用。Yoto Project架构图如图1所示。
2 构建嵌入式系统
构建嵌入式系统是一个嵌入式Linux项目的核心,构建系统需要定义一组语义让开发者可以描述一个特定的构建任务,嵌入式系统负责交叉编译一个项目的整个过程,包括下载源代码、打上特定的补丁、配置、编译、安装,并将安装结果按指定格式打包。构建的嵌入式系统还要并发调度多个构建任务。好的构建系统决定了一个嵌入式Linux开发环境的效率和友好度。Yocto内核使用GIT进行源代码管理,内核功能被组织成小的集合,方便深入定制化并支持多种内核开发流程和管理技术。所使用的应用开发套件是由Poky构建系统生成的交叉工具链,使用ADT installer来定制交叉开发环境,支持在目标系统和sysroot上的包管理架构,包括RPM、DEB、IPK,支持Eclipse/Anjuta集成开发环境的插件,而且还可以使用Qemu作为模拟器,模拟器支持基于OpenGL的应用开发(QemuGL加速)。
(1)元数据Recipe
一份Recipe包括了一组元数据,而这些元数据则定义了与一个项目相关的构建信息:源代码的地址,项目相关的特定配置参数,如何编译、安装和打包数据。丰富的类文件有助于最大程度地重用元数据,由Profile决定选择哪些Recipe。Yocto Project包括了一些事例Profi le,一份完整工作的Recipe可能只需要3行元数据。
(2)元数据层
元数据可以相互层叠,以很低的维护成本来进行深层次的定制化,同时还可以增加新的项目,调整架构相关的编译标志,覆盖某个项目特定的配置选项。
开发者提供元数据(食谱或菜谱),食谱是由一种标记性的语言所写,由元工具(bitbake)解析、执行。每份食谱都是描述某个软件的“清单”,例如:源代码从哪里下载,需要哪些补丁文件,可能需要哪些特殊编译链接选项,打包时需要的特殊配置,依赖哪些其他软件等相关信息。元工具则抽象了构建一个软件过程中的fetch、unpack、patch、configure、compile、package等任务;同时,元工具还负责按不同软件之间的依赖关系有序地执行编译。
3 智能车载系统硬件设计
随着汽车电子的发展,智能车载系统越来越受到关注,智能车载系统通过信息的传递为车辆提供出行指引、安防、救援、远程故障诊断等服务。远程信息服务(Telematics)即通信网络为安装在车上的资讯系统平台提供的多样化的信息服务。TelematicS系统可分为车前座系统、车后座系统,以及车况诊断系统。
其中,车前座系统提供的服务包括通信、导航、行车安全监视、联网资讯、路况、天气等;车后座系统的服务包括在线下载影音资讯、在线网络游戏等;车况诊断系统的服务包括保养通知、车况预警等。目前,在车载智能系统中有日产的Carwings、通用公司的Onstar、丰田公司的G-BOOK、一汽奔腾公司的D-Partner以及荣威公司的inKanet等。其中,OnStar是以安防为主的Telematics服务,G—Book是以资讯及娱乐为主的Telematics服务。
Telematics服务功能如下:
①卫星定位:通过GPS配合路线资讯,作路况报道与路线指引;
②道路救援:行车过程中,假使发生车祸或故障意外,通过按键自动联系救援;
③汽车防窃:通过卫星定位提供失窃车辆的搜寻与追踪,并短信通知车主;
④自动防撞系统:通过传感器或雷达,感应车与车间的安全行驶距离;
⑤车况掌握:车辆性能与车况的自动侦测、维修诊断等;
⑥个人化资讯接收:收发电子邮件与个人化资讯等;
⑦多媒体娱乐资讯:高画质与高音质的视听设备、游戏机、上网机、个人资讯中心随选视讯等。
⑧拖车追踪:是一种追踪通过安装在拖车的翼卡车联网和移动通信网络或卫星通信定位数据的技术。
⑨紧急救援:车主在行车过程中如遇到车辆缺油、缺水、故障等现象,可通过按下紧急按钮向服务中心进行求救。
根据智能车载系统的功能需求,把车载系统的硬件结构以模块的形式实现,智能车载系统硬件结构框图如图2所示。
要实现卫星定位和道路紧急救援,需要通过GPS模块作路况报导与路线指引,道路救援和汽车防窃需要GSM/GPRS模块来通知车主和收发信息。多媒体娱乐资讯的用户交互需要液晶触摸屏和扬声器来实现,数据交互功能采用SD卡/USB存储。摄像头监控车内外实时的情
况,智能车载系统还需要加速度传感器来测量加速度。
4 智能车载系统软件设计和实现过程
采用Yocto project来定制智能车载系统的软件功能模块,如图3所示。智能车载系统的软件主要实现GPS模块、显示模块、控制模块、通信模块和娱乐模块等的功能等。
4.1 定制智能车载系统平台
在Yocto Project中,现有的元数据以功能集合来划分,通过Profile来定义用户所需要的集合,智能车载系统需要的功能有Wi—Fi、GPS、GPRS、USB、setial、keyboard、touchscreen等,所以只需要在Profile文件中修改目录:DISRO_FEATURES=”alsa ext2 touchscreen wifi usb serial keyboard…”
4.2 智能车载系统中添加一个新的项目
添加一个新项目只需要3行元数据,需要指定依赖关系、指定源代码地址、继承类,然后会根据继承的Yocto Project类来自动生成所需要的构建任务。
首先,要将源代码从网上下载。bitbake通过SRC_URI变量知道到哪里去下载源码。把需要的源代码地址指定:
SRC_URI=http://sourceforge.net/project/
4.3 定制实现过程
在Linux下安装好需要的包之后创建镜像:
$ wget http://www.yoctoprojlect.org/downloads/poky/poky-bernard-5.0.1.tar.bz2
$tar xjf poky-bernard-5.0.1.tar.bz2
$ source poky-betnard-5.0.1/poky-init-build-env poky-5.0.1build
用bitbak定制系统:
$bitbake-k poky-image-sato
使用模拟器,模拟器中用户可使用终端:
$pokyr-qemu qemux86
定制过程完成,用户可以定位车载、收发信息,并实时监控车内外情况以及享受听歌、播放视频、上网等智能车载系统功能。
结语
采用Yocto Project构建的智能车载系统,实现了智能车载的信息定位、信息收发、数据交互、实时监控、用户交互,以及多媒体娱乐功能,构建过程灵活简单。构建一个嵌入式Linux系统需要构建引导模块、内核和文件系统。这是一个相当复杂的过程,特别是文件系统的构建。Yocto Project就是为了简化嵌入式系统的构建过程而设计。由以上设计可以看出,Yocto Project提供足够的灵活性,定制化非常简单,当用户不需要应用程序的可移植性,并且用户的嵌入式设备需要深度定制化时,使用Yocto Prcject最为省时省力。