i.MX6ULL嵌入式Linux开发环境搭建:虚拟机预配与手动配置双路线详解
如果你刚开始接触i.MX6ULL嵌入式Linux开发可能会面临一个关键选择是直接使用老师提供的现成虚拟机还是自己动手搭建完整的开发环境这个看似简单的决定实际上会影响你整个学习路径的效率和质量。很多初学者在搭建环境这一步就卡住了——Ubuntu版本选择困难、交叉编译工具链配置复杂、网络连接问题频发甚至一个简单的权限设置错误就可能导致整个环境无法使用。更让人头疼的是当编译或调试出现问题时很难判断是代码问题还是环境配置问题。本文将为你提供两条清晰的路径一条是快速上手的安全路线使用预配置虚拟机另一条是深入理解的实践路线手动搭建完整环境。无论你是想快速开始项目开发还是希望彻底掌握环境搭建的每个细节都能找到适合自己的方案。1. 为什么环境搭建是嵌入式Linux开发的第一道坎嵌入式Linux开发与普通的应用程序开发有一个本质区别你需要在x86架构的开发机上编写代码然后编译生成能在 ARM架构的开发板上运行的二进制文件。这种跨架构开发模式带来了几个独特的挑战编译环境复杂性你需要配置交叉编译工具链这意味着在你的Ubuntu系统上安装专门为ARM架构设计的GCC编译器。与本地编译不同交叉编译需要正确处理头文件路径、库文件依赖和架构特定的编译选项。调试难度增加当程序在开发板上运行时出现段错误或异常行为传统的调试方法往往失效。你需要配置GDB调试器通过网络或串口连接到开发板进行远程调试这对环境配置的要求很高。依赖管理复杂嵌入式系统通常资源有限不能像桌面系统那样随意安装依赖包。你需要在开发机上准确模拟目标板的运行环境确保编译的程序在开发板上能够正常运行。从实际教学经验来看约60%的初学者问题都与环境配置相关。这也是为什么课程中会提供预配置的虚拟机——它能够帮你绕过这些初期障碍快速进入真正的开发学习阶段。2. 环境方案选择预配虚拟机 vs 手动搭建2.1 预配置虚拟机的优势与局限优势方面开箱即用所有必要的工具和配置已经完成包括交叉编译工具链、必要的开发库、串口调试工具等环境一致性避免了因系统版本、软件版本差异导致的各种兼容性问题时间效率节省了大量环境调试时间可以立即开始代码编写和实验问题排查简单由于环境统一当出现问题时更容易确定是代码问题而非环境问题局限性缺乏定制性如果项目需要特定的软件版本或特殊配置预配环境可能无法满足学习深度不足长期依赖预配环境会错过对底层机制的理解资源占用完整的虚拟机文件通常较大对磁盘空间有一定要求2.2 手动搭建环境的价值手动搭建虽然初期耗时较多但带来的收益是长远的彻底理解工具链通过亲手配置交叉编译环境你会真正理解每个组件的作用问题解决能力在搭建过程中遇到的各种问题都是宝贵的学习经验灵活适应需求能够根据具体项目需求调整环境配置职业发展基础在实际工作中你经常需要为不同的硬件平台配置开发环境对于有Linux基础的学习者建议至少尝试一次完整的手动环境搭建而对于完全的新手先从预配虚拟机开始是更稳妥的选择。3. 手动搭建完整开发环境实践路线3.1 Ubuntu系统安装与基础配置版本选择建议 对于i.MX6ULL开发推荐使用Ubuntu 18.04 LTS或20.04 LTS。LTS版本提供长期支持稳定性更好社区资源也更丰富。避免使用过于新的版本以免遇到工具链兼容性问题。安装步骤下载Ubuntu镜像# 从官网下载Ubuntu 20.04 LTS wget https://releases.ubuntu.com/20.04/ubuntu-20.04.6-desktop-amd64.iso创建虚拟机以VMware为例内存至少4GB推荐8GB硬盘至少40GB建议60GB以上网络桥接模式便于开发板连接系统安装后的基础配置# 更新系统 sudo apt update sudo apt upgrade -y # 安装基础开发工具 sudo apt install -y build-essential git vim curl wget # 安装SSH服务便于远程访问 sudo apt install -y openssh-server sudo systemctl enable ssh sudo systemctl start ssh3.2 交叉编译工具链安装与配置i.MX6ULL使用ARM Cortex-A7架构需要对应的交叉编译工具链。NXP官方提供了专门的工具链# 创建工具链安装目录 sudo mkdir -p /opt/fsl sudo chown $USER:$USER /opt/fsl # 下载NXP官方工具链以imx6ull为例 cd /tmp wget https://www.nxp.com/lgfiles/sdk/IMX6ULL/toolchain/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.bz2 # 解压到安装目录 sudo tar -xjf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.bz2 -C /opt/fsl/ # 配置环境变量 echo export PATH/opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH ~/.bashrc echo export CROSS_COMPILEarm-linux-gnueabihf- ~/.bashrc echo export ARCHarm ~/.bashrc # 使配置生效 source ~/.bashrc # 验证安装 arm-linux-gnueabihf-gcc --version正确的安装应该显示类似以下信息arm-linux-gnueabihf-gcc (GCC) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.3.3 必备开发工具安装串口调试工具# 安装minicom sudo apt install -y minicom # 配置minicom以USB转串口设备为例 sudo minicom -s # 选择Serial port setup # 设置Serial Device: /dev/ttyUSB0 # 设置Hardware Flow Control: No网络工具# 安装网络调试工具 sudo apt install -y tftp-hpa tftpd-hpa nfs-kernel-server # 配置TFTP服务器 sudo mkdir /tftpboot sudo chmod 777 /tftpboot echo TFTP_DIRECTORY/tftpboot | sudo tee -a /etc/default/tftpd-hpa echo TFTP_ADDRESS0.0.0.0:69 | sudo tee -a /etc/default/tftpd-hpa echo TFTP_OPTIONS--secure --create | sudo tee -a /etc/default/tftpd-hpa sudo systemctl restart tftpd-hpa4. VSCode开发环境配置4.1 VSCode安装与基础插件# 安装VSCode wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor packages.microsoft.gpg sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/ sudo sh -c echo deb [archamd64,arm64,armhf signed-by/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main /etc/apt/sources.list.d/vscode.list sudo apt update sudo apt install -y code # 或者直接下载.deb包安装 wget https://code.visualstudio.com/sha/download?buildstableoslinux-deb-x64 -O code.deb sudo dpkg -i code.deb必备插件列表C/C (Microsoft官方插件)C/C Extension PackChinese (Simplified) Language Pack中文语言包GitLensARM汇编语法高亮Makefile工具4.2 交叉编译配置在项目目录下创建.vscode文件夹并添加以下配置文件c_cpp_properties.json智能提示配置{ configurations: [ { name: Linux, includePath: [ ${workspaceFolder}/**, /opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/include/**, /opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/8.3.0/include/** ], defines: [], compilerPath: /opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc, cStandard: c11, cppStandard: c17, intelliSenseMode: linux-gcc-arm } ], version: 4 }tasks.json编译任务配置{ version: 2.0.0, tasks: [ { label: build-imx6ull, type: shell, command: make, group: { kind: build, isDefault: true }, presentation: { echo: true, reveal: always, focus: false, panel: shared }, problemMatcher: [ $gcc ], options: { env: { PATH: /opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:${env:PATH}, CROSS_COMPILE: arm-linux-gnueabihf-, ARCH: arm } } } ] }4.3 调试环境配置launch.json调试配置{ version: 0.2.0, configurations: [ { name: Remote Debug imx6ull, type: cppdbg, request: launch, program: ${workspaceFolder}/build/your_app, args: [], stopAtEntry: false, cwd: ${workspaceFolder}, environment: [], externalConsole: false, MIMode: gdb, miDebuggerPath: /opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb, miDebuggerServerAddress: 192.168.1.100:1234, setupCommands: [ { description: Enable pretty-printing for gdb, text: -enable-pretty-printing, ignoreFailures: true } ] } ] }5. 开发板连接与测试5.1 网络连接配置确保开发板和Ubuntu主机在同一局域网内配置静态IP便于调试# 在Ubuntu中设置静态IP可选 sudo nano /etc/netplan/01-netcfg.yaml # 添加以下配置根据实际网络环境调整 network: version: 2 renderer: networkd ethernet: ens33: dhcp4: no addresses: [192.168.1.50/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 114.114.114.114]5.2 简单测试程序编译与运行创建测试程序hello_imx6ull.c#include stdio.h #include unistd.h int main() { printf(Hello i.MX6ULL!\n); printf(Process ID: %d\n, getpid()); // 简单的硬件相关信息 printf(Architecture: ARM Cortex-A7\n); return 0; }对应的MakefileCC arm-linux-gnueabihf-gcc CFLAGS -Wall -O2 TARGET hello_imx6ull SRC hello_imx6ull.c all: $(TARGET) $(TARGET): $(SRC) $(CC) $(CFLAGS) -o $(TARGET) $(SRC) clean: rm -f $(TARGET) .PHONY: all clean编译测试make file hello_imx6ull正确的输出应该显示hello_imx6ull: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]..., with debug_info, not stripped6. 使用预配置虚拟机快速路线6.1 虚拟机获取与导入如果选择使用魏老师提供的预配置虚拟机操作步骤如下下载虚拟机文件通常为OVA或VMX格式导入虚拟机VMwareFile → Open → 选择虚拟机文件VirtualBox管理 → 导入虚拟电脑配置虚拟机设置调整内存大小建议不少于4GB设置网络为桥接模式分配足够的磁盘空间6.2 预配环境内容验证启动虚拟机后验证关键组件# 检查交叉编译工具链 arm-linux-gnueabihf-gcc --version # 检查必要的开发工具 which make which git which minicom # 检查环境变量 echo $CROSS_COMPILE echo $ARCH6.3 快速开始第一个项目在预配环境中你可以立即开始开发# 创建项目目录 mkdir my_imx6ull_project cd my_imx6ull_project # 直接编译测试 cat test.c EOF #include stdio.h int main() { printf(Test from pre-configured environment!\n); return 0; } EOF arm-linux-gnueabihf-gcc -o test test.c file test7. 常见问题与解决方案7.1 编译相关问题问题1找不到交叉编译工具链bash: arm-linux-gnueabihf-gcc: command not found解决方案# 检查工具链是否安装 ls /opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/ # 重新加载环境变量 source ~/.bashrc # 或者手动添加PATH export PATH/opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH问题2头文件找不到fatal error: stdio.h: No such file or directory解决方案# 检查工具链的头文件路径 find /opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf -name stdio.h # 确保在VSCode配置中正确设置了includePath7.2 调试连接问题问题3GDB连接失败localhost:1234: Connection timed out解决方案# 检查开发板IP是否正确 ping 192.168.1.100 # 检查开发板上的gdbserver是否启动 # 在开发板上执行 gdbserver :1234 ./your_program # 检查防火墙设置 sudo ufw status7.3 系统权限问题问题4串口设备权限不足minicom: cannot open /dev/ttyUSB0: Permission denied解决方案# 将用户添加到dialout组 sudo usermod -a -G dialout $USER # 重新登录或执行 newgrp dialout # 或者临时修改设备权限 sudo chmod 666 /dev/ttyUSB08. 开发环境优化与最佳实践8.1 环境配置维护使用版本控制管理环境配置# 创建环境配置仓库 mkdir dev-environment-config cd dev-environment-config # 保存重要的配置文件 cp ~/.bashrc . cp -r .vscode . # 创建安装脚本 cat setup_env.sh EOF #!/bin/bash # 自动环境设置脚本 echo Setting up i.MX6ULL development environment... # 备份原有配置 cp ~/.bashrc ~/.bashrc.backup # 添加工具链到PATH echo export PATH/opt/fsl/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH ~/.bashrc echo export CROSS_COMPILEarm-linux-gnueabihf- ~/.bashrc echo export ARCHarm ~/.bashrc echo Environment setup completed. Please restart your terminal or run source ~/.bashrc EOF chmod x setup_env.sh8.2 项目管理规范标准的项目目录结构my_imx6ull_project/ ├── src/ # 源代码目录 │ ├── main.c │ └── drivers/ # 驱动代码 ├── include/ # 头文件目录 ├── build/ # 编译输出目录 ├── scripts/ # 构建脚本 ├── docs/ # 项目文档 └── Makefile # 构建配置模块化的Makefile示例# 工具链配置 CROSS_COMPILE arm-linux-gnueabihf- CC $(CROSS_COMPILE)gcc LD $(CROSS_COMPILE)ld # 项目配置 TARGET my_app SRCDIR src INCDIR include BUILDDIR build # 源文件列表 SRCS $(wildcard $(SRCDIR)/*.c) $(wildcard $(SRCDIR)/drivers/*.c) OBJS $(SRCS:%.c$(BUILDDIR)/%.o) # 编译选项 CFLAGS -Wall -O2 -I$(INCDIR) LDFLAGS -lm # 构建规则 $(BUILDDIR)/$(TARGET): $(OBJS) $(CC) -o $ $^ $(LDFLAGS) $(BUILDDIR)/%.o: %.c mkdir -p $(dir $) $(CC) $(CFLAGS) -c -o $ $ clean: rm -rf $(BUILDDIR) .PHONY: clean8.3 调试技巧与工具使用GDB进行远程调试# 在开发板上启动gdbserver gdbserver :1234 ./my_app # 在开发机上连接调试 arm-linux-gnueabihf-gdb ./my_app (gdb) target remote 192.168.1.100:1234 (gdb) break main (gdb) continue核心转储分析# 在开发板上启用核心转储 ulimit -c unlimited echo /tmp/core.%e.%p /proc/sys/kernel/core_pattern # 分析核心转储文件 arm-linux-gnueabihf-gdb ./my_app /tmp/core.my_app.1234无论选择手动搭建还是使用预配虚拟机关键是要理解每个组件的作用和配置原理。手动搭建让你获得更深的技术理解而预配虚拟机则提供更快的上手路径。在实际项目中这两种经验都是宝贵的——理解环境配置原理能帮你快速解决实际问题而使用标准化环境则能提高团队协作效率。建议初学者先从预配虚拟机开始快速进入开发阶段然后在项目间隙逐步尝试手动搭建。当你能独立完成整个环境配置时说明你已经具备了解决实际开发环境中各种问题的能力。

