国产SPI Flash在Linux系统下的驱动适配与移植实战
1. 项目概述当国产平台遇上国产Flash最近在基于复旦微电子的FMQL系列平台可以理解为国产化的ZYNQ进行Linux系统开发时遇到了一个挺典型但又有点棘手的问题系统引导程序U-Boot和Linux内核无法正确识别板载的国产SPI Flash芯片更别提后续的挂载和分区了。这个问题在从Xilinx ZYNQ平台迁移到国产平台或者初次使用某些国产Flash芯片时出现的概率不低。表面上看系统启动后找不到存储设备启动日志里可能只有一堆SPI控制器初始化成功但后续探测不到任何Flash型号的信息直接导致根文件系统无法挂载系统启动失败。其核心原因在于无论是U-Boot还是Linux内核其默认的驱动支持列表俗称“驱动支持包”主要围绕国际大厂如Winbond、Macronix、Spansion等的芯片构建对于很多新兴的国产SPI Flash它们的硬件IDJEDEC ID或内部指令集可能未被收录或者需要一些特殊的配置参数。这就好比你的电脑装好了系统但偏偏不认你新买的国产固态硬盘系统自然就跑不起来。解决这个问题需要我们深入到U-Boot和Kernel的驱动层面进行针对性的适配和修改。这个过程不仅涉及驱动代码的修改还牵涉到设备树Device Tree的配置、编译系统的调整是一个完整的嵌入式Linux驱动移植案例。2. 问题根因深度剖析为什么“不认识”要解决问题首先得搞清楚U-Boot和Kernel是如何“认识”一块SPI Flash的。这个过程并非魔法而是一套标准的协议和匹配机制。2.1 SPI Flash识别的基础JEDEC ID与驱动表每一颗符合JEDEC标准的SPI Flash芯片在上电后都可以通过发送0x9F指令读取一个唯一的制造商和设备ID通常是3个或更多字节。例如华邦Winbond的W25Q128JV芯片其ID可能是0xEF 0x40 0x18。U-Boot和Kernel的SPI NOR Flash驱动通常是drivers/mtd/spi-nor/目录下的核心驱动内部维护了一张巨大的“闪存信息表”spi_nor_ids或类似的结构体数组。这张表就像一本“芯片户口本”里面记录了已知芯片的ID、名称、容量、页大小、扇区大小、支持的指令集如4字节地址模式、Quad SPI使能方式等关键参数。当驱动初始化时它会通过SPI总线发送0x9F命令读取芯片的实际ID然后拿着这个ID去内部的“户口本”里逐条比对。一旦找到完全匹配的条目驱动就认为“认识”了这个芯片并按照表中定义的参数对其进行初始化和操作。如果遍历完整个表都找不到匹配项驱动就会报错最常见的日志就是“Unknown SPI NOR flash”或直接探测失败后续的分区解析、挂载自然无从谈起。2.2 国产Flash的常见“水土不服”点国产SPI Flash芯片为了追求更好的性能、更低的成本或实现差异化可能会在以下几个方面与国际通用标准产生细微差异导致驱动无法直接识别JEDEC ID未收录这是最直接的原因。驱动表里根本没有这个ID自然不认识。很多国产芯片会使用自己申请的制造商ID或者复用某个公共ID但设备号不同。4字节地址模式4-Byte Address Mode使能方式不同对于容量大于16MB128Mb的Flash需要用到4字节地址来寻址。国际大厂芯片通常通过写入特定的扩展状态寄存器位如Bank Register来切换。而有些国产芯片可能需要发送一个特殊的指令如0xB7来进入4字节模式或者在芯片上电后默认就需要配置这个配置流程如果不符合驱动内置的通用逻辑就会导致读写地址错乱。Quad SPIQSPI使能序列差异为了提高读写速度需要使能QSPI模式。标准流程是通过写状态寄存器来设置。但部分国产芯片可能需要先执行一个“写使能”指令再发送一个特定的“QSPI使能”指令序列这个序列如果和驱动预设的spi_nor_quad_enable通用函数不匹配QSPI模式就无法生效性能会大打折扣。扇区/块擦除大小不标准驱动里定义的擦除操作如4KB扇区擦除、32KB块擦除、64KB块擦除指令可能不适用。国产芯片可能使用不同的指令码或者支持的擦除粒度不同。上电后的默认状态有些芯片上电后可能处于某种“深度省电”或“特殊模式”需要先发送一个唤醒指令才能响应0x9F读ID命令。在FMQL平台上SPI控制器的驱动本身通常是Cadence或Synopsys的IP核驱动一般是正常的问题就出在连接在这个控制器上的Flash芯片信息没有被NOR Flash驱动层识别。3. 解决方案总览从驱动到设备树的完整适配路径解决这个问题的核心思路就是将我们使用的国产SPI Flash芯片的“身份信息”和“操作手册”添加到U-Boot和Linux内核的驱动中去并确保硬件连接信息正确无误。整个适配工作可以分为三个主要部分它们环环相扣U-Boot侧适配确保U-Boot能够识别Flash、读写数据以便完成内核镜像Image、设备树dtb、根文件系统rootfs的加载。这是系统启动的第一步。Linux内核侧适配确保内核在启动后期能够识别同一块Flash并正确初始化MTD内存技术设备子系统为后续挂载文件系统做准备。设备树Device Tree配置这是连接硬件描述和软件驱动的桥梁。需要准确描述Flash芯片连接在哪个SPI控制器、哪个片选CS上以及它的一些基本属性。U-Boot和Kernel都会读取设备树中的信息。整个流程的终点是让系统能够看到Flash上的分区例如/dev/mtdblock0,/dev/mtdblock1并成功挂载根文件系统。下面我们按照实际操作顺序一步步拆解。4. U-Boot侧驱动适配详解U-Boot的适配是首要任务因为它是加载内核的载体。我们需要修改U-Boot的源码。4.1 定位与修改Flash信息表首先找到U-Boot中SPI NOR Flash驱动的源文件。通常路径是u-boot/drivers/mtd/spi/spi-nor-ids.c。这个文件里包含了那个巨大的spi_nor_ids或flash_info表。我们需要为国产芯片添加一个新的条目。假设我们使用的国产Flash型号为FM25Q128容量128Mbit16MB通过示波器或芯片手册得知其JEDEC ID为0xC8 0x40 0x18。打开spi-nor-ids.c在合适的位置通常是按制造商ID排序添加如下结构体/* 在文件末尾的spi_nor_ids数组里添加或者找到类似的地方 */ { .name FM25Q128, .id {0xc8, 0x40, 0x18}, // JEDEC ID .id_len 3, .sector_size SZ_4K, // 扇区大小4KB .n_sectors 4096, // 总扇区数: 16MB / 4KB 4096 .page_size 256, // 页大小256字节 .flags SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_4B_OPCODES, .nr_sectors SZ_16M / SZ_4K, // 另一种容量表示方式 .mfr_id 0xc8, // 制造商ID },关键参数解析.flags这是芯片特性标志位至关重要。SPI_NOR_HAS_LOCK表示芯片支持块保护/锁定功能。SPI_NOR_HAS_TB表示芯片顶部/底部块保护配置位Top/Bottom。SPI_NOR_4B_OPCODES这是重点表示此芯片支持4字节地址模式的指令集。对于16MB及以上的芯片必须确认并正确设置。如果芯片不支持或使能方式特殊可能需要后续额外的配置。.sector_size和.n_sectors定义了擦除和操作的基本单位。必须与芯片手册严格一致。注意以上是一个示例实际参数必须严格参照你所使用的国产Flash芯片的数据手册Datasheet进行填写。.flags字段的配置尤其需要仔细核对手册中关于写保护、4字节模式、QSPI模式的描述。4.2 处理特殊的4字节地址与QSPI模式如果芯片的4字节模式或QSPI模式使能方式比较特殊可能还需要在drivers/mtd/spi/spi-nor-core.c中为这款芯片编写专用的初始化函数flash_fixup函数。例如如果FM25Q128需要在初始化时发送一个特定命令0xB7来进入4字节模式而通用驱动没做这个操作你就需要添加一个修复函数static void fm25q128_fixup(struct spi_nor *nor) { /* 进入4字节地址模式 */ nor-write_reg(nor, SPINOR_OP_EN4B, NULL, 0); nor-addr_width 4; // 将地址宽度设置为4字节 } /* 然后在spi_nor_ids表对应条目的.flags中加上SPI_NOR_4B_OPCODES 并在驱动中某个fixup hooks数组里关联这个ID和fm25q128_fixup函数。*/查找U-Boot中已有的类似芯片如w25q256的fixup代码模仿其写法是最快的方式。4.3 配置U-Boot的设备树U-Boot会使用自己的设备树通常是从dts文件编译出的dtb或者使用内核的设备树。我们需要确保设备树中SPI Flash节点正确。找到FMQL平台对应的U-Boot设备树源文件如arch/arm/dts/fmql-xxx.dts定位到SPI控制器节点可能是qspi。在其中添加或修改flash子节点qspi { status okay; num-cs 1; flash0 { compatible jedec,spi-nor; reg 0; // 片选0 spi-max-frequency 50000000; // SPI时钟频率根据芯片和PCB布线能力设置 spi-rx-bus-width 4; // 接收总线宽度1为标准SPI4为QSPI spi-tx-bus-width 4; // 发送总线宽度 #address-cells 1; #size-cells 1; /* 可选定义U-Boot使用的分区 */ partition0 { label boot; reg 0x0000000 0x100000; // 偏移0大小1MB放U-Boot }; partition100000 { label kernel; reg 0x100000 0x800000; // 偏移1MB大小8MB放内核 }; // ... 其他分区 }; };compatible jedec,spi-nor;这个属性非常重要它告诉U-Boot使用标准的SPI NOR驱动来匹配这个设备。4.4 编译与测试修改完成后编译U-Boot。使用make menuconfig或直接修改.config确保CONFIG_SPI_FLASH、CONFIG_DM_SPI、CONFIG_DM_SPI_FLASH等选项已开启。将新的U-Boot镜像烧写到板子上可以通过JTAG或SD卡启动链。上电后在U-Boot命令行中使用sf probe命令探测FlashZynq sf probe 0:0 50000000 0这条命令的含义是探测SPI总线0、片选0频率50MHz模式0。如果驱动识别成功你会看到类似Found: FM25Q128的信息。之后可以使用sf read、sf write、sf erase等命令进行读写擦除测试验证驱动是否完全工作正常。实操心得在U-Boot下测试Flash驱动是最直接和安全的因为此时系统状态简单。务必在这里完成基本的读写验证确认芯片ID识别正确、擦写功能正常再进入内核侧的适配可以避免很多复合型问题。5. Linux内核侧驱动适配详解内核侧的适配原理与U-Boot类似但代码位置和细节略有不同。内核的SPI NOR驱动更加复杂和完整。5.1 在内核中添加Flash信息内核的SPI NOR Flash信息表通常位于linux/drivers/mtd/spi-nor/spi-nor.c。找到名为spi_nor_ids或flash_info的数组。同样地为我们国产芯片添加一个新条目。格式与U-Boot类似但字段名可能稍有差异{ .name fm25q128, .id {0xc8, 0x40, 0x18}, .len 3, .sector_size SZ_4K, .n_sectors 4096, .page_size 256, .flags SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_4B_OPCODES, .mfr_id 0xc8, },内核特有的重要参数.flags内核定义的标志位可能更丰富例如SPI_NOR_QUAD_READ表示支持Quad SPI读取。如果芯片支持务必加上能极大提升读取速度。.fixups这是一个函数指针。如果芯片有特殊的初始化需求如非标准的4字节模式使能、QSPI使能、或需要配置某些寄存器就需要在这里指定一个自定义的fixup函数。这是解决“驱动识别但操作异常”问题的关键。5.2 实现特殊的Fixup函数如果芯片需要特殊初始化需要在spi-nor-core.c的同文件或附近实现一个fixup函数并在上述ID条目中引用。例如实现一个使能Quad SPI模式的fixupstatic int fm25q128_quad_enable(struct spi_nor *nor) { int ret; u8 sr_cr[2]; // 1. 写使能 ret spi_nor_write_enable(nor); if (ret) return ret; // 2. 读取状态寄存器2假设Quad使能位在状态寄存器2的第1位 ret spi_nor_read_reg(nor, SPINOR_OP_RDSR2, sr_cr[1], 1); if (ret) return ret; // 3. 设置Quad使能位 sr_cr[1] | BIT(1); // 将第1位置1 // 4. 写回状态寄存器2 ret spi_nor_write_reg(nor, SPINOR_OP_WRSR2, sr_cr[1], 1); if (ret) return ret; // 5. 等待写操作完成 return spi_nor_wait_till_ready(nor); } /* 然后定义一个fixup结构体 */ static const struct spi_nor_fixups fm25q128_fixups { .default_init fm25q128_quad_enable, // 在默认初始化时调用 }; /* 最后在spi_nor_ids表的条目中添加.fixups fm25q128_fixups */5.3 配置内核设备树内核的设备树描述需要与U-Boot保持一致或更详细。通常我们会修改Linux内核源码中的设备树源文件.dts路径如arch/arm/boot/dts/fmql-xxx.dts。SPI Flash节点的写法与U-Boot非常相似但内核的分区解析方式更灵活qspi { status okay; num-cs 1; flash0 { compatible jedec,spi-nor; reg 0; spi-max-frequency 50000000; spi-rx-bus-width 4; spi-tx-bus-width 4; #address-cells 1; #size-cells 1; /* 方法一内核命令行传递分区信息老式*/ /* 需要在bootargs中添加类似 mtdpartsspi0.0:1M(boot),8M(kernel),-(rootfs) */ /* 方法二在设备树中定义分区推荐*/ partitions { compatible fixed-partitions; #address-cells 1; #size-cells 1; partition0 { label boot; reg 0x0000000 0x00100000; // 1MB read-only; }; partition100000 { label kernel; reg 0x00100000 0x00800000; // 8MB }; partition900000 { label rootfs; reg 0x00900000 0x00700000; // 7MB }; }; }; };使用设备树定义分区方法二是现在更主流和清晰的做法它不依赖内核命令行分区信息在驱动加载时就直接确定了。5.4 内核配置与编译在内核源码目录下使用make menuconfig进行配置确保Device Drivers - Memory Technology Device (MTD) support被选中。进入MTD子菜单确保SPI-NOR device support被选中。检查Chip drivers下是否有你添加的芯片型号如FM25Q128对应的选项通常添加ID后它会自动出现在“Supported SPI Flash chips”列表中确保它被编译进内核*或模块M。编译内核和设备树生成Image和dtb文件。6. 系统启动与问题排查实录将适配好的U-Boot、内核镜像Image、设备树dtb以及根文件系统按照你设定的分区布局烧写到SPI Flash的对应位置。上电启动观察串口日志。6.1 成功启动的日志特征如果一切顺利你会在内核启动日志中看到类似以下关键信息[ 1.205000] spi-nor spi0.0: Found FM25Q128 (16 MiB) [ 1.210000] spi-nor spi0.0: using quad read mode [ 1.215000] 5 fixed-partitions partitions found on MTD device spi0.0 [ 1.221000] Creating 5 MTD partitions on sp0.0: [ 1.226000] 0x000000000000-0x000000100000 : boot [ 1.231000] 0x000000100000-0x000000900000 : kernel [ 1.236000] 0x000000900000-0x000001000000 : rootfs ... [ 2.500000] VFS: Mounted root (squashfs filesystem) readonly on device 31:2.看到Found FM25Q128和分区创建成功并且根文件系统被挂载就说明驱动和分区识别完全成功了。6.2 常见问题与排查技巧在实际操作中几乎不可能一次成功。以下是几个最常见的坑和排查手段问题内核日志显示spi-nor spi0.0: unrecognized JEDEC id bytes: c8, 40, 18原因内核的spi_nor_ids表中没有添加该芯片ID。排查确认添加的ID结构体格式正确.id数组内容与读取到的完全一致并确认内核配置已包含该芯片支持且驱动被编译进内核。问题识别成功但后续出现读写错误、系统挂起或内核崩溃原因Flash参数如扇区大小、页大小设置错误或者4字节地址模式、QSPI模式使能不正确。排查核对手册逐字核对数据手册中关于Page Program、Sector Erase、Block Erase指令码、以及4字节模式EN4B/EX4B和QSPI模式QE位使能方法的描述。简化测试在内核驱动中暂时将.flags中的SPI_NOR_4B_OPCODES和SPI_NOR_QUAD_READ等高级特性标志去掉退回到最基础的3字节地址、标准SPI模式进行测试。如果基础模式工作正常问题就出在高级特性的配置上。使用U-Boot对比在U-Boot下用sf命令进行同样的读写操作。如果U-Boot正常而内核异常说明两边的驱动实现有差异重点检查内核侧的.fixups函数。问题分区无法识别/dev/下没有mtdblock*设备节点原因设备树中分区节点partitions的compatible属性不对或者地址/大小超出了Flash实际范围。排查检查设备树中partitions节点的compatible fixed-partitions;是否正确。使用cat /proc/mtd命令查看内核识别的MTD设备信息如果Flash被识别为一个整体如mtd0但没有子分区就是分区解析失败。问题系统启动后Flash读写速度极慢原因QSPI模式没有成功使能驱动降级到了标准SPI模式。排查查看内核启动日志确认是否有using quad read mode字样。如果没有检查芯片手册的QSPI使能流程并确保在.flags中设置了SPI_NOR_QUAD_READ且对应的.fixups函数正确执行了使能序列。有时还需要检查设备树中spi-rx-bus-width和spi-tx-bus-width是否都设置为4。问题U-Boot能识别内核不能识别或反之原因两边驱动表中的ID或参数不一致或者设备树中SPI控制器的配置如时钟相位、极性spi-cpol,spi-cpha不一致。排查确保U-Boot和内核源码中添加的芯片ID、容量、扇区大小等参数完全一致。对比两边的设备树确保SPI控制器节点如qspi的基础配置相同。FMQL平台的SPI控制器可能有一些特有的属性需要配置。一个高级调试技巧使用逻辑分析仪或示波器抓取SPI波形。这是终极的排查手段。在上电启动时抓取SPI总线上0x9F读ID命令的响应波形可以100%确认芯片实际输出的ID字节。还可以抓取4字节模式或QSPI模式的使能命令序列与数据手册对比看驱动发出的指令是否正确。这能直接定位是软件驱动问题还是硬件连接或芯片本身的问题。7. 进阶分区方案的灵活配置与优化在解决基本识别问题后一个合理的分区方案对产品至关重要。除了在设备树中写死分区还有更灵活的方式使用Cmdline分区在内核启动参数bootargs中设置mtdparts。这种方式可以在不重新编译设备树的情况下修改分区适合开发调试阶段。但需要在U-Boot和内核中均开启CONFIG_MTD_CMDLINE_PARTS支持。使用U-Boot环境变量传递分区表更高级的做法是将分区信息定义在U-Boot的环境变量中U-Boot在启动内核时将其动态添加到bootargs里。这提供了最大的灵活性。针对Flash特性优化文件系统SPI NOR Flash有写寿命限制。对于需要频繁写的区域如日志、配置可以考虑使用支持损耗均衡的UBIFS文件系统针对MTD设备而不是直接使用mtdblock模拟的块设备挂载ext4或jffs2。这需要在内核中启用CONFIG_MTD_UBI和CONFIG_UBIFS_FS并调整分区和启动脚本。整个适配过程从芯片识别到稳定运行是对开发者阅读手册、理解驱动框架、调试硬件协同能力的综合考验。尤其是在国产化替代的背景下深入掌握这套流程意味着你能让系统与更多“非标准”的国产芯片稳定协作这无疑是极具价值的经验。每次成功解决一个类似问题你对SPI子系统、MTD框架乃至Linux设备模型的理解都会加深一层。

相关新闻

GoF设计模式——建造者模式

GoF设计模式——建造者模式

h5打开以查看 为什么需要建造者模式? 在 GoF设计模式——抽象工厂模式 中,抽象工厂解决了"一族产品要风格统一"的问题——一个工厂负责一整套产品,选了工厂就等于选了整套风格。 但不管是工厂方法还是抽象工厂,都只管"产出什么",不管"怎么一步…

2026/7/31 2:01:10 阅读更多 →
2026 年 GEO 服务商怎么选:AI 搜索时代品牌可见性的实战判断框架

2026 年 GEO 服务商怎么选:AI 搜索时代品牌可见性的实战判断框架

2026 年,品牌被看见的方式正在变化。越来越多的用户不再只看传统搜索结果,而是直接在 DeepSeek、豆包、通义千问、文心一言、Kimi、ChatGPT、Perplexity、Gemini 等 AI 平台里提问、筛选和决策。对市场负责人来说,问题已经不是“要不要做内容…

2026/7/31 2:01:10 阅读更多 →
课堂互动PPT模板怎么选?主流三大平台客观测评对比

课堂互动PPT模板怎么选?主流三大平台客观测评对比

一、前言:为什么你的课堂PPT总是没互动、很枯燥 在日常教学、公开课、线上授课场景中,很多老师和备课者都会遇到一个共性问题:PPT排版工整、内容齐全,但课堂氛围沉闷,学生注意力不集中,课堂参与度极低。 核…

2026/7/31 2:01:10 阅读更多 →

最新新闻

一种基于文化基因工程的人机协同智能生态系统及方法

一种基于文化基因工程的人机协同智能生态系统及方法

[1]邹晓辉,柯丽君. 一种基于文化基因工程的人机协同智能生态系统及方法: CN202511647883.X[P]. CN122133767A[2026-07-30]. 申请(专利)号: CN202511647883.X 申请日期: 2025-11-11 公开/公告号: CN122133767A 发明人: …

2026/7/31 2:44:23 阅读更多 →
hot100【查缺补漏+打印线程abc】【2026.7.30打卡-java版本】

hot100【查缺补漏+打印线程abc】【2026.7.30打卡-java版本】

12. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 …

2026/7/31 2:44:23 阅读更多 →
OPSD 让模型拿标准答案教自己,在学生自己的推理路径上逐 token 纠错

OPSD 让模型拿标准答案教自己,在学生自己的推理路径上逐 token 纠错

一次 Qwen3-1.7B 训练里,GRPO 每题采 8 条轨迹,单条上限 16,000 token;OPSD 只采 1 条,上限 1,024 token。前者生成得更多,却在前 100 步中有超过一半批次的组内奖励标准差为 0,拿不到梯度。 如果只看采样预…

2026/7/31 2:44:23 阅读更多 →
【2026年百度暑期实习/秋招- 7月30日-后端AI Coding-第二题- 余数游走】(题目+思路+JavaC++Python解析+在线测试)

【2026年百度暑期实习/秋招- 7月30日-后端AI Coding-第二题- 余数游走】(题目+思路+JavaC++Python解析+在线测试)

题目内容 给定一个长度为 nnn 的整数序列 a1,a2,…,ana_1,a_2,\dots,a_na

2026/7/31 2:44:23 阅读更多 →
Docker 超全基础操作速查手册|镜像 / 容器 / 数据卷常用命令汇总

Docker 超全基础操作速查手册|镜像 / 容器 / 数据卷常用命令汇总

Docker 是当下后端、运维开发必备的容器化工具,日常开发、服务器部署几乎离不开镜像拉取、容器启停、数据持久化等基础操作。很多新手刚接触时容易混淆各类命令参数,每次使用都要翻文档。本文整理 Docker 三大核心模块:镜像 Image、容器 Cont…

2026/7/31 2:44:23 阅读更多 →
Python JSON完全指南:从核心函数到实战优化

Python JSON完全指南:从核心函数到实战优化

1. 项目概述:为什么JSON是Python开发者的必修课?如果你刚开始接触Python,或者已经写过一些脚本,那么“处理数据”这件事,你肯定绕不过去。数据从哪里来?可能是从网页上抓取的,可能是从数据库里读…

2026/7/31 2:43:23 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