DEY是以Yocto的方式开发定制嵌入式Linux系统,这意味着除了添加Meta-Digi外,您也可以添加其它Yocto项目组的layer,包括在生产自动化和物流行业常用ROS机器人操作系统。在github中我们可以看到meta-ros在一直保持开发和演进状态,在meta-ros下,集成了许多库,包括CANOPEN的上层应用等。

ROS官网上,可以看到,当前推荐的长期支持版本是:ROS Kinetic Kame ,该版本在github上有一个适用于yocto方式的验证性版本

meta-ros提供了两个镜像参考,分别是最小的core-image-ros-roscore以及扩展的core-image-ros-world
检查这两个bb文件,core-image-ros-world集成有packagegroup-ros-world,这个bb文件在https://github.com/bulwahn/meta-ros/blob/kinetic-experimental-v3-alpha1/recipes-ros/packagegroups/packagegroup-ros-world.bb 可以发现,这个镜像带有canopen等众多应用层的包,不过这个镜像模板并不是以dey为基础的,为了能在dey里面用,应该把相关的包编译进dey中,甚至在熟练后可以做一个dey-image-ros的镜像bb文件来打包编译所需的镜像

要把第三方的layer添加到项目中,请按下面这个方式操作:

1、 cd /usr/local/dey-2.4-r1/sources/meta-openembedded
2、 git clone https://github.com/bulwahn/meta-ros -b kinetic-experimental-v3-alpha1

3. 在项目文件夹中conf/bblayers.conf,把meta-ros添加到bblayers.conf
4. 查一下相关的包:bitbake-layers show-recipes |grep ros
现在可以编译指定包甚至是roscore镜像
5. bitbake core-image-ros-roscore  或者 bitbake core-image-ros-world 或者bitbake can_msgs等特定包

要把canopen等ros的包添加到dey镜像中,可参考参考DEY文件系统定制把can_msgs或ros_canopen包添加到dey镜像中

调试过程: 因为最初编译core-image-ros-world没过,所以展开调试排错,先试着编译一个socketcan_interface 出错时注意那些错误信息:比如这次是:

...undefined reference to symbol 'pthread_getspecific@@GLIBC_2.4'
.......error adding symbols:DSO missing from command line

google一下“undefined reference to symbol ‘pthread_getspecific@@GLIBC_2.4”(注意,最好不要用百度,查不到什么有用信息),有个贴子给出解决方案是:在编译时加上-lpthread控制参数 注意,如果您在tmp/work/ccimx6sbc-dey-linux-gnueabi/socketcan-interface/0.7.6-r0/里改是没有用的,在bitbake时会被刷新掉,用bitbake -C compile xxx可以使用本地的改变。为了更方便调试,可以用:bitbake -c devshell socketcan-interface来调出开发者shell,在源码树里临时改动并测试,这个devshell的源码树和tmp/work/ccimx6…gnueabi/里是一样的,找到socketcan_interface,里面有一个CMakeLists.txt,我们检查编译出错的地方刚好是socketcan_dump链接出错,所以在target_link_libraries(socketcan_dump..)最后加一个pthread,再编译就成功了