coreboot 集成 Cavium BDK 实战指南:DRAM/PCIe 初始化、自研 Devicetree 与调试配置
固件嵌入式操作系统驱动开发【免费下载链接】corebootRead-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We dont handle Pull Requests.项目地址https://gitcode.com/gh_mirrors/co/coreboot点击查看免费下载本文聚焦 coreboot 仓库中针对 Cavium现 MarvellOcteonTX 系列 SoC 集成的 BDKBoard Development Kit模块。你将从本文掌握BDK 在 coreboot 启动流程中承担了哪些初始化职责romstage 的 DRAM 初始化、ramstage 的 PCIe/QLM/PHY/BGX/SATA 等外设初始化、它为何使用一套独立于 coreboot 的 devicetree 机制key-value 存储与bdk_config_set_fdt()通告方式、如何用devicetree_convert.py把 DTB 转换成静态 C 数组以及在 menuconfig 中如何开启分阶段 verbose 日志辅助调试。BDK 在 coreboot 中的角色与源码结构根据 Documentation/vendorcode/cavium/bdk.md 的说明Cavium BDK 的一部分被移植进 coreboot 的 vendorcode位于 src/vendorcode/cavium/bdk 目录。它按启动阶段承担两类截然不同的初始化工作romstageDRAM 初始化——内存训练、SPD 读取、DLL 调优等都由 BDK 的libbdk-dram与libdram子库完成ramstage外设初始化——PCIe、QLMQuad Lane Module四通道串行收发模块、SLISystem Level Interface、PHY、BGX以太网端口组、SATA 等高速外设的初始化由libbdk-hal与libbdk-boot子库完成。从 src/vendorcode/cavium/Makefile.mk 的编译清单可以印证这一点romstage-y只挂载了libbdk-archCSR 寄存器、CPU 型号、NUMA、libbdk-drambdk-dram-config.c、bdk-dram-size.c、bdk-dram-test*.c以及libdram下的一整套 DDR3 初始化与调优文件dram-init-ddr3.c、dram-tune-ddr3.c、dram-spd.c、libdram-config-load.c等而ramstage-y则挂载了bdk-qlm*.c、bdk-pcie*.c、bdk-sata.c、bdk-usb.c、bdk-ecam*.c、bdk-boot*.c、bdk-if-phy*.c等外设初始化代码两者泾渭分明。仓库中的 BDK 目录按功能划分为以下几个库子库主要职责典型文件libbdk-arch架构抽象、CSR 访问、CPU 型号识别bdk-csr.c、bdk-model.c、bdk-numa.clibbdk-boot启动阶段的 QLM/PCIe/USB/GPIO 引导初始化bdk-boot-qlm.c、bdk-boot-pcie.c、bdk-boot.clibbdk-dramDRAM 配置、地址映射、尺寸探测与测试bdk-dram-config.c、bdk-dram-size.c、bdk-dram-test-*.clibbdk-hal硬件抽象层PCIe、QLM、SATA、USB、PHY、时钟、GPIObdk-pcie-cn8xxx.c、bdk-qlm.c、bdk-nic.c、bdk-config.clibbdk-osBDK 自身初始化入口bdk-init.clibbdk-trust可信启动支持bdk-trust.clibdramDDR3 底层初始化与调优算法dram-init-ddr3.c、dram-tune-ddr3.c、dram-spd.c此外bdk/lame_string.c字符串解析辅助同时被 romstage 和 ramstage 引用Makefile.mk 中用# FIXME: Get rid of lame_string.c标注了未来移除的意图。BDK 为何使用自己的 devicetree文档明确指出BDK 使用它自己的一套 devicetree因为与 coreboot 的 devicetree 不兼容。coreboot 自身的 devicetree 采用.cb文件 设备树语言devicetree.cb描述芯片组与板载设备的静态拓扑而 BDK 的 devicetree 是纯粹的key-value 对存储——键与值都以字符串形式保存用于描述板级制造信息、DRAM 配置、QLM/PCIe/USB/GPIO 等运行参数。key-value 对的数据结构定义在 src/vendorcode/cavium/include/bdk/bdk-devicetree.h 中极其精简struct bdk_devicetree_key_value { const char *key; const char *value; };数组以{0, 0}作为结束标志即 key 为 NULL 表示表尾这与 src/mainboard/cavium/cn8100_sff_evb/bdk_devicetree.c 末尾的{0, 0},终止行完全对应。通告机制bdk_config_set_fdt()文档要求这些 key-value 对必须在 romstage 和 ramstage 中分别通告使用的是bdk_config_set_fdt()方法。其声明位于 src/vendorcode/cavium/include/bdk/libbdk-hal/bdk-config.hint bdk_config_set_fdt(const struct bdk_devicetree_key_value *fdt);该函数的实现位于 src/vendorcode/cavium/bdk/libbdk-hal/bdk-config.c。从源码可以看出两个关键行为堆与无堆环境的差异处理在ENV_HAS_HEAP_SECTIONramstage 等有堆环境下传入的 fdt 会被bdk_config_duplicate()完整复制一份此后配置表归 BDK 所有在没有堆的早期阶段如部分 romstage 场景则直接保存传入的指针。运行期可改bdk_config_set_int()会以0x%016llx格式把整数写回配置表通过set_value()但注释明确说明这只修改内存中的配置不会写入持久化存储。实际的主板代码印证了“两阶段通告”的用法。以仓库内唯一的 Cavium 参考板cn8100_sff_evb为例在 src/mainboard/cavium/cn8100_sff_evb/romstage.c 中platform_romstage_main()先调用bdk_config_set_fdt(devtree)再调用sdram_init()执行 BDK 的 DRAM 初始化在 src/mainboard/cavium/cn8100_sff_evb/mainboard.c 中ramstage 的mainboard_enable()再次调用bdk_config_set_fdt(devtree)随后进行 TWSII2C总线、IO 扩展器、SFP 光模块 PHY 等板级硬件配置。两个阶段引用的是同一个extern const struct bdk_devicetree_key_value devtree[]它定义在bdk_devicetree.c中并且该文件同时被 romstage 与 ramstage 编译见 src/mainboard/cavium/cn8100_sff_evb/Makefile.mk。配置项的命名与取值规则BDK 的配置项种类由bdk_config_t枚举定义见 bdk-config.h覆盖板级制造数据、网络端口与 PHY 布线、BDK 运行参数、芯片特性、QLM、DRAM、USB、SGPIO、VRM 温控、可信启动等全部领域。每一项的实际 key 字符串、类型、默认值、取值范围都集中登记在config_info[]表中bdk-config.c。以下是从该表摘出的部分代表性配置项配置项枚举key 格式类型/默认值说明BDK_CONFIG_BOARD_MODELBOARD-MODEL字符串默认unknown板卡型号BDK_CONFIG_BOARD_REVISIONBOARD-REVISION字符串默认unknown板卡版本BDK_CONFIG_DDR_SPEEDDDR-SPEED.N%d整数0–2400MT/s默认 0DRAM 速率档位0 表示由 SPD 自动决定BDK_CONFIG_QLM_MODEQLM-MODE.N%d.QLM%d字符串QLM 工作模式如 PCIe/网络BDK_CONFIG_QLM_FREQQLM-FREQ.N%d.QLM%d整数0–10312MHzQLM 频率BDK_CONFIG_PHY_ADDRESSPHY-ADDRESS.N%d.BGX%d.P%d整数默认 -1网口 PHY 的地址-1 表示无 PHYBDK_CONFIG_BGX_ENABLEBGX-ENABLE.N%d.BGX%d.P%d整数0/1默认 1是否启用某 BGX 端口BDK_CONFIG_NUM_PACKET_BUFFERSBDK-NUM-PACKET-BUFFERS整数0–1000000数据包缓冲数量BDK_CONFIG_PACKET_BUFFER_SIZEBDK-PACKET-BUFFER-SIZE整数128–32768默认 1024数据包缓冲字节数BDK_CONFIG_BOOT_MENU_TIMEOUTBDK-BOOT-MENU-TIMEOUT整数0–300 秒默认 10启动菜单超时BDK_CONFIG_MULTI_NODEMULTI-NODE整数0–2默认 2自动多节点模式BDK_CONFIG_USB_PWR_GPIOUSB-PWR-GPIO.N%d.PORT%d整数默认 -1USB 电源控制 GPIO-1 表示无BDK_CONFIG_DRAM_SCRAMBLEDDR-CONFIG-SCRAMBLE整数0/1/2默认 2内存加扰0 关、1 开、2 仅信任启动开启参数化 key 中的N%d节点、QLM%d、BGX%d、LMC%d内存控制器、RANK%d、DIMM%d、PORT%d、LANE%d等占位符由bdk_config_get_int()/bdk_config_get_str()的变参通过vsnprintf()按config_info[].format展开例如PHY-ADDRESS.N0.BGX0.P0。从实现细节看bdk_config_get_int()bdk-config.c的取值过程很有参考价值若配置表未设置config_fdt为空直接返回该项默认值用vsnprintf按 format 生成完整 key 并查找get_value()还支持逐级去掉最后一段按.切分回退匹配的机制例如查不到DDR-CONFIG-CUSTOM-OFFSET.UDIMM.LMC0.N0时依次回退尝试更短前缀解析时对0x前缀走str_to_hex()否则走str_to_int()解析失败或超出min_value/max_value范围时打印BIOS_WARNING并回退到默认值。使用 devicetree_convert.py 转换 DTB文档提到的转换工具是 util/cavium/devicetree_convert.py其用途是把编译好的 DTBdevicetree blob转换成静态 C 文件。需要说明的是该脚本以 Python 2 编写并依赖pyfdt库from pyfdt.pyfdt import FdtBlobParse在当前仓库中属于辅助转换工具需在具备相应 Python 环境的机器上运行。命令行参数如下参数含义--indtb待解析的已编译 devicetree blobDTB路径--out输出 C 文件的写入路径--verbose开启详细输出打印每个 key-value 对脚本的核心行为对照 devicetree_convert.py 的实现解析 DTB 后遍历根节点下cavium,bdk节点的所有子节点节点路径中的/会被去除作为配置 key每个节点的值必须是单一字符串脚本中检查type(i) is not unicode时报警跳过若一个节点下挂多个值数组/多值脚本会打印Arrays arent supported并不予转换——这是该工具的一个重要限制输出文件自动生成文件头注释// This file is automatically generated.、// DO NOT EDIT BY HAND.并#include bdk-devicetree.h随后逐项输出{key, value},最后以{0, 0},终止整个数组。转换产物即上文提到的devtree[]数组。仓库中 src/mainboard/cavium/cn8100_sff_evb/bdk_devicetree.c 正是该工具风格的输出文件头同样标注了“automatically generated / DO NOT EDIT BY HAND”。它的输入源头是 src/mainboard/cavium/cn8100_sff_evb/ddr4-common.dtsi 等 DTS 片段其中以/ { cavium,bdk { ... } }组织节点配合 sff8104-linux.dts 由dtc编译见 Makefile.mk。针对 coreboot 的本地化修改文档“Modifications”一节列出的四项修改均能在仓库源码中找到对应证据适配 coreboot 工具链编译全部 BDK 源文件直接以romstage-y/ramstage-y的形式加入 src/vendorcode/cavium/Makefile.mk由 coreboot 的标准构建系统编译并在CPPFLAGS_common中追加-Isrc/vendorcode/cavium/include/bdk头文件搜索路径移除 FDT devicetree 支持coreboot 移植版仅保留上述纯 key-value 的bdk_devicetree.h结构不再携带完整 FDT 解析栈bdk_config_set_fdt()的参数类型也从原版 FDT 指针改成了struct bdk_devicetree_key_value指针裁剪与 SoC 启动无关的文件vendorcode 目录下仅保留libbdk-*与libdram中与 bringup 直接相关的子库未纳入完整 SDK 中的其他组件新增 Kconfig 调试选项见下文“调试”一节。此外可以观察到部分源文件保留了 Cavium 原版 BSD-3-Clause 或修改后的版权注释如bdk-config.c注明 “This file consists of data imported from bdk-config.c”主板的mainboard.c注明 “Derived from Caviums BSD-3 Clause OCTEONTX-SDK-6.2.0”说明这些代码是从 Cavium SDK 定向导入并本地化后的产物。调试menuconfig 中的 verbose 开关文档给出的调试入口是 menuconfig 的Chipset → BDK菜单可为一个或多个阶段开启 verbose 控制台输出。这些选项对应 src/vendorcode/cavium/Kconfig 中if CAVIUM_BDK下的menu BDK配置块Kconfig 选项作用备注CAVIUM_BDK在 romstage 中构建 BDK总开关def_bool n并select HAVE_DEBUG_RAM_SETUPCAVIUM_BDK_VERBOSE_INIT输出 BDK 初始化过程的详细日志CAVIUM_BDK_VERBOSE_DRAM输出 DRAM 初始化的详细日志default y if DEBUG_RAM_SETUP即开启 coreboot 通用 DRAM 调试开关时默认随动打开CAVIUM_BDK_VERBOSE_DRAM_TEST输出 DRAM 测试raminit tests详细日志CAVIUM_BDK_VERBOSE_QLM输出 QLM 初始化详细日志CAVIUM_BDK_VERBOSE_PCIE_CONFIG输出 PCIe 配置阶段详细日志CAVIUM_BDK_VERBOSE_PCIE输出 PCIe 初始化阶段详细日志CAVIUM_BDK_VERBOSE_PHY输出 PHY 初始化详细日志除调试开关外同一菜单下还提供了三项 DRAM 自动调优选项供内存稳定性调试时调整CAVIUM_BDK_DDR_TUNE_HW_OFFSETS硬件辅助的 DLL 读偏移调优默认关闭开启时同时调优 ECC 字节CAVIUM_BDK_DDR_TUNE_WRITE_OFFSETS自动调优数据字节的 DLL 写偏移CAVIUM_BDK_DDR_TUNE_ECC_ENABLE自动调优 ECC 字节的 DLL 读偏移。这些开关之所以能生效是因为 BDK 的 DRAM 初始化代码内部通过BDK_CONFIG_DRAM_VERBOSEDDR-VERBOSE取值 0–255等运行时配置项决定日志输出的详细程度Kconfig 开关在构建期把这些 verbose 行为编译进对应阶段。实战示例cn8100_sff_evb 参考板的完整链路仓库内实际使用 BDK 的主板为 src/mainboard/cavium/cn8100_sff_evb对应BOARD_CAVIUM_CN8100_SFF_EVBKconfig 中select SOC_CAVIUM_CN81XXKconfig。它在启动各阶段的 BDK 使用方式如下bootblockbootblock.c完成串口控制台与 SPI flashEM100 Pro 上验证初始化为后续阶段铺路romstageromstage.cbdk_config_set_fdt(devtree)通告配置 →sdram_init()执行 BDK 的 DRAM 初始化 →soc_mmu_init()建页表全程以watchdog_poke(0)喂狗防超时复位ramstagemainboard.cmainboard_enable()再次通告配置随后完成 TWSI/IO 扩展器、SFP 发射器、VSC7224 重定时器FSYNC、DFE、EQ 等寄存器配置、PHY 复位 GPIO 等板级初始化最后打印 trusted boot、boot method、REF/IO/CORE 时钟、CPU 核数与内存容量等信息。而承载全部 BDK 配置的devtree[]bdk_devicetree.c中可以看到实际生效的配置形态例如const struct bdk_devicetree_key_value devtree[] { {DDR-TEST-BOOT, 1}, {DDR-CONFIG-WODT-MASK.RANKS2.DIMMS2, 0xc0c0303}, {DDR-CONFIG-MODE1-RTT-WR.RANKS2.DIMMS1.RANK0, 0x2}, {DDR-CONFIG-MODE2-VREF-VALUE.RANKS2.DIMMS1.RANK0, 0x19}, {DDR-CONFIG-CUSTOM-MIN-RTT-NOM-IDX, 0x1}, {PHY-ADDRESS.N0.BGX0.P0, 0xff000010}, {BGX-ENABLE.N0.BGX0.P0, 1}, {BDK-NUM-PACKET-BUFFERS, 0x1000}, {BDK-PACKET-BUFFER-SIZE, 0x400}, {MULTI-NODE, 0}, {QLM-DIP-AUTO-CONFIG, 1}, {DDR-CONFIG-SPD-ADDR.DIMM0.LMC0, 0x1050}, {USB-PWR-GPIO.N0.PORT0, 12}, {0, 0}, };可以看到DDR 的 RTT/ODT/VREF 等时序参数均按RANKS/DIMMS/RANK/LMC维度细分键控PHY 地址与 BGX 使能按N/BGX/P维度描述运行参数包缓冲、多节点、QLM 自动配置以全局键表达——这正是 BDK devicetree 以“可寻址字符串键 字符串值”承载复杂板级配置的典型形态也是理解 BDK 配置体系的最佳入门素材。总结Cavium BDK 在 coreboot 中的集成遵循“vendorcode 托管 板级通告”的模式BDK 提供 romstage 的 DRAM 初始化与 ramstage 的高速外设初始化能力通过一套自有的字符串 key-value devicetree结构见 bdk-devicetree.h、实现见 bdk-config.c驱动配置配置在 romstage 与 ramstage 中通过bdk_config_set_fdt()两次注入DTB 到 C 数组的转换由 devicetree_convert.py 完成调试时则在 menuconfig 的 Chipset → BDK 菜单下按阶段打开 verbose 输出Kconfig 定义见 src/vendorcode/cavium/Kconfig。对需要在新 Cavium OcteonTX 平台上做 bringup 的开发者而言以cn8100_sff_evb为模板、按上述链路复用 BDK 是最直接的起步路径。赞分享固件嵌入式操作系统驱动开发【免费下载链接】corebootRead-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We dont handle Pull Requests.项目地址https://gitcode.com/gh_mirrors/co/coreboot点击查看免费下载相关推荐coreboot 对 Cavium CN81xx SoC 的移植深入解析Bootflow、CAR、DRAM/PCI 初始化与平台工作区quirkscoreboot 对 Cavium CN81xx SoC 的移植深入解析Bootflow、CAR、DRAM/PCI 初始化与平台工作区quirks 本文基固件嵌入式操作系统驱动开发coreboot 中的 Intel DPTF 实现与 devicetree 配置指南coreboot 中的 Intel DPTF 实现与 devicetree 配置指南 导读 Intel Dynamic Platform and Thermal固件嵌入式操作系统驱动开发coreboot 通用 Super I/O SSDT 生成器完全指南从 devicetree 配置到 ACPI 方法自动生成coreboot 通用 Super I/O SSDT 生成器完全指南从 devicetree 配置到 ACPI 方法自动生成 本文介绍 coreboot 中针固件嵌入式操作系统驱动开发上一篇Decepticon RoE 机器强制执行machine_enforcement 配置、双执行点防护与审计闭环下一篇SMUDebugTool终极指南免费解锁Ryzen处理器性能潜力的完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Desthiobiotin-PNB ester,脱硫生物素-PNB酯,脱硫生物素-对硝基苯酯

