RK3326的Linux嵌入式设备基于SMB/CIFS实现局域网与PC端文件交互方案 前言项目背景近期承接一款Linux嵌入式检测设备定制开发项目主控芯片采用瑞芯微 RK3326搭载嵌入式 LinuxQt 上位机软件主要功能为采集某些车辆数据、生成 PDF 检测报告、读取 PC 下发的设备参数配置文件。客户现场使用场景为车间局域网环境多台检测设备与办公 PC 接入同一台 WiFi 路由器设备无独立服务器、无云平台要求本地局域网内完成Linux系统的设备端与PC电脑端的双向文件交互具体如下PC 端固定目录存放设备运行 ini 配置文件设备上电自动读取全部配置设备完成检测后生成 PDF 报告自动上传至 PC 指定存储文件夹支持现场操作人员手动修改 PC 上的配置文件设备实时重载操作门槛低现场工程师仅需输入 PC 局域网 IP 即可完成连接无需复杂网络配置。方案选型对比项目初期梳理三种局域网文件交互方案逐一对比优劣最终敲定 Windows SMB/CIFS 挂载方案方案优势劣势项目适配性FTP/SFTP 文件传输跨平台通用、协议成熟需要 PC 开启 FTP 服务、配置账户端口设备每次读写文件需建立连接批量读取 ini、持续上传 PDF 逻辑复杂现场 PC 防火墙极易拦截 21 端口车间电脑多为普通员工权限无法开启 FTP 服务不太好现场部署成本高自定义 Socket 文件传输自主可控、无系统依赖需要 PC 端配套上位机接收程序客户现场不愿额外安装软件文件断点续传、目录遍历、权限校验需从零开发开发周期长、BUG 风险高放弃了客户拒绝安装 PC 软件SMB/CIFS 共享目录挂载Windows 原生支持无需额外安装 PC 软件设备端将 PC 共享目录挂载为本地路径Qt 直接文件 IO 读写业务层无需处理网络协议仅需配置一次 IP长期稳定读写适配车间 Windows 办公电脑首选方案完美匹配客户需求决定选用方案整体架构说明网络层RK3326 设备、Windows PC 连接同一 WiFi 局域网网段统一路由器关闭 AP 隔离设备与 PC 二层互通PC 绑定静态 IP避免 IP 漂移导致挂载失效。PC 端Windows 开启 SMB1.0 协议、配置文件夹匿名共享Guest 免密模式开放 139、445、137、138 端口NTFS 与 SMB 双重权限放开读写。设备固件层内核开启 CONFIG_CIFS内置 cifs 文件系统模块支持 mount -t cifs 挂载命令。设备应用层Qt 封装 SMB 挂载工具类自动创建挂载目录、动态根据用户输入 IP 拼接共享路径、一键挂载 / 卸载上层业务直接以本地文件形式读写 PC 共享目录无需网络相关逻辑改造。业务数据流读流程Qt 读取 /mnt/pc_share/Config/*.ini → 解析参数初始化设备写流程设备生成 PDF 报告 → Qt 调用文件接口复制至 /mnt/pc_share/Report/实时同步至 PC 磁盘。第一章 Windows PC 端全套标准化配置包含Windows家庭版量产免密 Guest 模式本项目测试电脑为 Windows 家庭版系统无本地组策略 gpedit.msc、无本地用户和组 lusrmgr.msc 图形工具所有配置全部通过系统功能、注册表、CMD 命令实现全程不需要专业系统权限普通管理员账号即可完成。基础环境说明PC 无线局域网 IP192.168.103.19路由器后台绑定 MAC 静态分配禁止自动 DHCP 浮动 IP本地磁盘路径E 盘根目录创建固定文件夹 E:\test\TTM313内置两级子目录Config存放所有设备 ini 配置文件设备只读访问Report设备上传 PDF 检测报告设备拥有写入、新建、删除权限SMB 共享名称统一为 TTM313挂载路径固定 //PCIP/TTM313认证模式匿名 Guest 免密登录适配嵌入式老旧 SMB1 协议现场无需记录账号密码降低操作难度。1.1 步骤一开启 SMB 1.0/CIFS 系统组件嵌入式设备强制依赖RK3326 老旧 Linux 内核仅稳定兼容 SMB1.0 协议Windows 10/11 默认关闭该组件不开启则设备无法建立连接也是项目调试初期最高发报错根源。快捷键 WinR 唤起运行窗口输入命令“optionalfeatures.exe”回车打开 Windows 功能管理器在功能列表中向下滑动找到“SMB 1.0/CIFS 文件共享支持”总项展开全部子项将下面这三个子项全部勾选“SMB 1.0/CIFS 自动删除”、“SMB 1.0/CIFS 文件共享”、“SMB 1.0/CIFS 客户端”点击确定系统自动下载安装对应组件等待进度条走完强制重启电脑组件安装完成不重启不会生效90% 初期 “找不到网络名” 报错均来自未重启重启完成后验证组件状态右键开始菜单打开管理员 PowerShell输入校验命令Get-SmbServerConfiguration|Select EnableSMB1Protocol实际显示如下输出结果为 True 代表 SMB1 协议正常启用若为 False 需要重新勾选组件并再次重启。1.2 步骤二无线网卡开启文件共享与 NetBIOS over TCP/IPSMB1 协议依赖 NetBIOS 协议完成局域网设备寻址网卡默认关闭 NetBIOS 会导致本地 127 回环访问、局域网 IP 访问全部失败操作流程打开控制面板 - 网络和 Internet - 网络适配器找到当前连接WiFi 的无线网卡我是WIFI连接的如果你是优先连接你就找对应有线网卡右键无线网卡选择属性在项目列表中勾选「Microsoft 网络的文件和打印机共享」未勾选则 Windows 不对外提供共享服务双击列表内「Internet 协议版本 4 (TCP/IPv4)」弹出 IPv4 配置窗口切换至「高级」按钮在高级 TCP/IP 设置中切换 WINS 标签页选择「启用 TCP/IP 上的 NetBIOS」一路点击确定保存全部窗口右键 WiFi 网卡选择禁用等待 5 秒后重新启用刷新网卡网络配置确保 NetBIOS 参数生效。1.3 步骤三注册表修改家庭版无组策略核心配置解决来宾匿名拦截Windows 新版系统默认拦截不安全来宾 SMB 登录同时强制开启 SMB 数字签名与 RK3326 SMB1 协议存在兼容性冲突家庭版无法通过组策略修改只能通过注册表写入参数修改完成必须重启电脑。WinR 输入 regedit 打开注册表编辑器分两处路径修改1.3.1 放开不安全来宾 SMB 登录权限注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters右键 Parameters 文件夹新建 DWORD (32 位) 值命名为AllowInsecureGuestAuth双击打开数值数据填写 1基数选择十进制该参数作用允许 Guest 匿名账户通过 SMB1 协议访问本机共享文件夹关闭该参数时设备端 Guest 登录会直接提示用户名密码无效。1.3.2 关闭 SMB 强制数字签名兼容老旧嵌入式设备注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters右键新建两个 DWORD (32 位) 值数值全部设置为 0RequireSecuritySignature 0EnableSecuritySignature 0系统默认开启 SMB 签名校验RK3326 内核不支持签名逻辑会直接挂载失败关闭签名后二者协议握手正常。注册表全部修改完成保存所有窗口重启电脑使注册表参数完全生效。1.4 步骤四启用系统内置 Guest 来宾账户设置空密码项目采用免密匿名模式登录账户固定为系统 GuestWindows 默认禁用来宾账户需要管理员 CMD 命令启用并清空密码右键开始菜单打开管理员 CMD 终端执行第一条命令启用来宾账户net user Guest /active:yes提示命令成功完成代表启用3. 执行第二条命令清空 Guest 登录密码net user Guest双引号内无任何字符代表账户无密码匹配设备端挂载参数password空密码配置。1.5 步骤五局域网高级共享参数配置打开控制面板 - 网络和共享中心 - 高级共享设置专用网络当前 WiFi 所属网络类型勾选启用网络发现、启用文件和打印机共享所有网络分类找到密码保护共享选项选择关闭密码保护共享点击保存更改系统自动记录局域网共享规则。1.6 步骤六文件夹目录创建 NTFS 本地权限 SMB 共享双重权限配置该步骤为 PC 配置核心绝大多数设备挂载后无法读写文件的故障根源是缺少 NTFS 底层本地权限仅配置共享权限无法完成文件读写必须双重权限同时配置。6.1 创建标准目录结构打开 E 盘逐级新建文件夹(根据自己的实际需要命名)“E:\test\TTM313” 内部新建两个子文件夹 Config、Report严格区分配置读取目录与报告写入目录这里也是根据你要共享读写的实际需要进行新建不需要按照本文的例子命名。6.2 NTFS 底层安全权限配置右键E:\test\TTM313 文件夹选择属性切换至安全标签点击编辑按钮在权限编辑窗口点击添加输入用户名 Guest点击检查名称系统自动识别来宾账户确定添加选中 Guest 用户下方权限列表全部勾选允许完全控制、修改、读取和执行、列出文件夹内容、读取、写入重复添加 Everyone 用户同样授予全部允许权限兼顾其他电脑访问兼容性返回文件夹属性常规标签取消勾选「只读」点击高级勾选 “将更改应用于此文件夹、子文件夹和文件”确定保存确保子目录 Config、Report 同步继承读写权限。6.3 SMB 共享权限配置右键目标文件夹切换共享标签点击高级共享勾选共享此文件夹共享名称严格填写SmbShare与设备挂载路径保持一致点击权限按钮添加 Guest、Everyone 两个用户全部授予完全控制权限所有弹窗依次点击应用、确定完整保存共享配置。1.7 步骤七Windows 防火墙放行 SMB 协议端口Windows 默认防火墙拦截 SMB 局域网访问必须手动放行对应 TCP、UDP 端口否则同 WiFi 下设备无法与 PC 建立连接WinR 输入wf.msc打开高级安全 Windows 防火墙左侧入站规则右侧新建规则第一条规则配置 TCP 端口规则类型选择端口下一步选择 TCP特定本地端口填写139,445允许连接下一步勾选域、专用、公用三类网络规则名称填写 SMB TCP 共享 139/445完成创建再次新建规则配置 UDP 端口端口类型 UDP特定本地端口137,138允许全部网络命名 SMB UDP NetBIOS完成打开控制面板 - Windows 防火墙 - 允许应用通过防火墙在应用列表找到文件和打印机共享专用、公用复选框全部勾选保存设置。补充说明现场电脑安装火绒、360 安全卫士、电脑管家等第三方安全软件需要完全退出实时防护第三方安全软件会底层拦截 445 端口导致共享访问失败。1.8 步骤八重启 SMB 核心系统服务加载全部配置管理员 CMD 执行四条服务重启命令刷新共享服务缓存无需重启整机即可临时生效net stop LanmanServer net start LanmanServer net stop LanmanWorkstation net start LanmanWorkstationLanmanServer 为 Windows 共享主服务LanmanWorkstation 负责客户端 SMB 连接重启后所有注册表、权限、共享配置同步加载。1.9 步骤九PC 本地自检验证共享功能可用全部配置完成后通过两条命令自检确认 PC 侧无配置问题再进行设备端调试避免现场调试时分不清故障端自检 1查看本机共享列表net share输出列表中出现 TTM313 E:\test\TTM313 代表共享文件夹创建成功。当然这时候在“此电脑”中也能看到共享的目录第二章 RK3326 设备固件前置校验与 adb 调试操作2.1 固件底层前置要求内核编译开启CONFIG_CIFSy/m内置 cifs 文件系统驱动支持 mount -t cifs 命令根文件系统具备完整 mount、umount 工具支持文件权限参数 file_mode、dir_mode设备 WiFi 驱动正常可连接 2.4G/5G 车间局域网 WiFi自动获取同网段 IP设备 Qt 程序运行权限为 root挂载、卸载系统命令属于特权操作普通用户权限会执行失败。2.2 adb shell 调试前置操作流程设备通过 USB 数据线连接 Windows PC设备开启 adb 调试模式Windows 终端输入adb shell进入设备 Linux 根终端提示符为rootTTM313:/#基础连通性校验ping PC 静态 IP验证局域网互通//根据自己实际的局域网IPping192.168.103.19持续发包无丢包代表网络正常ping 不通排查路由器 AP 隔离、WiFi 网段不一致、PC 防火墙拦截 ICMP4. 校验 cifs 内核模块可用性modprobe cifs无任何报错输出代表模块加载正常提示找不到模块则固件未开启 cifs需要重新编译内核。2.3 手动挂载完整流程adb 调试验证项目初期 Qt 代码未开发完成时通过 adb 手动执行挂载命令验证连通性分步执行避免目录不存在报错创建固定挂载目录 /mnt/pc_share-p 参数自动生成上级目录重复执行不会报错根据你实际情况设定目录文件夹名称mkdir-p/mnt/pc_share完整单行挂载命令适配 Guest 免密、SMB1、中文不乱码、嵌入式兼容参数运行mount-tcifs //192.168.103.19/TTM313 /mnt/pc_share-ousernameGuest,password,vers1.0,iocharsetutf8,file_mode0644,dir_mode0755,noserverino参数逐项解释//192.168.103.19/TTM313PC 共享源路径IP 可根据用户输入动态替换/mnt/pc_share设备本地固定挂载点usernameGuestWindows 合法匿名登录账户password空密码匹配 Guest 无密码配置vers1.0强制使用 SMB1 协议适配 RK3326 老旧内核iocharsetutf8解决中文文件夹、中文文件名乱码file_mode0644、dir_mode0755控制设备创建文件、文件夹读写权限noserverino修复嵌入式 Linux 读取共享目录卡顿、文件识别丢失问题。挂载成功校验ls/mnt/pc_share输出 Config、Report 两个文件夹代表挂载完成可读取 ini、写入 PDF卸载共享目录文件占用时使用懒卸载 - l避免卡死bash运行umount -l /mnt/pc_share第三章 Qt 上层应用完整封装实现适配 RK3326 嵌入式 Linux根据客户需求Qt 程序需要实现核心逻辑自动判断挂载目录是否存在、用户输入 PC 局域网 IP 动态拼接共享路径、一键挂载 / 卸载、实时判断挂载状态、挂载失败返回详细错误信息弹窗提示。代码分为工具类头文件、实现文件、UI 调用示例三部分全部经过真机编译运行无平台兼容性问题。3.1 工具类头文件 smbsharehelper.h#ifndefSMBSHAREHELPER_H#defineSMBSHAREHELPER_H#includeQObject#includeQString#includeQProcess#includeQDir#includeQFileInfoclassSmbShareHelper:publicQObject{Q_OBJECTpublic:explicitSmbShareHelper(QObject*parentnullptr);// 挂载共享目录// pcIp: 用户输入PC IP如192.168.103.19// 返回true挂载成功false失败boolmountPcShare(constQStringpcIp);// 卸载共享目录boolumountPcShare();// 判断是否已经挂载成功boolisMounted()const;private:// 挂载点路径constQString m_mountPoint/mnt/pc_share;// 共享文件夹名固定TTM313constQString m_shareNameTTM313;};#endif// SMBSHAREHELPER_H3.2 工具类实现文件 smbsharehelper.cpp#includesmbsharehelper.h#includeQTextStream#includeQFile#includelog4qt/logger.h#includeCommonDefine.hLOG4QT_DECLARE_STATIC_LOGGER(logger,ConfigControl)SmbShareHelper::SmbShareHelper(QObject*parent):QObject(parent){}boolSmbShareHelper::mountPcShare(constQStringpcIp){// 1. 拼接SMB共享源路径 //IP/TTM313QString smbSourceQString(//%1/%2).arg(pcIp).arg(m_shareName);// 2. 判断挂载目录是否存在不存在创建QDirmountDir(m_mountPoint);if(!mountDir.exists()){// mkdir -p 创建多级目录QProcess mkdirProc;QStringList mkdirArgs;mkdirArgs-pm_mountPoint;mkdirProc.start(mkdir,mkdirArgs);if(!mkdirProc.waitForFinished(3000)){logger()-info()__FUNCTION__QString(, 创建pc_share目录超时...);returnfalse;}if(mkdirProc.exitCode()!0){logger()-info()__FUNCTION__QString(, 创建pc_share目录失败...)mkdirProc.readAllStandardError();returnfalse;}}// 3. 组装完整mount命令参数QStringList mountArgs;mountArgs-tcifssmbSourcem_mountPoint-ousernameGuest,password,vers1.0,iocharsetutf8,file_mode0644,dir_mode0755,noserverino;// 4. 执行mountQProcess mountProc;mountProc.start(mount,mountArgs);if(!mountProc.waitForFinished(5000)){logger()-info()__FUNCTION__QString(, 挂载命令执行超时请检查网络或IP);returnfalse;}intexitCodemountProc.exitCode();if(exitCode!0){logger()-info()__FUNCTION__QString(, 挂载失败错误详情:)mountProc.readAllStandardError();returnfalse;}// 5. 挂载成功校验目录存在QDirtestDir(m_mountPoint);if(!testDir.exists()){logger()-info()__FUNCTION__QString(, 命令执行无报错但挂载目录未生效);returnfalse;}returntrue;}boolSmbShareHelper::umountPcShare(){if(!isMounted()){returntrue;}QProcess umountProc;QStringList args;args-lm_mountPoint;// -l 懒卸载避免文件占用卡住umountProc.start(umount,args);if(!umountProc.waitForFinished(3000)){logger()-info()__FUNCTION__QString(, 卸载超时);returnfalse;}if(umountProc.exitCode()!0){logger()-info()__FUNCTION__QString(, 挂载失败错误详情:)umountProc.readAllStandardError();returnfalse;}returntrue;}boolSmbShareHelper::isMounted()const{// 读取 /proc/mounts 判断是否存在挂载记录QFilemountsFile(/proc/mounts);if(!mountsFile.open(QIODevice::ReadOnly))returnfalse;QTextStreamstream(mountsFile);QString contentstream.readAll();mountsFile.close();// 包含挂载点路径即代表已挂载returncontent.contains(m_mountPoint);}3.3 调用示例#includesmbsharehelper.h#includeQMessageBox#includeQFile#includeQDir// 挂载按钮点击槽函数voidMainWindow::on_btnMountConnect_clicked(){// 获取界面输入框内用户填写的PC局域网IPQString inputPcIpui-editPcIP-text().trimmed();if(inputPcIp.isEmpty()){QMessageBox::warning(this,输入提示,请填写PC设备局域网IP地址);return;}SmbShareHelper shareTool;boolmountResultshareTool.mountPcShare(inputPcIp);if(mountResult){QMessageBox::information(this,连接成功,QString(PC共享目录挂载完成\n本地访问路径%1).arg(/mnt/pc_share));// 挂载成功后自动加载PC端Config下所有ini配置文件业务逻辑可在此拓展loadAllConfigFile();}else{QMessageBox::critical(this,挂载失败,);}}// 卸载按钮点击槽函数voidMainWindow::on_btnUmountDisconnect_clicked(){SmbShareHelper shareTool;boolumountResultshareTool.umountPcShare();if(umountResult){QMessageBox::information(this,操作完成,PC共享目录已安全卸载);}else{QMessageBox::critical(this,卸载失败,);}}// 业务拓展读取PC共享Config目录下ini配置文件示例voidMainWindow::loadAllConfigFile(){QString configDir/mnt/pc_share/Config;QDirdir(configDir);// 筛选所有ini后缀配置文件QStringList filter;filter*.ini;dir.setNameFilters(filter);QFileInfoList fileListdir.entryInfoList();for(autofileInfo:fileList){QString filePathfileInfo.absoluteFilePath();QFileconfigFile(filePath);if(configFile.open(QIODevice::ReadOnly)){QString configContentconfigFile.readAll();// 解析配置内容初始化设备参数parseConfigData(configContent);configFile.close();}}}// 业务拓展生成PDF报告上传至PC Report目录voidMainWindow::uploadReportToPC(QString localPdfPath,QString pdfName){QString targetPathQString(/mnt/pc_share/Report/%1).arg(pdfName);QFile::copy(localPdfPath,targetPath);}3.4 Qt 代码核心逻辑说明目录自动创建代码内部先通过 QDir 判断/mnt/pc_share是否存在缺失自动调用mkdir -p创建解决调试阶段No such file or directory报错IP 动态拼接完全由用户界面输入 IP 生成共享源路径无需固定写死 IP适配车间多台 PC 切换使用场景精准挂载状态判断读取系统 /proc/mounts 文件不会单纯依靠目录是否存在判断避免目录残留导致状态误判超时保护mkdir、mount、umount 全部设置等待超时防止网络卡死造成 Qt 界面假死完整错误输出捕获命令标准错误输出弹窗展示详细报错日志现场工程师可直接根据提示定位故障懒卸载机制卸载使用umount -l设备正在读写 PDF 报告时不会出现设备忙卸载失败。3.5 编译与运行注意事项Qt 程序必须以 root 权限运行mount、umount 属于 Linux 系统特权命令普通权限调用会直接执行失败RK3326 Buildroot 文件系统需要预装 QProcess 依赖支持调用系统 shell 命令固件开机可增加 cifs 模块自动加载脚本无需手动执行 modprobe cifs程序读写共享目录文件时增加挂载状态判断未挂载时禁止读写操作避免程序崩溃。第四章 全流程故障排查踩坑汇总本章整合 PC 端配置、设备端adb配置调试、Qt 程序运行这几方面的报错按照现象、根本原因、分步处理方案进行整理现场调试时可依此参考。4.1 PC 端共享配置故障故障 1运行\127.0.0.1\TTM313提示找不到网络名根本原因SMB1 组件勾选后未重启电脑组件未加载WiFi 网卡未开启 NetBIOS over TCP/IPLanmanServer、LanmanWorkstation 服务未正常运行第三方杀毒软件拦截 139/445 端口。处理方案重启电脑PowerShell 校验 EnableSMB1ProtocolTrue网卡 IPv4 高级设置开启 NetBIOS管理员 CMD 重启四大共享服务完全退出火绒、360 等安全软件。故障 2net use Z: …/user:Guest 提示用户名密码无效弹窗要求输入密码根本原因Guest 账户未执行命令启用注册表 AllowInsecureGuestAuth 数值为 0文件夹 NTFS 安全权限未添加 Guest 用户高级共享未关闭密码保护共享。处理方案执行net user Guest /active:yes启用来宾修改注册表参数并重启整机文件夹安全与共享权限双重添加 Guest授予完全控制所有网络设置关闭密码保护共享弹窗出现直接回车使用空密码登录。故障 3net share 可查询到共享RK3326 设备无法通过 IP 访问 PC根本原因Windows 防火墙未放行 SMB 端口路由器 WiFi 开启 AP 客户端隔离。处理方案防火墙新建 TCP/UDP 规则放行 139、445、137、138 端口登录路由器后台关闭 AP 隔离、客户端隔离功能。故障 4Z 盘映射成功但无法向 Report 文件夹写入 PDF 文件根本原因NTFS 本地安全权限缺少 Guest 写入权限文件夹标记只读属性。处理方案文件夹安全标签添加 Guest勾选修改、写入权限取消文件夹只读应用到所有子文件、子目录。4.2 RK3326 设备 adb 挂载故障故障 1mount 命令报错 Couldn’t chdir to /mnt/pc_share: No such file or directory根本原因设备本地不存在挂载目录无法挂载至不存在路径。处理方案adb shell 执行mkdir -p /mnt/pc_share创建目录后再执行挂载。故障 2mount 返回 Permission denied 权限拒绝根本原因挂载命令缺少 vers1.0 参数PC Guest 权限不足Windows 未关闭 SMB 强制签名。处理方案挂载参数追加 vers1.0 强制 SMB1 协议PC 端给文件夹 Guest 完全控制读写权限修改注册表关闭 SMB 签名重启 PC。故障 3挂载成功中文 ini、中文 PDF 文件名乱码根本原因挂载参数缺失 iocharsetutf8 字符集配置。处理方案挂载 - o 参数增加 iocharsetutf8。故障 4挂载成功ls 读取目录卡顿、部分文件丢失根本原因缺少 noserverino 嵌入式兼容参数。处理方案挂载参数追加 noserverino。故障 5设备无法 ping 通 PC 局域网 IP根本原因设备与 PC 连接不同 WiFi、路由器 AP 隔离开启、PC 防火墙拦截 ICMP 回显。处理方案设备接入与 PC 完全相同 WiFi路由器关闭 AP 隔离Windows 防火墙放行 ping ICMP 请求。4.3 Qt 程序运行故障故障 1界面点击挂载按钮无任何响应弹窗无报错根本原因Qt 程序无 root 权限QProcess 调用 mount 命令被系统拦截固件未加载 cifs 模块。处理方案修改程序启动脚本使用 root 用户启动 Qt 应用开机脚本执行 modprobe cifs 加载内核模块。故障 2Qt 挂载提示命令执行超时根本原因PC IP 输入错误、WiFi 断开、PC 关机、路由器网络故障。处理方案校验输入 IP 格式正确性adb shell ping PC IP 验证网络连通确认 PC 正常开机、WiFi 在线。故障 3isMounted 状态判断异常目录存在但判定未挂载根本原因仅依靠 QDir 判断目录未读取 /proc/mounts 真实挂载记录。处理方案沿用代码内读取内核挂载表的判断逻辑不单纯判断目录是否存在。故障 4上传 PDF 文件至 Report 目录失败文件大小为 0根本原因NTFS 权限未给 Guest 写入权限共享目录只读。处理方案回到 PC 文件夹权限配置重新给 Guest 授予完全控制权限。第五章 优化方案批量部署长期稳定运行5.1 PC 端量产标准化优化路由器绑定 PC MAC 地址分配静态 IP制作设备台账记录每台 PC 固定 IP避免现场 IP 漂移批量电脑制作注册表 reg 配置文件双击导入即可完成来宾、SMB 签名配置无需手动修改注册表电脑统一卸载第三方安全软件或配置安全软件白名单放行 139、445 端口标准化文件夹路径固定 E:\test\TTM313禁止现场修改文件夹名称、共享名。禁止公网环境使用 Guest 匿名共享仅内网局域网使用规避网络安全风险。5.2 RK3326 固件底层优化开机启动脚本自动执行 modprobe cifs无需手动加载内核模块根文件系统永久保留 /mnt/pc_share 目录省去 Qt 程序自动创建步骤关闭 WiFi 休眠策略防止设备长时间闲置断开局域网 WiFi导致挂载断开。5.3 Qt 应用量产功能优化增加挂载自动重连逻辑业务读写文件前判断挂载状态未挂载自动使用界面保存的 IP 重新挂载IP 输入框增加历史 IP 记录下拉列表操作人员无需重复输入文件读写增加异常捕获挂载断开时弹窗提示 “PC 共享连接断开请检查网络与 IP”PDF 上传增加文件完整性校验复制完成后比对本地与 PC 端文件大小避免传输中断生成损坏文件程序退出时自动执行 umount 卸载共享目录正常释放 SMB 连接。结语本套 SMB/CIFS 双向文件交互方案完美适配 RK3326 嵌入式 Linux 设备与 Windows 的PC 的本地文件交互需求全程无需 PC 额外安装客户端软件依靠 Windows 原生共享功能实现零成本部署设备端 Qt 应用屏蔽底层网络、挂载命令细节操作人员仅需输入 IP 即可完成连接大幅降低现场实施门槛。在我开始调试过程中踩坑集中在 Windows 家庭版来宾匿名权限、SMB1 协议兼容、NTFS 双重权限配置几方面因此写本文完整记录从 PC 系统配置、固件校验、Qt 上层开发、故障排查到优化全流程所有命令、代码、注册表修改等各方面的操作。