-
RapidIO
在
Linux
< br>上的适配和测试过程
调试环境:
系统:
< br>Kylin4.0.2
,默认内核
4.4.58
。
硬件:
2
台包含
RapiIO
的测试板卡,一块测试底板
。
驱动及测试软件(可在
githu
b
上面下载开源驱动及测试程序):
kernel-rapidio
:
ra
pidio
内核驱动程序,版本为
1.2.0
。
riosocket<
/p>
:
rapidio
网卡驱动程序,可将<
/p>
rapidio
设备虚拟化为网卡,
版本
为:
1.3.0
。
< br>RapidIO_RRMAP
:
rapidio
的文件传输,
RDMA
等应用程序,版本
为:
1.2.1
。
说明:
RapidIO
测试环境采用两
块
VPX
主板通过
SRIO x4
p>
互联,一
块作为
Master
,一块作为
Slave
。每个步骤表明
“
同时
”
表示
Master
、
Slave
端都需要执行;
“Master”
表示秩序
Master
端执行;
“Slave”
表示
秩序
Master
端执行
p>
1. kernel-rapidIO
1.1
驱动编译安装
——
同时
直接解压缩编译即可:
$$ tar
xvf
$$ ln -s kernel-rapidio-1.2.0
kernel-rapidio
创建连接为了后面
ri
osocket
安装时依赖
$$ cd
kernel-rapidio
$$ make -j8
$$
sudo make install
不报错即可。
如果需要看调试信息,编译之前先通过修改
Makefile
文件打开调试
选项:
RAPIDIO_ENABLE_RX_TX_PORTS := TRUE
RAPIDIO_DMA_ENGINE := TRUE
RAPIDIO_DEBUG := TRUE
RAPIDIO_ENUM_BASIC := TRUE
RAPIDIO_MPORT_CDEV := TRUE
TSI721_PCIE_GEN3_WORKAROUND := TRUE
把
RAPIDIO_DEBUG
的值由
FALSE
改为
TRUE
,重新编译、安装
即可。
1.2
枚举
/
发现配置
kernel-rapidio
< br>安装时,会安装一个
文件到
/e
tc/modprobe.d/
目录下,该文件在
rapidi
o
驱动加载时调用,用于配
置驱动模块的加载参数。
1.
加载后把相关内核模块都加载,则将上面
红色字体
文本行前的
“#”
去掉,即取
消改行的注释,启用改行指令
——
Master
options rapidio hdid=1,-1
softdep rapidio post: idt_gen2 idt_gen3
idtcps tsi57x tsi568 tsi721_mport
rio_mport_cdev rio_cm rio-scan
< br>这样,启动枚举
/
发现过程的方式,需要在命令行下输入
下面命
令(先不要执行):
$$
sudo su
# echo -1 >
/sys/bus/rapidio/scan
2.
加载
rio-scan
驱动时,再将相
关内核模块加载进内核,则将上
面蓝色字体文本行前的
“#”<
/p>
去掉,即取消改行的注释,启用改行指令
——
Slave
options rapidio hdid=-1,2
softdep rio-scan pre: idt_gen2 idt_gen3
idtcps tsi57x
这样,启动枚举
/
发现过程的方式,需要输入如下命令(先不要
执行):
$$ sudo modprobe rio-scan scan=1
注意:
options rapidio
hdid=1,2,3,4
如果配置
1,2,
代表有
2
个
rapid
io
控制器,如果配置
1
,
2
,
3
,
4
表示有
4
个
rapidio
控制器。
Mast options rapidio hdid=1,2
slave
options rapidio
hdid=-1,-2
表示
两路都枚举
1.3
枚举
/
发现
两端安装完上述驱动并配置好后,执行:
先在
Master
端:
$$ sudo su
# echo -1 >
/sys/bus/rapidio/scan
然后再
Sla
ve
端:
$$ sudo
modprobe rio-scan scan=1
Master
< br>先执行,
Slave
后执行,但两者之间的时间间隔不能
过长,
最好在
1s
内完成。
通过上面枚举发现过程后,在两端通过命令可以找到
rapidio
设备,
VPX
板子
为例:
$$ ls
/sys/bus/rapidio/devices/ Master
00:e:0001
$$ ls
/sys/bus/rapidio/devices/ Slave
01:e:0002
就能找到
“00
:e:0001”
和
“01:e:0002”
< br>这两个设备
如果枚举
/
发现失败,必须重启系统再次尝试。
2.
riosocket
——
同时
2.1.
编译安装
$$ tar xvf
$$ cd
riosocket-1.3.0/riosocket-basic/
$$ make
-j8
$$ sudo make install
安装时,
会安装一个
文件到
/etc/modp
robe.d/
目录,内
容为:
# cat /etc/modprobe.d/
#
Configure RapidIO Socket module loading
options riosocket
rio_phys_mem=0x40000000
rio_phys_size=0x10000000
是将系
统物理内存地址
0x40000000
(
1G
)开始的
0x10000000
(
256MB
)作为
rapidIO<
/p>
设备的
DMA
使用
buffer
。
将其改为:
# Configure
RapidIO Socket module loading
options
riosocket rio_phys_mem=0x240000000
rio_phys_size=0x10000000
连接调
试串口,重启,按
“ESC”
键进入
u
boot
命令行模式。输入如下
命令:
# setenv bootargs console=ttyS0,115200
earlyprintk=uart8250-
32bit,0x28001000
root=/dev/sda2 initrd=0x95000000,16M rootwait rw
KEYBOARDTYPE=pc KEYTABLE=us
memmap=256m$$9G
# setenv scsidevs 0
# save
# boot
2.2.
使用
系统启动后,先执行
rapidio
的枚举
/
发现过程,再加载
驱动:<
/p>
$$ sudo su
# echo
-1 > /sys/bus/rapidio/scan
# modprobe
riosocket
这样,通过
ifconfig
,因该就能找到
rsock0
和
< br>rsock1
两个网络设备啦。
双击互连测试时,双方配置
IP
p>
地址,如果采用
ifconfig
配置,需
要
反复配多次才能稳定(注意:)。
假设一端
IP
为:
192.168.2
22.113
另一端
IP
为
:192.168.222.111
通过
ne
tperf
测试,在
192.168.222.113
端运行
netperf
服务器:
$$ sudo netserver
在客户端运行,类似如下命令
$$
sudo netperf -H 192.168.222.113 -l 60
-H
是
server IP
,
-l
是时间,默认采用的协议是
TCM_STREAM
。如
果要使用其它协议测试,使
用
-t
选项。
常用的命令行参数:
-H host
:指定远端运行
netserver
的
server IP
地址;
-l
testlen
:指定测试的时间长度(秒);
-t testname
:指定测试类型,包括
TCP_STREAM
,
UDP_STREAM
,
TCP_RR
,
T
CP_CRR
,
UDP_RR
。
3. RapidIO_RRMAP <
/p>
RRMAP
的安装默认基于
4
个
rapid
节点网络进行安装,而我们的测
p>
试环境是使用
2
个节点,其它两个节点为<
/p>
none
。
s
erver
:
192.168.0.113
,安装
RapidIO_RRMAP
的服务器,这里和
p>
node1
(
master
)是同一台物理机器
master
< br>(
node1
):
192.16
8.0.113
node2
:
192.168.0.111
node3
:
none
node4
:
none
3.1
安装准备
1.
所有节点保证
root
用户可用,按麒麟操作系统下,使用如下命令
配置
root
密码:
$$ sudo
passwd root
输入新的
UNIX
密码:
重新输入新的
UNIX
密码:
passwd
:已成功更新密码
p>
假设密码默认配置为
“123123”
(不
带引号)
在每个节点上的
Rapid
IO_RRMAP
目录运行
admin_init_root_
,
使得
server
< br>通过
ssh
可以用
root
p>
用户无密码访问所有节点。
$$ sudo
./admin_init_root_ 192.168.0.113 192.168.0.111
none none
Generate SSH key for root
Working in /home/kylin directory
==== 192.168.0.113 ====
root@192.168.0.113's password:
root@192.168.0.113's password:
root@192.168.0.113's password:
==== 192.168.0.111 ====
The
authenticity of host '192.168.0.111
(192.168.0.111)' can't be
established.
ECDSA key fingerprint is
SHA
256:hgSUvxTQX2PB5GLJBO8SBjBvwqWZcc+4aGNtKmWPBE
M.
Are you sure you want to
continue connecting (yes/no)? yes
Warning: Permanently added
'192.168.0.111' (ECDSA) to the list of
known hosts.
root@192.168.0.111's password:
root@192.168.0.111's password:
root@192.168.0.111's password:
在
servers
上的每个用户都执行:
./admin_init_root_ 192.168.0.113
192.168.0.111 none none
完成后,将
Server
当前用户(如果为
root
用户,可以不执行该步骤)
home
目录下
.ssh/id_rsa
的权限设置为可读,保证当前用户通过
SSH
实现
root
无密码访
问
$$ sudo chmod 644
/home/kylin/.ssh/id_rsa
此时,使用
$$ ssh
root@192.168.0.113
或
$$ ssh roo
t@192.168.0.111
都可
以无密码访问所有
node
。
如果报如下错误
:
Permissions 0644 for
‘/home/kylin/.ssh/id_rsa’ are too open.
再将权限改为
600
:
$$ sudo chmod 600
/home/kylin/.ssh/id_rsa
2.
创建必要的用户
在每个节点上运行
:
$$ sudo
groupadd wheel
在
server
的
RapidIO_RRMAP
目录运行:
$$ sudo ./admin_user_
192.168.0.113 192.168.0.111 none none
rapidio 123123 root
Adding
user rapidio pwd:123123 on nodes:
192.168.0.113
root@192.168.0.113's password:
useradd
:用户
“rapidio”
已存在
root@192.168.0.113's password:
root@192.168.0.113's password:
192.168.0.111
root@192.168.0.111's password:
root@192.168.0.111's password:
root@192.168.0.111's password:
/home/rapidio
Generating
public/private rsa key pair.
Your
identification has been saved in .ssh/id_rsa.
Your public key has been saved in
.ssh/id_.
The key fingerprint is:
SHA256:YrILGXeFJMPccAfk7tH4R1xZhgpaGJlh6Y83S 2e72OA
rapidio@Kylin
The
key's randomart image is:
+---[RSA
2048]----+
+----[SHA256]-----+
/home/rapidio
Register as
root on nodes:
192.168.0.113
root@192.168.0.113's password:
192.168.0.111
root@192.168.0.111's password:
rapidio
是用户名,
123123
是其密码,
root
是
ra
pidio
所在的用户组。
3.
创建必要的目录
在
< br>server
的
RapidIO_RRMAP
目录运行:
$$sudo
./admin_init_ 192.168.0.113 192.168.0.111 none
none root
groupadd
:
“root”
组已存在
groupadd
:
“root”
组已存在
4.
联外网
安装依赖软件
screen
、
doxy
gen
、
sysfsutils
、
p>
git