Desthiobiotin-PNB ester,脱硫生物素-PNB酯,脱硫生物素-对硝基苯酯

基础信息Desthiobiotin-PNB ester,中文全称是脱硫生物素-对硝基苯酯,是脱硫生物素(Desthiobiotin)的活化衍生物,PNB(p-nitrophenyl)基团作为离去基团,让它可以在温和的碱性条件下和蛋…

2026/10/15 3:03:35 阅读更多 →
tfsec aws-cloudtrail-no-public-log-access 规则详解:确保 CloudTrail 日志 S3 Bucket 不公开访问

tfsec aws-cloudtrail-no-public-log-access 规则详解:确保 CloudTrail 日志 S3 Bucket 不公开访问

应用安全SASTIaC 【免费下载链接】tfsec Tfsec is now part of Trivy 项目地址: https://gitcode.com/gh_mirrors/tf/tfsec 点击查看 免费下载 本文围绕 tfsec 内置规则 aws-cloudtrail-no-public-log-access(默认严重级别 critical)展开&am…

2026/10/15 3:03:35 阅读更多 →
深入解析 etcd contrib 实战工具集:systemd 部署、多节点集群、远程备份恢复与 Raft 示例

深入解析 etcd contrib 实战工具集:systemd 部署、多节点集群、远程备份恢复与 Raft 示例

