☰
DSView:基于 sigrok 的开源多合一仪器 GUI——架构、构建与源码导览
2026/10/15 9:50:49 网站建设 项目流程
  • 桌面应用

【免费下载链接】DSView

An open source multi-function instrument for everyone

项目地址:https://gitcode.com/gh_mirrors/ds/DSView
点击查看免费下载

DSView 是 DreamSourceLab 为其逻辑分析仪(DSLogic 系列)与数字示波器(DSCope 系列)提供的开源图形界面程序,整个项目构建在 sigrok 开源信号分析框架之上。本文结合仓库中的构建脚本、设备驱动源码与应用入口代码,说明 DSView 的分层架构、设备接入机制、依赖与编译安装方式,以及其 GPL 许可条款的由来,帮助你在 Linux、macOS、Windows 上完成源码构建并理解各模块的实际职责。

DSView 是什么

仓库根目录的 README.md 给出了项目定位的三句话核心信息:

  • DSView 是一个 GUI 程序,用于支持 DreamSourceLab 的各类仪器,包括逻辑分析仪、示波器等;
  • DSView 基于 sigrok 项目——sigrok 的目标是构建一套可移植、跨平台、自由/开源的信号分析软件套件,支持逻辑分析仪、示波器、万用表等多种设备类型;
  • 软件目前已处于“可用”状态并有官方 tarball 发布,但仍处于持续开发中:部分基础功能可用,其余功能始终在 TODO 列表上。

补充说明见 DSView/README:DSView 直接派生自 sigrok 的 PulseView(Qt 编写的 LA/Scope/MSO GUI)。这意味着 DSView 继承的是一套成熟的“设备抽象 + 数据会话 + 协议解码”体系,而不是自研的一套孤立接口。

从 NEWS25 的版本记录可以印证“可用但仍在演进”这一状态:项目自 v0.9.0(2015 年,支持 DSLogic Pro 和 DSCope 的初始版本)一路迭代至 v1.3.2(2024-04-27),期间逐步加入 DSLogic U3Pro16/U3Pro32、DSCope U2B100/U3P100 等新硬件支持、loop/repeat 采集模式、FFT 与数学运算通道、138 个以上协议解码器、多语言与多主题等能力。仓库同时随附NEWS25/NEWS31两份变更日志与ug25.pdf/ug31.pdf用户文档,CMakeLists.txt 在安装时把它们一并拷贝到share/DSView目录(第 686–689 行)。

三层源码结构:libsigrok + libsigrokdecode + Qt 前端

CMakeLists.txt 中的源文件清单揭示了整个可执行文件由四部分拼成(add_executable见第 634–642 行):

  1. DSView/——Qt 前端,主窗口、工具栏、波形视图、解码面板等,全部位于DSView/pv/子目录(pv 即 PulseView 的目录名沿用);
  2. libsigrok4DSL/——sigrok 核心库的 DSL 定制版,负责设备枚举、会话与采集数据的收发;
  3. libsigrokdecode4DSL/——协议解码库,内置 Python 编写的解码器;
  4. common/——minizip(压缩打包)与 xlog(日志)等公共工具。

设备驱动:DSLogic、DSCope 与 demo

驱动层位于 libsigrok4DSL/hardware/DSL,包含三个驱动源文件:

  • dslogic.c:DSLogic 逻辑分析仪驱动;
  • dscope.c:DSCope 示波器驱动,其驱动注册结构在 dscope.c 中定义,.name = "DSCope"、.longname = "DSCope (generic driver for DScope oscilloscope)",实现scan、config_get/set、dev_open、dev_acquisition_start/stop等标准 sigrok 驱动回调;
  • dsl.c/dsl.h/command.c:两种仪器共享的底层 USB 命令通道(EZ-USB/FX3 控制、安全握手dsl_secuWrite等)。

设备识别与能力描述集中在 dsl.h 的supported_DSLogic等设备 profile 表中,每一行用 VID/PID + USB 速度组合标识一款具体仪器,并声明固件/比特流文件名与能力位。例如:

