红联Linux门户
Linux帮助

基于ubuntu的rtems-libbsd编译运行beagleboneblack bsp

发布时间:2016-12-01 14:17:51来源:linux网站作者:hahachenchen789
rtems除了自身开发的rtems之外,还和freebsd合作开发了rtems-libbsd系统。
rtems-libbsd系统Git说明如下:
Welcome to building LibBSD for RTEMS using Waf. This package is a library
containing various parts of the FreeBSD kernel ported to RTEMS. The library
replaces the networking port of FreeBSD in the RTEMS kernel sources. This
package is designed to be updated from the FreeBSD kernel sources and contains
more than just the networking code.
可以看出,该版本和rtems的区别主要是摒弃了rtems自带的libnetworking协议栈,采用bsd的9.3版本tcp/ip协议栈,相比而言,bsd协议栈显然功能更为完善和强大。
同时,移植bsd协议栈的另一关键在于能够直接移植网卡驱动,几乎不用改动什么,就能实现驱动的移植,并且符合rtems系统的中断调用等规则。
废话不多说,该如何移植此系统?
 
1.下载rtems source builder(RSB):具体可参考之前的ubuntu16.04安装rtems4.11工具链(http://www.linuxdiyf.com/linux/24312.html)
git clone git://git.rtems.org/rtems-source-builder.git  
然后进行配置和安装交叉编译链:
在rsb目录下运行:
该命令是检查编译工具链安装所需的环境:
./rtems-source-builder/source-builder/sb-check   
运行命令后显示:environment is ok 表明环境合适
然后进行安装:
cd rtems-source-builder/rtems  
../source-builder/sb-set-builder --log=beagle.txt --prefix=$HOME/development/rtems/4.12 4.12/rtems-arm.bset  
命令是运行sb-set-builder ,然后加上参数等,在这里选择安装的配置文件是,4.12/rtems-arm.bset,安装到rtems/4.12目录下。
然后等待安装,安装过程中可能出现一些问题,参考本人之前的文章:http://www.linuxdiyf.com/linux/24312.html
 
2.下载rtems源码:libbsd算是一个库,还是以rtems作为内核
git clone git@github.com:RTEMS/rtems.git  
对该源码进行编译,在这里采用上面下载的工具链:
export PATH=$HOME/development/rtems/4.12/bin:$PATH  
./bootstrap; ./bootstrap -p  
命令不多解释:可参考本人之前的对于beaglebone black板的BSP的rtems编译(http://www.linuxdiyf.com/linux/24347.html)
然后进行源码的配置如下
../rtems-src/configure --target=arm-rtems4.12 --enable-rtemsbsp=beagleboneblack --disable-networking --prefix=........./image  
这里要注意的是:和之前编译rtems源码不同,在这个配置文件下,加上--disable-networking,也就是禁用网络协议栈,因为我们要用到libbs中的bsd协议栈,因此禁用rtems自带的。
配置好后,运行
make
make install
在make过程中会碰到问题,那是因为rtems源码做了最新的改变,而rsb并没有及时更新,比如:
github下最新源码截图:
基于ubuntu的rtems-libbsd编译运行beagleboneblack bsp
其中cpukit最新添加了,libdebugger文件。可以看出是两天前更新的。
这些文件在make时就会报错,查看报错原因是rtems-debugger-arm.c文件中一些变量和函数缺少定义。这里可以看出oar公司对于rtems的维护还是不够强大啊。
没办法,考虑到这些debugger文件本人也基本用不到,就把这些出错的变量和函数注释掉。然后make编译通过。
本人还试过一种方法,就是下载以前的版本,比如4.11版本,里面就完全不包含libdebugger文件夹,也就不存在make的编译报错问题,但是这种方法会对下面的rtems-libbsd
安装产生影响,在libbsd配置过程中,会检查有没有libdebugger的头文件,如果没有,在waf编译会报错:如下图所示:
基于ubuntu的rtems-libbsd编译运行beagleboneblack bsp
最后的rtems-debugger.h文件提示not found。因此下载4.11以下版本的rtems不可行。
而最新版rtems在libbsd配置时显示是存在debugger.h文件的:
基于ubuntu的rtems-libbsd编译运行beagleboneblack bsp
 
3.安装rtems-libbsd:
下载源码:
git clone git://git.rtems.org/rtems-libbsd.git  
下载后发现libbsd没有make文件,而是python脚本,不知何原因将make脚本换成python脚本,可能是出于对维护性和便捷性的考虑吧。
既然是Python一般是要用waf进行编译,这里给出waf的下载地址:
https://github.com/waf-project/waf  
如果可以的话,也可以去google code下载。
下载后进行waf的配置:
./waf-light configure build  
然后将waf路径添加到环境变量path中,以后直接waf即可。
waf工具配置完毕,进入rtems-libbsd目录:
git submodule init
git submodule update rtems_waf  
这两步目的是更新rtems_waf
然后对libsd进行配置:
waf configure --prefix=/home/c/development/rtems/rtems-4.12 --rtems-bsps=arm/beagleboneblack  
这里注意--rtems-bsp,要加上arm/,不然会报错
配置通过后,利用waf进行编译:
waf
waf install
在编译过程中会碰到一些问题,比如会提示如下:
基于ubuntu的rtems-libbsd编译运行beagleboneblack bsp
可以看出问题还是出在libdebugger中,将这些出问题的地方全部注释掉,编译即可通过。以下是本人编译成功的终端显示:
基于ubuntu的rtems-libbsd编译运行beagleboneblack bsp
在rtems-libbsd编译成功后,可以在libbsd源码下的build/arm-rtems4.12-beagleboneblack文件夹找到编译好的一些应用程序,可以在beaglebone上进行实验:
基于ubuntu的rtems-libbsd编译运行beagleboneblack bsp
制作镜像可以参考之前的文章。
这里给出本人的命令:
sh sdcard.sh $HOME/development/rtems/4.12 $HOME/development/rtems/rtems-libbsd/build/arm-rtems4.12-beagleboneblack/log01.exe
 
本文永久更新地址:http://www.linuxdiyf.com/linux/26478.html