云原生后端微服务DevOpsAI 应用 【免费下载链接】rainbond 无需学习 Kubernetes 的容器平台,在 Kubernetes 上构建、部署、组装和管理应用,无需 K8s 专业知识,全流程图形化管理 项目地址: https://gitcode.com/goodrain/rainbond …

2026/10/15 3:03:35 阅读更多 →

最新新闻

Apollo-11制导计算机:4KB内存下的实时调度与容错设计

Apollo-11制导计算机:4KB内存下的实时调度与容错设计

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

2026/10/15 3:41:42 阅读更多 →
bitcoinjs-lib 的 Bitcoin Core 数据驱动测试夹具解析:目录构成、取舍逻辑与源码验证

bitcoinjs-lib 的 Bitcoin Core 数据驱动测试夹具解析:目录构成、取舍逻辑与源码验证

区块链密码学 【免费下载链接】bitcoinjs-lib A javascript Bitcoin library for node.js and browsers. 项目地址: https://gitcode.com/gh_mirrors/bi/bitcoinjs-lib 点击查看 免费下载 本指南以仓库内 test/fixtures/core/README.md 为主体,系统解析…

2026/10/15 3:41:42 阅读更多 →
The Book of Shaders 实战:fBm 分数布朗运动——从正弦波叠加到程序化分形噪声