{DS_VENDOR_ID, 0x0001, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic", NULL, "DSLogic.fw", /* 固件 */ "DSLogic33.bin", /* 固件对应的比特流 */ "DSLogic50.bin", {CAPS_MODE_LOGIC, /* 支持的仪器模式 */ CAPS_FEATURE_SEEP | CAPS_FEATURE_BUF, (1 << DSL_STREAM20x16) | (1 << DSL_STREAM25x12) | ..., 16, /* 通道数 */ SR_MB(256), /* 最大采样深度 */ ...}}

从源码结构看,能力位(CAPS_MODE_LOGIC/ANALOG/DSO、CAPS_FEATURE_USB30、CAPS_FEATURE_LA_CH32等,见 dsl.h)直接决定了前端界面暴露哪些模式与参数——同一套驱动代码覆盖 USB 2.0/3.0、16/32 通道、模拟与 DSO 模式的不同型号。配套的固件文件(DSLogic*.fw/DSLogic*.bin、DSCope*.bin/DSCope*.fw等)随源码发布在 DSView/res 目录中,并在安装时进入share/DSView。

除硬件外,驱动层还提供demo(虚拟演示设备)与文件输入(in_binary.c/in_vcd.c/in_wav.c),仓库中DSView/demo/下预置了模拟信号(sine/square/sawtooth/triangle)与逻辑波形的.demo文件,因此无需硬件即可体验完整 UI——这与 README 中“设备类型显示 (USB 2.0 / USB 3.0 / 演示设备 / 文件)”的版本记录相呼应。

协议解码:151 个解码器目录

libsigrokdecode4DSL/decoders 下包含 151 个解码器目录(每个目录一个 Python 脚本),覆盖 UART/I2C/SPI、CAN/CAN-FD、LIN、JTAG、SWD、MIPI-DSI、USB-PD、DMX512、QSPI 等常见总线与芯片接口。前端通过 decoderstack.cpp 与 decodermodel.cpp 管理解码栈,安装时解码器目录会被拷贝到share/libsigrokdecode4DSL(CMakeLists.txt),运行时由 Python3 解释器加载——这也是构建时 Python3 为必需依赖的原因。

运行时入口:命令行参数与设备代理

程序入口在 DSView/main.cpp。usage()(第 46–58 行)定义的命令行参数完整如下:

Usage: DSView [OPTION...] [FILE] - A GUI for instruments of DreamSourceLab Help Options: -l, --loglevel Set log level, value between 0 to 5 -v, -V, --version Show release version -s, --storelog Save log to locale file -h, -?, --help Show help option

结合main()的实现(第 100–142 行),使用要点是:

  • [FILE]参数只接受一个文件,多于一个会报错退出;指定文件后由AppControl在启动时打开,即支持从命令行或桌面图标直接载入采集文件;
  • -l指定日志级别(0–5),配合-s可将日志写入本地文件;开发模式下(定义DEBUG_INFO)日志级别至少提升到XLOG_LEVEL_INFO;
  • 程序要求 64 位环境:启动时检查sizeof(u64_t) == 8,否则直接退出(第 220–224 行);
  • 高 DPI 处理:Qt ≥ 5.6 时默认开启AA_EnableHighDpiScaling,Windows 上对“缩放 ≥1.5 且屏幕高度 ≤1080”的组合则回退到禁用系统缩放、自行放大位图(第 144–166 行),对应 NEWS 中大量 DPI/多屏相关的修复记录。

设备侧的抽象是 DeviceAgent:它通过ds_get_actived_device_info()获取当前激活设备的句柄、名称与驱动名,并以is_hardware()/is_demo()/is_file()三个谓词区分真实 USB 设备、演示设备与文件设备(DEV_TYPE_USB/DEV_TYPE_DEMO/DEV_TYPE_FILELOG)。从源码结构看,这一层把“设备管理”与“采集显示”解耦,正是 v1.3.0 中“改进设备管理的实现,解耦和波形采集显示的绑定”这条变更记录的具体落点;它还提供通道使能(enable_probe)、通道命名、SR_CONF_LIMIT_SAMPLES查询等对底层libsigrok的封装(见 deviceagent.cpp)。

构建与安装

依赖清单

INSTALL 给出的完整依赖列表如下:

依赖版本要求
git—
gcc / g++≥ 4.0
make—
cmake≥ 2.6(CMakeLists.txt 实际要求 ≥ 2.8.6)
Qt≥ 5.0(构建脚本同时支持 Qt5/Qt6)
libglib≥ 2.32.0
zlib—
libusb-1.0≥ 1.0.16
libboost≥ 1.42
libfftw3≥ 3.3
libpython> 3.2
libtool—
pkg-config≥ 0.22

各发行版的一键安装命令(摘自 INSTALL):

# Debian/Ubuntu sudo apt install git gcc g++ make cmake qt5-default libglib2.0-dev zlib1g-dev \ libusb-1.0-0-dev libboost-dev libfftw3-dev python3-dev libudev-dev pkg-config # Qt6 需另装: qt6-base-dev, libQt6Svg*, libgl1-mesa-dev*, libxkbcommon-dev, libvulkan-dev # Fedora sudo yum install git gcc g++ make cmake libtool pkgconfig glib2-devel \ zlib-devel libudev-devel libusb1-devel \ python3-devel qt-devel boost-devel libfftw3-devel # Arch pacman -S base-devel git cmake glib2 zlib libusb \ python boost qt5 fftw # macOS (Homebrew) brew install gcc g++ make cmake gettext glib libusb zlib boost fftw python3 qt pkg-config

构建脚本对依赖的校验

CMakeLists.txt 与 INSTALL 的对应关系很直接:pkg_search_module(GLIB glib-2.0)、find_package(FFTW)、find_package(libusb-1.0)、find_package(ZLIB QUIET)、find_package(Boost 1.42 QUIET)逐项探测,缺失时以FATAL_ERROR中断并给出“Please install xxx”提示(第 96–227 行);Qt 先找 Qt5、找不到再找 Qt6,两者皆无时提示将 Qt 安装路径追加进CMAKE_PREFIX_PATH(第 179–213 行)。其他值得注意的构建选项(第 62–75 行):

  • STATIC_PKGDEPS_LIBS:Windows/MinGW 平台默认开启,静态链接 pkg-config 库;
  • ENABLE_SIGNALS:Unix 下启用 UNIX 信号处理,Windows 强制关闭;
  • ENABLE_TESTS:默认关闭,开启后构建libsigrok4DSL/tests下的检查程序(check_core.c、check_driver_all.c等,见 libsigrok4DSL/tests);
  • 编译标准:C++11 与 C99,Release 下-O3;DISABLE_WERROR默认TRUE(即默认不加-Werror)。

编译产物输出到源码树下的build.dir目录(第 656–657 行)。

标准构建流程与安装内容

git clone <DSView 仓库地址> cd DSView cmake . make sudo make install

make install实际安装的内容(CMakeLists.txt):

  • 可执行文件 →bin/DSView;
  • DSView/res(固件/比特流/设备定义)与DSView/demo(演示波形)→share/DSView;
  • Linux 下安装 DSView/DSView.desktop 桌面条目,并把 DSView/DreamSourceLab.rules 写入/usr/lib/udev/rules.d(或/lib、/etc)作为60-dreamsourcelab.rules——即 USB 设备的 udev 权限规则;
  • 解码器目录 →share/libsigrokdecode4DSL;中英语言资源 →share/DSView/lang;
  • 变更日志与用户手册:NEWS25、NEWS31、ug25.pdf、ug31.pdf。

打包方面,CMake 末尾配置了 CPack(第 698–708 行),源包名为DSView-1.3.2(版本号由DS_VERSION_MAJOR/MINOR/MICRO = 1.3.2拼出,第 33–36 行),CPACK_SOURCE_GENERATOR为 TGZ——这正是 README 所说“official tarball releases”的产出方式。

项目状态与维护建议

README 的 Status 一节值得如实对待:DSView 功能可用,但“仍在进行中”——基础采集、显示、解码、测量链路已经打通,而各 TODO 项(新硬件支持、解码器扩展、显示细节)以 NEWS 日志的形式按版本滚动更新。从 NEWS25 看,近几个版本的修复集中在多屏/DPI、loop 模式采集、解码器崩溃、示波器测量精度等方向,说明项目仍处于活跃迭代阶段。对使用者而言这意味着:

  • 构建时以当前仓库为准,注意CMakeLists.txt声明的最低版本与 INSTALL 的历史版本要求可能不一致(以 CMake 脚本为准);
  • 无硬件环境可直接用 demo 设备与DSView/demo中的示例文件验证界面与解码功能;
  • 命令行排障时可优先使用-l 5 -s开启最高级别日志落盘(main.cpp)。

许可与版权

按 README.md 与 DSView/README 的说明:DSView 整体遵循 GNU General Public License (GPL) v3 或更高版本(GPLv3+)。虽然部分源文件标注 GPLv2+、部分标注 GPLv3+(例如 main.cpp 头部为 GPLv2+ 声明,dsl.c 头部为 GPLv3+ 声明),但由于程序链接了 GPLv3+ 的库,整个项目以 GPLv3+ 为准。各源文件的头部版权声明(DreamSourceLab、sigrok 原作者等)即为版权持有者清单的完整来源;年份范围写法(如 “2013-2022”)按惯例理解为各年均新增了受版权保护的内容。

小结

  • 定位:DSView 是 sigrok/PulseView 体系下 DreamSourceLab 仪器(DSLogic 逻辑分析仪、DSCope 示波器、数据记录仪模式)的官方 GUI,当前处于可用且持续迭代状态;
  • 架构:Qt 前端(DSView/pv/)+ 定制 libsigrok(libsigrok4DSL/,含 dslogic/dscope/demo 驱动与 151 个解码器目录)+ 公共库(common/minizip、common/log)三层组合;
  • 构建:依赖 glib、libusb、FFTW、Boost、Python3、Qt5/Qt6,cmake . && make && make install三步完成,Linux 下附带 udev 规则与桌面条目;
  • 许可:整体 GPLv3+,可自由构建、修改与再分发,但需遵守 GPL 条款。
  • 桌面应用

【免费下载链接】DSView

An open source multi-function instrument for everyone

项目地址:https://gitcode.com/gh_mirrors/ds/DSView
点击查看免费下载

相关推荐

上一篇:微信聊天记录导出完整指南:3 步把全部聊天记忆备份成 HTML、Word 和 Excel
下一篇:如何从零上手 Adobe-GenP:一份完整的使用教程

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询