相关新闻

cann/asc-devkit算子入图开发基本流程

cann/asc-devkit算子入图开发基本流程

基本开发流程 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.c…

2026/10/20 13:02:05 阅读更多 →
ST-LINK_V2调试器核心功能与SWD接口实战指南

ST-LINK_V2调试器核心功能与SWD接口实战指南

1. ST-LINK_V2调试器核心功能解析ST-LINK_V2是STMicroelectronics官方推出的ARM Cortex-M系列微控制器调试编程工具,作为嵌入式开发者的"手术刀",它能精准完成芯片级调试、程序烧录和性能分析。与早期版本相比,V2版本在SWD协议支持…

2026/10/19 11:52:41 阅读更多 →
如何高效使用AutoHotkey实现谷歌浏览器自动化:专业实战指南

如何高效使用AutoHotkey实现谷歌浏览器自动化:专业实战指南

如何高效使用AutoHotkey实现谷歌浏览器自动化:专业实战指南 【免费下载链接】Chrome.ahk Automate Google Chrome using native AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ch/Chrome.ahk Chrome.ahk是一款强大的AutoHotkey谷歌浏览器自动化库&am…

2026/10/20 15:09:48 阅读更多 →

最新新闻

鸿蒙ArkTS生鲜超市实战项目解析与避坑指南