The Book of Shaders 实战:fBm 分数布朗运动——从正弦波叠加到程序化分形噪声

【免费下载链接】thebookofshaders Step-by-step guide through the abstract and complex universe of Fragment Shaders. 项目地址: https://gitcode.com/gh_mirrors/th/thebookofshaders 点击查看 免费下载 本篇技术指南以《The Book of Shaders》第 13 章&…

2026/10/15 3:41:42 阅读更多 →
74HC595驱动16×16点阵汉字左移滚动(8051汇编实现)

74HC595驱动16×16点阵汉字左移滚动(8051汇编实现)

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

2026/10/15 3:41:42 阅读更多 →
两串铁锂电池主动均衡设计:MP2642GR-Z与PIC18F4525软硬协同

两串铁锂电池主动均衡设计:MP2642GR-Z与PIC18F4525软硬协同

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

2026/10/15 3:41:42 阅读更多 →
直接压片单元模型开发教程(4):第一个压缩循环仿真——线性/方波/修正正弦三类位移-时间曲线

直接压片单元模型开发教程(4):第一个压缩循环仿真——线性/方波/修正正弦三类位移-时间曲线

直接压片单元模型开发教程(4):第一个压缩循环仿真——线性/方波/修正正弦三类位移-时间曲线版本声明块 工具/软件:Python numpy matplotlib(纯 numpy 实现位移与速度曲线生成)。语言/环境:Pyt…

2026/10/15 3:40:42 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →