tag 标签: Embedded

相关博文
  • 2025-3-25 10:06
    0 个评论
    2025年3月11日,备受瞩目的Embedded World 2025国际嵌入式展在德国纽伦堡会展中心隆重开幕,数千家来自全球各地的科技企业汇聚于此,展示嵌入式技术的最新成果,探讨行业趋势,推动国际技术合作‌。 飞凌嵌入式作为国内专业的嵌入式核心控制系统研发、设计和生产的企业,在本次展会隆重亮相,展位号3-360,这也是飞凌嵌入式连续第3年参加Embedded World,坚持为全球产业上下游合作伙伴和客户展示和推广来自中国的嵌入式主控产品、动态方案和应用案例。 本次展会,飞凌嵌入式带来了基于NXP、TI、瑞芯微、全志等国内外知名芯片公司的最新平台及主流平台打造的嵌入式主控产品,包括嵌入式核心板、开发板、工控机和显控一体机等。 除了产品的静态展示外,飞凌嵌入式还带来了多个应用于不同领域的热门行业解决方案。 AI疲劳驾驶监测方案,可以精准识别驾驶员的疲劳状态以提高驾驶安全性;多核异构展示方案,充分利用M核和A核的协同工作进行实时采样、分析和显示;LVGL显示+快速启动方案,则提供了一种低资源消耗的可定制化图形界面方案;机械臂方案,实现了AI高效识别和实时精确控制的充分融合;AI物体识别方案,则是利用稳定的平台来实现高效模型推理和即时的预览与展示。 这些方案聚焦人工智能、智慧交通、工业物联网等多个领域,通过形象的动态演示,给来自全球各地的电子行业伙伴和观众带来了更加全面、更加多维的体验。
  • 热度 3
    2022-8-13 11:14
    1196 次阅读|
    0 个评论
    IAR Systems 助力韩国 Osong Medical Innovation Foundation(KBIO Health) 开发先进医疗设备
    IAR Embedded Workbench 创新工具促进智能医疗设备小型化、降低功耗、提高性能、加快开发速度 2022 年 8 月 11 日 — 全球嵌入式开发软件工具和服务供应商 IAR Systems 宣布,其嵌入式软件开发工具 IAR Embedded Workbench 正被韩国 Osong Medical Innovation Foundation ( KBIO Health ) 用于开发尖端医疗设备,加快智能医疗平台发展。 Osong Medical Innovation Foundation ( KBIO Health )是隶属于韩国保健福祉部的公共机构,旨在为开发世界一流的新药和先进医疗设备打造核心支持基础设施,以振兴医疗研发,并推广研究成果。 KBIO Health 先进医疗设备开发支持中心、新药开发支持中心、非临床支持中心和先进医疗设备开发支持中心等主要研究机构均使用了 IAR Embedded Workbench 来提高各种智能医疗设备的性能。 近期,支持医疗功能的智能医疗设备的需求正在不断上升。在智能手表、智能贴片或智能手环等设备的开发过程中,功能实现已成为核心。然而,关键问题是要减少设备佩戴不便、增加电池续航以最大限度延长工作时间、缩短开发周期、加快产品发布。 IAR Embedded Workbench 为这些挑战提供了解决方案。 IAR Systems 韩国区销售经理 Lee Hyundo 表示: “IAR Embedded Workbench 是全球医疗设备开发商的首选开发工具之一,它为开发多功能和可靠的嵌入式系统进行了优化。 ” Osong Medical Innovation Foundation 先进医疗设备开发支持中心光学应用团队 Sung-Jun Hong 博士解释说: “ 得益于高质量的优化技术,通过消除对额外内存库的需求来降低硬件要求, IAR Embedded Workbench 可以缩小智能医疗设备嵌入式软件的代码体积。 ” 同时,缩小软件代码体积也能加快开发过程。一般来说,代码体积越大,再加上代码添加和修改,构建软件的时间就越长。 “ 与我在其它开发项目中使用的设备制造商提供的免费工具相比, IAR Embedded Workbench 在构建类似体积的代码时的速度,至少提高了两倍。 ”Sung-Jun Hong 博士表示。 此外, IAR Embedded Workbench 还在 Osong Medical Innovation Foundation 开发的 “KBIO-eBAND” 智能手环的功耗最小化设计中发挥了重要作用。 Sung-Jun Hong 博士指出: “ 即使尽量将硬件设计为低功耗,设备的电流消耗依然会因软件的运行而变得非常大。但利用 IAR Systems 提供的电源调试功能和 I-jet 调试器,我们能够优化设计,通过监测源代码行为引起的电流消耗变化,现在 KBIO-eBAND 的软件使用最小的电流。 ” Osong Medical Innovation Foundation 计划在未来的项目中进一步扩大与 IAR Systems 的合作,以开发先进的医疗设备,例如智能手环。据 Sung-Jun Hong 博士表示,目前有几个项目计划正处于审查阶段,包括计划引入改善代码质量的支持功能,如 C-STAT ;以及计划将 IAR Embedded Workbench 升级为功能安全版并完成 IEC 62304 认证,为加强医疗设备的认证做准备。 IAR Systems 韩国销售经理 Lee Hyundo 表示: “ 我们非常高兴 IAR Systems 的各种嵌入式软件开发工具被 Osong Medical Innovation Foundation 采用,助力创新智能医疗设备的设计和开发。我们也承诺将继续提供更全面的支持,帮助先进医疗设备开发支持中心取得更多的创新成果。 关于 IAR Systems IAR Systems 为嵌入式开发提供世界领先的软件和服务,帮助世界各地的公司创造满足当前需求和未来趋势的创新产品。自 1983 年以来, IAR Systems 的解决方案已经辅助了超过一百万个嵌入式应用的开发,保证了其质量、可靠性和效率。公司总部位于瑞典乌普萨拉,并在世界各地设有销售分公司和支持办事处。自 2018 年起,深耕设备安全、嵌入式系统和生命周期管理领域的国际企业 Secure Thingz 也加入了 IAR Systems 集团。目前, IAR Systems 集团在纳斯达克 OMX 斯德哥尔摩交易所上市。
  • 热度 11
    2022-5-31 18:48
    1322 次阅读|
    0 个评论
    在IAR Embedded Workbench开发工具中如何实现堆栈保护来提高代码的安全性
    作者: IAR Systems 随着越来越多的嵌入式产品连接到外部网络,嵌入式产品的信息安全性( Security )越来越多地被人们关注。其中既包括直接连接到外部网络,比如通过 Wi-Fi 连接;也包括间接连接到外部网络,比如汽车中的 ECU 通过 CAN 总线与 T-box 相连,而 T-box 通过移动网络可以连接到外部网络。特别是对于一些高功能安全性( Safety )要求的产品,如工业,汽车,医疗产品等,信息安全成为了功能安全的前提( There Is No Safety Without Security )。 在 C/C++ 中,堆栈缓存溢出( Stack Buffer Overflow )是一种常见的错误:当程序往堆栈缓存( Stack Buffer )写数据时,由于堆栈缓存通常采用固定长度,如果需要写的数据长度超过堆栈缓存的长度时,就会造成堆栈缓存溢出。堆栈缓存溢出会覆盖堆栈缓存临近的堆栈数据,其中可能包含函数的返回地址,就会造成函数返回时异常。如果堆栈缓存溢出是攻击者利用代码的漏洞蓄意造成的,它就称为堆栈粉碎( Stack Smashing )。堆栈粉碎是常用的一种攻击手段。 堆栈金丝雀( Stack Canaries ) , 因其类似于在煤矿中使用金丝雀来感测瓦斯等气体而得名,它可以用于在函数返回之前检测堆栈缓存溢出来实现 堆栈保护 (Stack Protection) ,从而提高代码的安全性。 相对于很多更加关注发挥器件性能的原厂开发工具,一些在行业中被广泛使用的商用开发工具更加关注性能和安全性的平衡性和完整性。 本文 以过去数十年来在行业中被广泛采用的商用工具链 IAR Embedded Workbench 为例,介绍如何在工具 中实现堆栈保护 ,从而提高代码的安全性 。 堆栈粉碎 在 C /C++ 中,堆栈( S tack ) 用于保存程序正常运行(比如函数调用或者中断抢占)的临时数据,可能包含如下数据: · 没有存储在寄存器中的函数参数和局部变量 · 没有存储在寄存器中的函数返回值和函数返回地址 · CPU 和寄存器状态 由于堆栈保存的是保证程序正常运行的临时数据,堆栈缓存溢出会覆盖堆栈缓存临近的堆栈数据,这些数据可能包含函数的返回地址,如果发生时一般会造成程序运行异常。攻击者经常利用这一点来进行堆栈粉碎攻击。 下面通过一个简单的例子来说明堆栈粉碎攻击: void foo(char *bar) { char c ; strcpy(c, bar); // no bounds checking } foo() 函数将函数参数输入复制到本地堆栈变量 c 。如下图 B 所示:当函数参数输入小于 12 个字符时, foo() 函数会正常工作。 如下图 C 所示: 当函数参数输入大于 11 个字符时, foo() 函数会覆盖本地堆栈的数据,将函数返回地址覆盖为 0x80C03508 ,当 foo() 函数返回时,会执行地址 0x80C03508 对应的代码 A ,代码 A 有可能包含攻击者提供的 shell 代码,从而使攻击者获得操作权限。 A 数据复制前 B "hello" 作为函数参数输入 C "AAAAAAAAAAAAAAAAAAAA\x08\x35\xC0\x80" 作为函数参数输入 图:堆栈粉碎示例 _ 堆栈保护 因其功能类似于在煤矿中用来发现瓦斯的金丝雀而得名的堆栈金丝雀( Stack Canaries ),可以用于在函数返回执行恶意代码之前检测堆栈缓存溢出。其检测原理是:当调用函数时,将需要保存的临时数据保存到堆栈,然后放置一个堆栈金丝雀 , 当函数返回时,检查堆栈金丝雀的值是否发生改变;如果发生改变,说明堆栈已被篡改,否则说明堆栈没有被篡改。 下面介绍如何在 IAR Embedded Workbench 这种广受欢迎的商用工具链中实现堆栈保护,从而提高代码的安全性: 在 IAR Embedded Workbench 中,会使用启发模式( Heuristic )来决定函数是否需要堆栈保护 : 如果函数局部变量包含数组类型或者结构体成员包含数组类型,或者局部变量的地址在该函数外被使用,该函数需要堆栈保护。 IAR Embedded Workbench 安装目录下面 \src\lib\runtime 包含 stack_protection.c ,里面包含了 __stack_chk_guard 变量和 __stack_chk_fail 函数,可以作为模板使用:其中 __stack_chk_guard 变量就是堆栈金丝雀的值,在函数返回时,如果检测到堆栈金丝雀的值被篡改,就会调用 __stack_chk_fail 函数。 1. 将 IAR Embedded Workbench 安装目录下面 \src\lib\runtime 文件夹的 stack_protection.c 拷贝并添加到工程。 2. 在 IAR Embedded Workbench 中启用堆栈保护。 3. 在代码中声明堆栈保护相关的 __stack_chk_guard 变量和 __stack_chk_fail 函数。 extern uint32_t __stack_chk_guard; __interwork __nounwind __noreturn void __stack_chk_fail(void); 4. 编译工程。编译器会在需要堆栈保护的函数中添加如下操作:在函数入口处先入栈( Push ),然后再额外保存堆栈金丝雀,具体的值用户可以在 stack_protection.c 中 更改 __stack_chk_guard ; 在函数出口,会检测堆栈金丝雀的值是否还是 __stack_chk_guard ,如果不是,说明堆栈被篡改,会调用 __stack_chk_fail 函数。 调试 将断点打到需要堆栈保护的函数反汇编( Disassembly )入口,暂停后发现编译器在函数入口处入栈操作之后额外将堆栈金丝雀保存: 在函数出口处打断点,然后运行程序,在函数返回时,会先检测堆栈金丝雀的值是否还是 __stack_chk_guard ,如果不是,说明堆栈被篡改,会调用 __stack_chk_fail 函数。 改变堆栈金丝雀的值使之与 __stack_chk_guard 不一致,然后运行程序,函数返回时将会调用 __stack_chk_fail 函数: 总结 本文主要介绍了堆栈粉碎 攻击如何利用堆栈缓存溢出来影响代码的安全性。通过在 IAR E mbedded Workbench 中实现堆栈保护可以检测堆栈的完整性,从而提高代码的安全性。 参考文献: 1. https://en.wikipedia.org/wiki/Stack_buffer_overflow 2. https://cwe.mitre.org/data/definitions/121.html 3. https://en.wikipedia.org/wiki/Buffer_overflow_protection 4. https://www.iar.com/knowledge/learn/programming/stack-protection-in-iar-embedded-workbench/ 5. IAR C/C++ Development Guide ( Stack protection )
  • 热度 26
    2016-6-29 10:23
    2462 次阅读|
    0 个评论
    By Toradex Leonardo Graboski Veiga 1).  简介 物联网(Internet of Things)概念的本质其实就是关于发送数据到网络,所以称为云服务。随着时代发展和技术进步,人们可以使用尺寸更小功耗更低的电子设备并很容易的连接到云端,不过有一个问题却始终困扰着电子工程师们:如何使用这些获取的数据?而这正是物联网的主题。 在 Microsoft主页 上面有一些实际的应用例子来展示IoT的应用:一个电梯公司通过物联网来改善并提供预先维护;一个工业自动化公司通过物联网深入了解油气产业供应链,同时提供预先维护;还有一个公司通过IoT预测驾驶人员行为然后优化汽车利用。在读完这个系列文章后,我们期待读者可以拥有足够的知识和工具去部署应用来深度检视同时优化整个系统 – 不仅仅是积攒了一堆数据,而是从中获取了有用的结果! Azure 是Microsoft提供的云服务平台,提供了多种应用如数据库,虚拟机,应用服务,机器学习,数据流分析,媒体和CDN服务,大数据解决方案,以及包括IoT Hub的其他众多应用。就其提供的大量应用本身已经是使用Azure服务的很好理由,但Microsoft更进一步通过和Amazon Web Services的 对比 来进一步证明其方案是更好的 – 和前面相反,这是一个通过用户和时间来确认的强有力宣言。另外,高安全性,易于整合以及容易上手也是选择Azure服务的另一个理由。 本系列文章通过开发一个IoT应用,从读取现场传感器数据,展示数据到获取商业智能(BI)。所使用的用来连接传感器以及上传数据到云端的平台: Azure IoT certified partner  Toradex 的 Colibri VF61 计算机模块 +  Iris Carrier Board 。应用程序获取传感器数据然后上传到来自Microsoft Azure云解决方案的一个叫做Azure IoT Hub的IoT服务,然后就可以被各种所需要的Microsoft Azure服务来处理。这部分内容将在本系列文章的第二部分着重讲解,在此我们主要关注在如何配置Azure IoT Hub以及上传数据到它上面。 我们选用的IoT环境为模型车监控。为了演示方便,将Toradex平台和传感器置于遥控模型汽车内,如下图1所示;而图2则给出的目标应用的框图。   图1 :遥控汽车   图2 :应用框图 我们所选用的应用编程语言为Javascript 配合Node***: 一个服务器端(本文中即Toradex嵌入式系统)基于Chrome V8 引擎编译的Javascript解释器。这个选择是考虑到Azure IoT Hub SDKs 可以提供的开发库。但是需要注意的是现在IoT Hub SDKs正处于频繁更新中,每一次更新都会有些改变(至少Node相关),所以在使用前需要考虑清楚。本文所使用的Azure IoT Node包版本为1.0.1。 整个环境的搭建,从开发嵌入式系统应用,到配置Azure来获取数据我们分为3个主要步骤,下面会分别介绍: ./  配置Azure 环境 ./  添加设备并发送信息到IoT Hub ./ Toradex 嵌入式系统应用开发   2).  配置 Azure 环境 首先需要创建一个新的Azure账户:从Azure 网站可以申请30试用的免费账户。然后就可以使用账户里一定数目的信用额度来免费部署应用使用Azure 服务;同样,IoT Hub也有一个用于开发的包含有限资源的免费版本,且不受试用期限制。关于价格和IoT Hub的详细信息,请见 这里 。 设置好Azure账户后,需要创建IoT Hub。用新创建的Azure账户登陆Azure portal,选择 +New Internet of Things Azure IoT Hub。新的IoT Hub配置界面如下图3所示,“Pricing and scale tier”选项需要选择“Free”;然后在“Resource Group”选项创建一个新的资源组,另外“Location”选项需要和后面部署的服务保持一致;“Name”可以自由设定,而“IoT Hub Units”和”Device-to-cloud“选项在免费版本中则无法修改。点击“Create”后,服务就被部署了,这个过程可能需要几十秒时间。   图3 :从Azure Portal 创建IoT Hub 上面操作完成后,可以看到IoT Hub已经出现在控制台,也就是 Azure Portal主页 。点击后,如下图4所示页面会打开:里面包含“Essentials” 是如IoT Hub地区等基本信息;“Usage”是提供给系统管理员注册设备数目以及从设备发送信息数量的反馈信息;“Monitoring”是显示收到信息数量。   图4 :IoT Hub  主面板 仍然在IoT Hub主面板上,为了让其他应用也可以访问服务,”Settings“选项卡里面的“Shared access policies“选项需要被选中。在新打开的” Shared access policies“选项卡中,点击“iothubowner”规则选项,这个包含了本IoT Hub所有可能的权限。如下图5所示,“iothubowner”选项卡会打开,然后复制”Connection string – primary key”对应的内容留作后用:这个是下一步用于管理和监控这个IoT Hub服务的钥匙。   图5 :获取iothubowner connection string   3).  添加设备并发送信息到 IoT Hub 现在云端设置已经完成,我们需要在开发主机上面安装 iothub-explorer 工具来添加设备到IoT Hub,另外如果开发主机是Windows的话,也可以选择 Device Explorer 工具。鉴于本文所使用的开发主机系统为Ubuntu 14.04,我们采用iothub-explorer。需要注意所需Node版本为0.12.x或以上(根据说明如需全部功能工作需要4.x或以上版本),但目前apt-get工具只能安装0.10.x版本。为了解决这个问题,需要先后安装Node Version Manager(NVM)和Node 版本0.12.9. 然后在终端中使用NPM(Node Package Manager)来安装iothub-explorer。 --------------------- $ npm install iothub-explorer@latest --------------------- 然后可以运行iothub-explorer help参数来查看使用方法 --------------------- $ iothub-explorer help --------------------- 根据上面命令的打印结果,iothub-explorer 包含有create和monitor事件参数。首先,我们配合上面图5中获取的connection string使用iothub-explorer工具来创建一个设备“tdx_iot_car”。注意“--connection-string”参数用来显示设备connection string (和图5中获取的IoT Hub connection string不同),这个也需要保存下来用来连接这个新创建的设备到IoT Hub,是的可以使用Colibri VF61应用来发消息到Hub。 --------------------- $ iothub-explorer "HostName=toradex.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=putyoursharedaccesskeyfromtheconnectionstringhere" create tdx_iot_car --connection-string Created device tdx_iot_car - deviceId:                   tdx_iot_car generationId:               635931262207620183 etag:                       MA== connectionState:            Disconnected status:                     enabled statusReason:               null connectionStateUpdatedTime: 0001-01-01T00:00:00 statusUpdatedTime:          0001-01-01T00:00:00 lastActivityTime:           0001-01-01T00:00:00 cloudToDeviceMessageCount:  0 authentication: SymmetricKey:       primaryKey:   somesharedaccesskeyreturned       secondaryKey: somesecondaryaccesskeyreturned - connectionString: HostName=toradex.azure-devices.net;DeviceId=tdx_iot_car;SharedAccessKey=somesharedaccesskeyreturned ---------------------   4). Toradex 嵌入式系统应用开发 现在来设置 Colibri VF61  计算机模块 +  Iris 载板 。本文中使用Toradex发布的预编译Linux image( Colibri_VF_LinuxConsoleImageV2.5 ),如何刷写image到模块请参考 这里 。然后请参考下面步骤安装Node***, NPM 包和git – 安装过程需要一些时间,尤其是curl步骤。 --------------------- # opkg update # opkg install nodejs # opkg install tar # curl -L https://www.npmjs.com/install.sh | sh # opkg install git --------------------- 本文所展示的例程(send_data***)相关packages installer和node文件存放于 这里 ,可以通过下面命令将其clone到目标板上面并安装node packages --------------------- # git clone https://github.com/leograba/azure-iot-car.git # root@colibri-vf:~# cd azure-iot-car # root@colibri-vf:~# npm install --------------------- 现在我们可以在目标板上面运行例程向IoT Hub发送数据,但有几点需要解释下:例程使用HTTP协议通讯,但AMQP和MQTT协议也是支持的;变量“connecionString”数值必须和上面用iothub-explorer工具创建新设备时候所保存下来string一致: --------------------- var connectionString = "HostName=toradex.azure-devices.net;DeviceId=tdx_iot_car;SharedAccessKey=somesharedaccesskeyreturned" --------------------- Setinterval()循环函数随机产生数值发送到IoT Hub, 用来模拟传感器数据,如温度,声纳传感器距离数据,加速度和陀螺仪传感器,一些gps坐标数据和来自目标板的时间日期等。如何从真实传感器获取数据将在这个系列文章的下一篇进行说明。JSON Stringify() 函数用来产生一个JSON编码数据串,然后封装于Message object用于发送。下面是一个JSON格式数据串示例: --------------------- {"ObjectName":"toradex2", "ObjectType":"SensorTagEvent", "temp":24.889683, "acceleration: {"accel_x":10.018892,"accel_y":0.039468,"accel_z":-0.081328}, "gyroscope": {"gyro_x":-0.0532362,"gyro_y":-0.01597086,"gyro_z":0}, "distance":0.17017, "boardTime":1458064972706} --------------------- 正常情况下,在程序运行时候sendEvent()函数里面的callback函数不应打印任何串口输出。下面是在Colibri VF61上面运行程序并正常工作时候的串口打印输出: --------------------- # node send_data*** sending message to the IoT Hub sending message to the IoT Hub sending message to the IoT Hub sending message to the IoT Hub sending message to the IoT Hub sending message to the IoT Hub sending message to the IoT Hub sending message to the IoT Hub --------------------- 为了确保数据被收到,在Azure Portal IoT Hub面板会显示每天的消息计数,同时监控图表上面会有尖峰显示,如下图6所示。需要注意这些信息大概需要几十秒才会在portal上面显示出来。   图 6:  在Azure Portal 中确认数据被收到 另外,也可以使用iothub-explorer工具通过“monitor-event”参数配合device id来查看发送到IoT Hub的数据流,不过需要Colibri VF61程序要同步运行,而通过Azure Portal查看则不需要。下面图7展示了iothub-exploer收取目标板发送数据情况,上面是具体监测数据命令: --------------------- $ iothub-explorer "your_iothub_connection_string" monitor-events yourdevice ---------------------   图7 :用iothub-explorer 收取目标板发送数据   5).  总结 Microsoft Azure网站上面提供了很多文档用于帮助用户开发更复杂和稳固的应用。参考这些文档可以从中获取更多有用信息,如创建一个设备,或者从Hub获取设备发送的数据是可以通过编程来完成的。另外,在接下来的文章中我们将侧重连接真实传感器到Colibri VF61 + Iris载板,并传输真实传感器数据到IoT Hub, 这个也可以用作其他Azure 服务来给设备部署应用提供深度检视或变量操控。 我们希望通过本文可以让用户了解并最终使用Toradex 嵌入式系统方案配合Auzre IoT Hub服务,然后从中获益。同时,我们也想在这里感谢来自巴西的Grupo Viceri团队在Azure and Business Intelligence上面的丰富经验最终促成了这个IoT Car 项目。 本文最初发表于Embarcados.com, Portuguese,详见这里。
  • 热度 21
    2016-5-16 11:08
    1670 次阅读|
    0 个评论
    By Toradex 秦海 随着ARM平台处理能力的日益强大,越来越多的工业智能/机器人应用在ARM平台上面实现,在这个过程中不可避免的就涉及到将机器人应用开发框架移植到ARM平台来运行,因此本文就着重示例基于 Openembedded 环境,将ROS(Robot Operating System)编译集成到嵌入式Linux中运行。 ROS 是一种为机器人应用设计的分布式处理框架,集成了大量相关库和工具,目的是为了提高机器人应用开发时代码复用率。目前ROS发布版本官方只支持Ubuntu Linux等安装,但由于在Openembedded框架下维护了meta-ros layer,使得我们可以将ROS集成到同样基于Openembedded框架的嵌入式Linux中运行。 本文所使用硬件为Toradex  Colibri T20  基于nVidia Tegra2的ARM核心板配合 Colibri 开发板 ,软件即为Toradex官方发布的基于Openembedded框架的 Yocto Project 兼容 Linux 系统。 1).  编译配置 roscore a).  下载配置基本的Openembedded 环境 详细的关于Toradex Openembeded配置说明请见 这里 ,如下下载配置Opembedded 和Toradex Linux release V2.5相关meta layer数据 --------------------- $ mkdir oe-core $ cd oe-core $ repo init -u http://git.toradex.com/toradex-bsp-platform.git -b LinuxImageV2.5 $ repo sync --------------------- b).  下载meta-ros layer --------------------- $ cd oe-core/stuff $ git clone  https://github.com/bmwcarit/meta-ros.git //默认head为ROS indigo,如需hydro请继续如下操作 //cd meta-ros git checkout v0.2 cd .. --------------------- c).  修改配置文件 ./ 生成相关配置文件 --------------------- $ cd oe-core $ . export --------------------- ./ 修改oe-core/build/conf/bblayers.conf --------------------- BASELAYERS ?= " \ ...... + ${TOPDIR}/../stuff/meta-ros \ " --------------------- ./ 修改oe-core/build/conf/local.conf文件 --------------------- MACHINE ?= "colibri-t20"        //设备配置为colibri-t20,这里也可以改为其他产品型号 ...... + IMAGE_INSTALL_append = "roslaunch"   //安装roscore --------------------- d).  编译image --------------------- bitbake -k angstrom-lxde-image --------------------- e).  部署image 编译成功后,在oe-core/build/out-glibc/deploy/colibri-t20/images目录下找到生成的image Colibri_T20_LinuxImageV2.5_xxxxxxxx.tar.bz2,然后按照这里的方法更新到Colibri T20模块上面。 f).  启动roscore 环境 ./ 配置环境变量 --------------------- export ROS_ROOT=/opt/ros/ indigo export PATH=$PATH:/opt/ros/ indigo/bin export LD_LIBRARY_PATH=/opt/ros/ indigo/lib export PYTHONPATH=/opt/ros/ indigo/lib/python2.7/site-packages export ROS_MASTER_URI=http://localhost:11311 export export ROS_HOSTNAME=localhost export CMAKE_PREFIX_PATH=/opt/ros/ indigo touch /opt/ros/ indigo/.catkin --------------------- ./ 启动roscore --------------------- roscore ---------------------   2).  编译配置 ros-world a).  重新修改oe-core/build/conf/local.conf 文件 --------------------- ...... IMAGE_INSTALL_append = "packagegroup-ros-world""   //安装roscore 以及完整的相关package --------------------- b).  编译部署 方法和上面roscore一致,由于meta-ros问题编译前请修改oe-core /stuff/meta-ros/recipes-ros/geometry-experimental/geometry-experimental.inc --------------------- SRC_URI = "063484906d1c2f1a4ee961680e43b559" SRC_URI = "011b77bc33afea927bab2707ddda585df8de5f1fc6e387081f6bf1ea12d2323b" --------------------- 第一次编译可能会遇到一些错误,请编译退出后做如下修改 ./ oe-core_v25_ros/build/out-glibc/work/armv7at2hf-vfp-angstrom-linux-gnueabi/ 目录下面 修改所有 tf2/0.5.12-r0/geometry-0.5.12/  和 tf2-xxx/0.5.12-r0/geometr-0.5.12/ 目录名均修改为geometry_experimental-0.5.12 ./ 修改oe-core_v25_ros/build/out-glibc/work/armv7at2hf-vfp-angstrom-linux-gnueabi/pluginlib/1.10.1-r0/build/CMakeFiles/plugin_tool.dir/link.txt --------------------- ……/arm-angstrom-linux-gnueabi-g++ -pthread –mfpu=vfpv3-d16 ……  //编译器添加” –pthread”参数 --------------------- c).  后续生成部署image 则和roscore 一致。   3).  总结 本文着重展示了在基于Openembedded框架的嵌入式Linux上面编译运行ROC core以及相关组件的方法,具体关于ROC的使用请参考其官方网站和网上相关资料。
相关资源