鸿蒙ArkTS生鲜超市实战项目解析与避坑指南

简介:本资源是一套基于华为鸿蒙操作系统(HarmonyOS)开发的生鲜超市行业应用实战项目,面向Android开发者转型鸿蒙生态、高校学生学习分布式应用开发及企业级HarmonyOS项目实践者。项目聚焦线上线下融合购物场景,完整呈现…

2026/10/20 20:58:45 阅读更多 →
Chrome链接总是覆盖当前页?教你设置自动在新标签页打开

Chrome链接总是覆盖当前页?教你设置自动在新标签页打开

"每次点链接都把当前页覆盖掉,后来越来越烦"——这个需求我收到过太多次了。Chrome 默认点击链接就在当前标签页打开,想在新标签页打开,要么按着 Ctrl 点,要么右键菜单选"在新标签页中打开链接"。一次两次还行…

2026/10/20 20:58:45 阅读更多 →
LMDeploy实战:开源大模型量化、推理与OpenAI兼容服务部署

LMDeploy实战:开源大模型量化、推理与OpenAI兼容服务部署

这段时间一直在折腾开源大模型的落地部署,试了不少推理框架,最后在业务环境里稳定跑下来的是 LMDeploy。如果你也在做类似的事情——想把 Qwen、Llama 这类开源模型接到自己的系统里,或者想在项目里做一个带 API 的聊天服务,那么这…

