Linux驱动开发实战之SRIO驱动(二)基于Tsi721驱动

  1. 常用驱动介绍

    在RapidIO系统中,TSI721是一款常用的RapidIO交换芯片,其驱动程序和相关模块负责管理和优化数据传输,包括DMA(直接内存访问)操作。以下是您提到的各个模块的作用概述:

    1. rapidio.ko:

      • 这是RapidIO核心模块,为RapidIO子系统提供基础支持。它负责管理RapidIO设备、维护RapidIO网络拓扑结构,以及处理RapidIO协议的底层细节。
    2. rio_cm.ko:

      • 这个模块通常与RapidIO连接管理相关。它可能负责维护和管理RapidIO网络中的连接,包括设备发现、链路维护等功能。
    3. rio_scan.ko:

      • 这不是一个内核模块,而是一个工具或脚本来扫描RapidIO网络,发现网络中的设备,并建立设备列表。它通常用于系统启动时配置RapidIO网络。
    4. rio_mport_cdev.ko:

      • 这个模块提供了一个字符设备接口,允许用户空间应用程序与RapidIO主端口(Maintenance Port)进行交互。通过这个接口,可以执行RapidIO维护操作,如读取和写入维护寄存器。
    5. tsi721_mport.ko:

      • 这是专门为TSI721芯片设计的RapidIO主端口驱动模块。它负责实现TSI721特定的功能,包括DMA操作、中断处理、以及与TSI721硬件相关的其他高级特性。这个模块是实现高速DMA传输的关键部分,因为它直接与TSI721硬件交互,优化数据传输效率。
    6. idt_gen2.ko

      交换

    在DMA传输方面,tsi721_mport.ko 模块是直接相关的,因为它提供了TSI721芯片特有的DMA功能实现。DMA是提高数据传输速度的关键技术,它允许硬件直接在内存和I/O设备之间传输数据,而不需要CPU的干预,从而显著提高数据传输效率。

  2. 编译链接过程

    在Linux内核模块的编译过程中,CC 和 LD [M] 是两种不同的操作,它们分别代表编译(Compilation)和链接(Linking)的过程:

    1. CC [M]:
      • CC 代表的是编译器(通常是gcc),它用于将源代码文件(.c 文件)编译成目标代码文件(.o 文件),这个过程包括预处理、编译和汇编。
      • M\] 表示这个编译操作是为构建一个内核模块(module)而进行的。这意味着在编译时,会包含内核模块特有的编译选项和宏定义。

    2. LD [M]:
      • LD 代表链接器(通常是ld),它用于将一个或多个目标代码文件(.o 文件)以及库文件链接成一个可执行文件或者内核模块(.ko 文件)。
      • M\] 同样表示这个链接操作是为构建内核模块而进行的。

    简而言之,CC [M] 是用来编译源代码文件的,而 LD [M] 是用来将编译好的目标文件链接成最终的内核模块。这两个步骤是构建内核模块必需的。

    Linux内核模块通常是由对应的.c源文件编译而来的。每个模块都有一个或多个.c文件,这些文件包含了模块的源代码。在编译过程中,这些.c文件会被编译成目标文件(.o文件),然后这些目标文件再通过链接器(通常是ld)链接成最终的模块文件(通常是.ko文件)。

  3. 注意事项

    1. 板卡用的pcie是gen1,主机是gen2,所需板卡发DMA是60MB/s,主机是700MB/s。

      lspci -n 查看节点号(一般是00:02.0)

      lspci -s 00:02.0 -vvv

      由于板卡不稳定,所以将pcie的gen2改成了gen1

      解决方法:

      不运行echo 8 8 0 8 > /proc/sys/kernel/printk(日志太多,存盘变慢)或者增加echo 0 > /sys/module/rio_mport_cdev/parameters/dbg_level

    2. 手里的程序,板卡版本(吴改)、tsi官网最新版、0400依次版本。按照顺序依次研究,比对不同。

    3. 板卡中的驱动需要不能编译lib测试用例,需要在新版本里边编译

    4. 主从模式

      Hdid分别为一正一负

相关推荐
领尚8 分钟前
openclaw 极简安装(Ubuntu 24.04 server)
linux·运维·ubuntu
Gofarlic_OMS23 分钟前
Windchill的license合规使用报告自动化生成与审计追踪系统
大数据·运维·人工智能·云原生·自动化·云计算
迷途之人不知返27 分钟前
shell相关知识与Linux权限
linux
SPC的存折30 分钟前
3、主从复制实现同步数据过滤
linux·运维·服务器
SPC的存折32 分钟前
openEuler 24.03 MariaDB Galera 集群部署指南(cz)
linux·运维·服务器·数据库·mysql
xcbrand34 分钟前
文旅行业品牌策划公司找哪家
大数据·运维·人工智能·python
SPC的存折1 小时前
MySQL 8.0 分库分表
linux·运维·服务器·数据库·mysql
cyber_两只龙宝1 小时前
【Oracle】Oracle之DQL中WHERE限制条件查询
linux·运维·数据库·云原生·oracle
senijusene1 小时前
i.MX6ULL 裸机 ECSPI 驱动开发详解:
arm开发·驱动开发·嵌入式硬件
斌味代码1 小时前
Shell 性能监控:指标采集、告警规则与可视化大盘设计
运维