RTnet安装


参考网址:

http://www.xenomai.org/index.php/RTnet:Installation_%26_Testing
☆    首先下载rtnet压缩包,本次试用的版本为rtnet-0.9.13;
☆    解压压缩包,sudo tar jxvf rtnet-0.9.13.tar.bz2;
☆    进入解压后文件夹进行配置,cd rtnet-0.9.13\sudo make menuconfig;
设置以下选项:
1.    Variant->Xenomai 2.1 or better
2.    Add-ons->Real-time Capturing Support->ON
3.    Examples->RTnet Application Examples->ON
保存并退出,发现错误:Xenomai configuration tool not found:
经查找,原因是没有发现Xenomai的配置文件,解决方法:
添加文件路径/usr/xenomai/bin/xeno-config到
Examples->Real-time Extension Config-Tool Path,保存并退出。
☆    编译:sudo make;
☆    安装:sudo make install;
如果在配置过程中没有更改,RTnet的安装文件夹将会被放置在/usr/local/rtnet;
☆    创建配置设备接口节点:sudo mknod /dev/rtnet/ c 10 240;

利用单一节点测试(本地环绕)
测试步骤如下:
■    从普通非实时的以太网口断开RTnet节点的网络电缆
■    重启系统,进入打过补丁的内核模式
■    输入命令显示网络设置  ifconfig
将展示给你eth0正在运行(它是你的网卡),lo正在运行(它是本地环绕)。
■    你要禁用网卡的非实时操作,输入命令完成:
ifconfig eth0 down
■    移除网卡的设备驱动或是模块
    输入命令lspci | grep -I net 查看网卡信息,然后lsmod查看网卡对应的模块;本机的网卡模块为r8169,卸载时输入命令sudo rmmod r8169 (本机加载时,sudo insmod /lib/modules/2.6.37.6-xenomai/kernel/drivers/net/r8169.ko)。
■    加载RTnet操作需要的实时linux扩展的模块,如果在Xenomai中已经编译了RTDM support,不需要做什么,否则:modprobe xeno_rtdm

TODO:简化下列步骤。
■    然后你需要编辑目录/usr/local/rtnet/etc下的文件rtnet.conf,来正确的设定以运行Rtnet.编辑以下参数:
1.    设置host up为主机或是从机,根据你怎样使用;
2.    RT_DRIVER应该与你移除的模块是实时等效的(本机选用对应的rt_r8169);
3.    RT_DRIVER_OPINIONS应该只是空引用,因为主机上只有一个卡;
4.    IPADDR = 127.0.0.2 因为你将自己设为主机,使用这个地址,你想与本地环绕交流,其将被设为从机127.0.0.1
5.    NETMASK = 255.255.255.0
6.    RT_LOOPBACK = yes
7.    RTCAP = yes 如果你想要像以太一样运行实时抓包
8. 设置TDMA_SLAVES=127.0.0.1 for loopback,作为从机;
■    保存文件,然后在sbin路径下运行”./rtnet start”
■    它将会等待从机,输入Ctrl C来离开。通过调用lsmod可以看到RTnet正在运行,在模块列表中可以看到网卡的实时驱动,如果没有则RTnet实际没有运行。
■    运行”./rtping 127.0.0.1”来ping这个本地循环。
■    停止RTnet在卡上的传递,运行 ./rtnet stop

测试结果:

 

输入lsmod |grep rtnet



 

ping本地循环:


 



多节点测试
    测试步骤如下:
■    从普通非实时的以太网口断开RTnet节点的网络电缆
■    用交换机或集线器使RTnet节点相互连接
■    重启系统,进入打过补丁的内核模式
■    修改rtnet的配置文件:/usr/local/rtnet/etc/rtnet.conf.检查以下选项:
1.    RT_DRIVER必须被设置为正确的实时以太网卡NIC驱动(本机选取rt_r8169)
2.    设置IPADDR为站的(network-unique)IP地址
3.    设置TDMA_MODE为“master(主机)”或“slave(从机)”,根据节点的角色
4.    将从机的IP地址放进TDMA_SLAVES, 用空格隔开(只在主机中需要)。
■    关闭非实时的以太设备
■    卸载非实时的以太设备驱动模块
■    加载需要的Xenomai或RTAI模块
■    切换到路径 /usr/local/rtnet/sbin
■    在所有的节点上运行“sudo ./rtnet start”,这些节点应该可以相互看到,然后返回到命令提示符
■    检查节点间的通讯,运行“./rtping ”,是其他站的IP地址,rtping应该可以成功地ping到其他节点
■    输入Ctrl+c停止rtping
■    卸载RTnet模块通过运行命令:”sudo ./rtnet stop”

测试结果:


 
考虑解决方法:
由于网卡使用的驱动为r8169,但是在usr/local/rtnet/modules中并没有相应的.ko文件,查找在进行menuconfig的时候在Drivers中选中rt_r8169编译,在配置文件中将RT_DRIVER改为rt_r8169,进行尝试,暂未解决。
参照http://www.xenomai.org/index.php/RTnet:Main#Overview,Rtping依靠Rtnet,RTipv4,以及至少一个一个网络设备驱动。否则: "host [...] unreachable" / "ioctl: No route to host",但是RTping RTnet RT_r8169均已挂起,目测是网卡驱动不配套所致,等新的网卡到了再继续测试。


RTnet调试
如果RTnet不工作,或者间歇工作,可能是由于以下原因:
■    /dev/rtnet设备节点消失了
■    Xenomai或RTAI在硬件上没有按期待的工作
■    实时网络设备的Linux驱动被编译进内核,阻塞了硬件
■    IRQ clasn(中断请求冲突)。最近的Xenomai和RTAI版本可以检测冲突,将其报告给控制台,较老的版本可能会阻塞系统
■    你用了rt_e1000驱动,和Rtnet 0.9.9或更早的版本。
解决问题的步骤:
■    检查内核控制台或系统记录中有没有可疑信息
■    验证你的实时扩展的基本测试是否正确工作
■    收集你的设置信息(版本,配置,输出信息),发送一个rtnet-users的支持请求。
同时使用实时(RTnet)和非实时网络
如果你的系统上有两个(或更多)以太网口?可用,你可以配置一个使用RTnet,另一个使用非实时的网络:
■    卸掉非实时的驱动
■    在一个卡上加载并启动rtnet,通过用卡的参数(如:'insmod rt_e1000.ko cards=1,0')
■    加载非实时的模块,并挂起,它将会使用剩下的卡中的任何一个
参数卡接受一串0和1,例如,'insmod rt_e1000.ko cards=0,1,0' 将会使用这三个卡中中间一个。
查看下面的脚本片段为例:
insmod /usr/local/rtnet/modules/rt_e1000.ko  cards=1,0
insmod e1000
ifup eth1


你可能感兴趣的:(Linux)