2026/10/20 20:58:45 阅读更多 →
Windows cmd进入指定目录全攻略:cd命令、跨盘符与批处理技巧

Windows cmd进入指定目录全攻略:cd命令、跨盘符与批处理技巧

Windows 下在 cmd 里进指定目录,这事看起来简单到不值一提,但实际操作中我见过太多人在这一步卡住——输入cd D:\某文件夹没反应,路径一长就报错,带空格的目录怎么都进不去,还有一个很经典的cd后提示「不是内部或外部命…

2026/10/20 20:58:45 阅读更多 →
LMDeploy 大模型部署实战:从模型量化到API服务全流程指南

LMDeploy 大模型部署实战:从模型量化到API服务全流程指南

之前帮某开发者的“模拟项目X”做大模型部署时,我在 GPU 服务器上对比过好几套推理方案,踩完一圈坑之后,现在手里的长期方案基本固定成了 LMDeploy。如果你手里已经有一个开源对话模型,正打算放进业务里做 API 服务,或…

2026/10/20 20:58:45 阅读更多 →
TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

前段时间重新整理之前的深度学习实验笔记,翻到鞋类识别(Fashion MNIST)这个项目时,觉得特别值得拿出来单独写一篇。原因很简单:很多人入门深度学习时,都会被建议先跑通手写数字识别(MNIST&#…

2026/10/20 20:57:37 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →