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分别为一正一负

相关推荐
安全系统学习3 分钟前
网络安全之红队LLM的大模型自动化越狱
运维·人工智能·安全·web安全·机器学习·php
2302_7995257416 分钟前
【Linux】第十二章 安装和更新软件包
linux·运维·服务器
qq_3392822324 分钟前
docker打开滚动日志
运维·docker·容器
ImAlex1 小时前
Linux脚本实现自动化运维任务实战案例:系统自动备份、日志轮转、系统更新、资源监控、自动化定时任务调度
linux·运维
杨凯凡1 小时前
Linux日志分析:安全运维与故障诊断全解析
linux·运维·服务器
CJ点2 小时前
Deepseek-v3+cline+vscode java自动化编程
运维·自动化
愚润求学2 小时前
【Linux】进程优先级和进程切换
linux·运维·服务器·c++·笔记
jianghx10242 小时前
Centos 7 ssh连接速度慢(耗时20秒+)
linux·centos·ssh
岁月不能老2 小时前
Linux-Part8-考试(学习Linux第8天)
linux·运维·学习
ImAlex3 小时前
如何使用gcc的-finstrument-functions特性通过打印函数调用栈辅助理解复杂C/C++项目的函数调用关系
linux·c语言