Linux rapidio 驱动适配

 1、驱动源码路径和驱动框架

git路径:GitHub - RapidIO/kernel-rapidio: Kernel for RapidIO​​​​​

驱动框架:

rapidio.ko   rapidio总线核心,包括:rio.c rio-access.c rio-driver.c rio-sysfs.c

tsi721_mport.ko  tsi721芯片的设备驱动 ,包括:tsi721.c tsi721_dma.c

rio_mport_cdev.ko  创建/dev/rio_mport0 字符设备文件,字符驱动

rio-scan.ko 枚举设备的驱动

rio_cm.ko  dma传输时通道的选择,一般不会用到

rionet.ko  rapidio的网络传输驱动

switches/idt_gen2.ko 交换桥片的驱动

2、驱动编译问题

       驱动源码是根据内核版本为4.* 进行开发的,如果要使用内核版本为5.*以及更高版本,要进行代码修改。

驱动编译报错如图:

解决方法:

 

 

3、驱动加载参数

rapidio 用于两个主板A、B,进行通信,分为主板和副板,主板负责枚举,副板负责发现,先发现后枚举。

主板A:

insmod rapidio.ko hdid=0   #主板加载驱动,设置hdid=0
insmod tsi721_mport.ko dbg_level=0xff mbox_sel=0xf dma_sel=0x7f pcie_mrrs=5  dma_txqueue_sz=4096 dma_desc_per_channel=4096
insmod idt_gen2.ko
insmod rio-scan.ko
insmod rio_mport_cdev.ko rio_res_mem=0x40000000 rio_res_size=0x10000000
insmod rio_cm.ko

副板B:

insmod rapidio.ko hdid=-1    #副板加载驱动,设置hdid=-1
insmod tsi721_mport.ko dbg_level=0 mbox_sel=0xf dma_sel=0x7f pcie_mrrs=5 dma_txqueue_sz=4096 dma_desc_per_channel=4096
insmod idt_gen2.ko
insmod rio-scan.ko

4、加载驱动后,枚举连接

主板A:

insmod rionet.ko
 

echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
sysctl -w net.ipv4.tcp_timestamps=0
sysctl -w net.ipv4.tcp_sack=0
sysctl -w net.core.netdev_max_backlog=250000

#set mtu
filerapidio=`ls /sys/class/rapidio_port/ -t |head -n1|awk '{print $0}'`
#echo $filerapidio

networkport=`ls /sys/class/rapidio_port/$filerapidio/net/ -t |head -n1 |awk '{print $0}'`
#echo $networkport

MTU=920
echo $MTU > /sys/class/net/$networkport/mtu
echo "the MTU of $networkport is $MTU"

副板B:

insmod rio_mport_cdev.ko rio_res_mem=0x40000000 rio_res_size=0x10000000
insmod rio_cm.ko
#mdev -s

insmod rionet.ko
#mdev -s

echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
sysctl -w net.ipv4.tcp_timestamps=0
sysctl -w net.ipv4.tcp_sack=0
sysctl -w net.core.netdev_max_backlog=250000

#set mtu
filerapidio=`ls /sys/class/rapidio_port/ -t |head -n1|awk '{print $0}'`
#echo $filerapidio

networkport=`ls /sys/class/rapidio_port/$filerapidio/net/ -t |head -n1 |awk '{print $0}'`
#echo $networkport

MTU=920
echo $MTU > /sys/class/net/$networkport/mtu
echo "the MTU of $networkport is $MTU"

注意:

        先在副板上执行 echo -1 > /sys/bus/rapidio/scan ,进行发现,再在主板A上执行 echo  -1 > /sys/bus/rapidio/scan ,进行枚举;这个过程需要等待几秒钟;

5、DMA测试

rapidio 的DMA测试分为读端和写端,不分主板和副板;

-读取0x60  寄存器的值,为枚举之后的本地的ID

命令:./rio_test_misc -M 0 -O 0x60

-读端命令:./rio_test_dma -M 0 -I 0x200000 -R 0x2000000 

-写端命令:./rio_test_dma -M 0 -D 0x1 -S 0x200000 -A 0x2000000 -d -T 10

注意:rio_test_dma.c 这个测试源代码已经限制 数据一次 传输的 大小为 2M,如果需要增大需要修改测试源码;

 6、性能调优 and 问题解决

-、操作系统的内存管理,即伙伴系统会限制最大的连续内存申请,需要调整页大小4K/16K和内核的配置文件中CONFIG_FORCE_MAX_ZONEORDER=11;

-、内存预留的方式

1、在grub中增加:mem=12G ,预留出高端内存;

2、insmod rio_mport_cdev.ko rio_res_mem=? 加载驱动是指定内存物理地址

3、测试命令上增加 -L 物理地址

    

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
RapidIO License是一种用于RapidIO技术的许可证。RapidIO是一种高性能的互连架构,广泛应用于多种应用领域,包括通信、计算、嵌入式系统等。RapidIO License被使用者购买,以获取对RapidIO技术的使用和开发的权利。 RapidIO License包含了一系列权利和限制,用于确保技术的合法使用和保护知识产权。购买RapidIO License的用户可以获得RapidIO技术的完整文档和相关资源,包括规范、参考设计、开发工具等。用户可以根据许可证的要求,将RapidIO技术应用于自己的产品中,并进行开发和商业化。 同时,RapidIO License还规定了一些限制和义务,以确保技术的正确和合理使用。例如,许可证可能要求使用者遵守一定的规范和标准,确保使用的一致性和互操作性。此外,许可证还可能包含一些保密条款,限制用户将技术传播给其他未经许可的人。 对于购买RapidIO License的用户来说,这意味着他们可以合法地使用RapidIO技术,并从中获得各种好处。他们可以在自己的产品中使用RapidIO技术,获得高性能、低延迟和可扩展性的优势。同时,他们也可以利用RapidIO社区的资源和支持,与其他开发者和供应商合作,加快产品的开发和上市时间。 总之,RapidIO License是一种获取RapidIO技术使用权的许可证,通过合法购买和遵守相关规定,使用者可以在自己的产品中充分利用RapidIO技术的优势,并与其他开发者共同推动技术的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值