<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>foxxorcat Blog</title>
        <link>https://foxxorcat.top</link>
        <description>一个萌新的学习笔记</description>
        <lastBuildDate>Sun, 28 Dec 2025 17:55:37 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh</language>
        <image>
            <title>foxxorcat Blog</title>
            <url>https://dn-qiniu-avatar.qbox.me/avatar/5381acd6458a7d0f76da6e4185cc6d6634ada5cf088c6cddd1a73f0fdc544d47?size=128</url>
            <link>https://foxxorcat.top</link>
        </image>
        <copyright>Copyright (c) 2022-present, foxxorcat</copyright>
        <item>
            <title><![CDATA[RP2040 烧录与调试：从 UF2 到 CMSIS-DAP]]></title>
            <link>https://foxxorcat.top/posts/hardware/rp2040/RP2040 烧录与调试：从 UF2 到 CMSIS-DAP.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/hardware/rp2040/RP2040 烧录与调试：从 UF2 到 CMSIS-DAP.html</guid>
            <pubDate>Sun, 28 Dec 2025 04:00:00 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>RP2040 (Raspberry Pi Pico) 拥有双核 Cortex-M0+ 架构和独特的 PIO 状态机。在进行 Rust 嵌入式开发时，我们需要一套稳定可靠的烧录与调试方案。</p>
<p>虽然官方提供了基于 USB 存储模拟的 UF2 拖拽烧录方式，但在实际开发中，我们需要断点调试、RTT 日志输出以及一键自动烧录。本文整合了从最基础的软件工具到进阶的硬件调试方案。</p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>RP2040 (Raspberry Pi Pico) 拥有双核 Cortex-M0+ 架构和独特的 PIO 状态机。在进行 Rust 嵌入式开发时，我们需要一套稳定可靠的烧录与调试方案。</p>
<p>虽然官方提供了基于 USB 存储模拟的 UF2 拖拽烧录方式，但在实际开发中，我们需要断点调试、RTT 日志输出以及一键自动烧录。本文整合了从最基础的软件工具到进阶的硬件调试方案。</p>
<hr>
<h2 id="第一部分-软件烧录工具-文件传输" tabindex="-1">第一部分：软件烧录工具 (文件传输) <a class="header-anchor" href="#第一部分-软件烧录工具-文件传输" aria-label="Permalink to &quot;第一部分：软件烧录工具 (文件传输)&quot;">&ZeroWidthSpace;</a></h2>
<p>这部分介绍运行在电脑端的纯软件工具，它们主要用于将编译好的固件（UF2/ELF）传输给 RP2040，通常利用 BootROM 或 USB 协议，<strong>不涉及硬件调试器</strong>。</p>
<div class="vp-tabs">
        <input type="radio" name="group-mvaYQ" id="tab-rt7S-Ri" checked/>  
        <label for="tab-rt7S-Ri">1. 基础方案 (UF2)</label><div class="content">
        <p><strong>原理</strong>：利用 RP2040 BootROM 中的固化程序，模拟 USB 大容量存储设备。</p>
<p><strong>操作</strong>：</p>
<ol>
<li>按住板上的 <code>BOOTSEL</code> 键插入 USB。</li>
<li>电脑识别出 <code>RPI-RP2</code> 磁盘。</li>
<li>将 <code>.uf2</code> 文件拖入即可。</li>
</ol>
<div class="info custom-block"><p class="custom-block-title">评价</p>
<p>无需任何软件，适合发布固件，但不适合频繁开发调试。</p>
</div>
</div>
        <input type="radio" name="group-mvaYQ" id="tab-OwVw3Ed" />  
        <label for="tab-OwVw3Ed">2. Rust 开发专用 (elf2uf2-rs)</label><div class="content">
        <p><strong>工具</strong>：<code>elf2uf2-rs</code></p>
<p><strong>功能</strong>：Rust 专用工具，自动将 ELF 转为 UF2 并搜索 Pico 磁盘烧录。</p>
<p><strong>安装方式</strong>:</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cargo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> elf2uf2-rs</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><strong>配置</strong>：</p>
<div class="language-toml vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">toml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># .cargo/config.toml</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">target</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">thumbv6m-none-eabi</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">runner = </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"elf2uf2-rs --deploy --serial --verbose"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div></div>
        <input type="radio" name="group-mvaYQ" id="tab-JKICl_Z" />  
        <label for="tab-JKICl_Z">3. 命令行工具 (Picotool)</label><div class="content">
        <p><strong>工具</strong>：<code>picotool</code> (官方 CLI)</p>
<p><strong>功能</strong>：</p>
<ul>
<li><strong>查看已连接设备</strong>：<code>picotool info -a</code></li>
<li><strong>烧录 UF2/ELF/BIN</strong>：<code>picotool load my_firmware.uf2</code></li>
<li><strong>强行进入刷机模式</strong>： <code>picotool load -f my_firmware.uf2</code> (需要原固件中启用了 USB stdio 且未死机)</li>
<li><strong>重启设备</strong>：<code>picotool reboot</code></li>
</ul>
<p><strong>获取</strong>：随 Pico SDK 安装或通过包管理器（如 <code>brew</code>）安装。</p>
</div></div><hr>
<h2 id="第二部分-调试运行器-debug-runners" tabindex="-1">第二部分：调试运行器 (Debug Runners) <a class="header-anchor" href="#第二部分-调试运行器-debug-runners" aria-label="Permalink to &quot;第二部分：调试运行器 (Debug Runners)&quot;">&ZeroWidthSpace;</a></h2>
<p>这部分软件运行在电脑端，充当<strong>桥梁</strong>角色。它们连接 USB 硬件调试器（如 Picoprobe, DAPLink），并向上层提供调试服务（GDB, RTT）。</p>
<div class="vp-tabs">
        <input type="radio" name="group-D6mVY" id="tab-Abzl6jN" checked/>  
        <label for="tab-Abzl6jN">1. Probe-rs (Rust 推荐)</label><div class="content">
        <p><strong>工具</strong>：<code>probe-rs</code></p>
<p><strong>特点</strong>：
Rust 嵌入式开发的现代标准工具，<strong>无需安装 OpenOCD</strong>。它内置了对 CMSIS-DAP、ST-Link 等协议的支持，可以直接与硬件调试器通信，实现烧录、复位、RTT 日志读取。</p>
<p><strong>安装方式</strong>:</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cargo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> probe-rs-tools</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><strong>常用命令</strong>：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 自动寻找连接的调试器，烧录并运行，同时输出 RTT 日志</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">probe-rs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --chip</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> RP2040</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">BIN</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> FIL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">E</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p><strong>配置</strong>：
在 <code>.cargo/config.toml</code> 中设置 runner，即可实现 <code>cargo run</code> 一键调试：</p>
<div class="language-toml vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">toml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">target</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">thumbv6m-none-eabi</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">runner = </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"probe-rs run --chip RP2040"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></div>
        <input type="radio" name="group-D6mVY" id="tab-71wt9sw" />  
        <label for="tab-71wt9sw">2. OpenOCD (传统方案)</label><div class="content">
        <p><strong>工具</strong>：<code>OpenOCD</code></p>
<p><strong>特点</strong>：
历史悠久，兼容性极广。对于某些特殊的调试固件（如 <strong>pico-debug</strong>），<code>probe-rs</code> 目前存在兼容性问题，此时必须使用 OpenOCD 作为后端。</p>
<p><strong>典型用法</strong>：
开启一个后台进程连接调试器，然后 GDB 或 IDE 连接到 OpenOCD 的端口（通常是 3333）进行调试。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">openocd</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> interface/cmsis-dap.cfg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> target/rp2040.cfg</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div></div><hr>
<h2 id="第三部分-硬件调试方案" tabindex="-1">第三部分：硬件调试方案 <a class="header-anchor" href="#第三部分-硬件调试方案" aria-label="Permalink to &quot;第三部分：硬件调试方案&quot;">&ZeroWidthSpace;</a></h2>
<p>这部分解决 “用什么硬件连接 RP2040 SWD 接口” 的问题。RP2040 使用 Multi-drop SWD 协议，部分老旧调试器可能不兼容。</p>
<div class="vp-tabs">
        <input type="radio" name="group-eO6vr" id="tab-KS-fLY_" checked/>  
        <label for="tab-KS-fLY_">方案 A：官方 Picoprobe</label><div class="content">
        <p>使用第二块 Pico 作为专用调试器，或者购买官方的 Raspberry Pi Debug Probe。这是官方推荐且最稳定的方案。</p>
<p><strong>1. 固件选型说明</strong></p>
<table tabindex="0">
<thead>
<tr>
<th style="text-align:left">固件文件</th>
<th style="text-align:left">对应硬件</th>
<th style="text-align:left">核心 MCU</th>
<th style="text-align:left">选型依据</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>debugprobe.uf2</code></td>
<td style="text-align:left">Raspberry Pi Debug Probe</td>
<td style="text-align:left">RP2040</td>
<td style="text-align:left">专为官方调试探针硬件设计，适配其内置电平转换电路和专属引脚布局。</td>
</tr>
<tr>
<td style="text-align:left"><code>debugprobe_on_pico.uf2</code></td>
<td style="text-align:left">Raspberry Pi Pico</td>
<td style="text-align:left">RP2040</td>
<td style="text-align:left"><strong>最常用</strong>。用于将闲置 Pico 刷成调试探针，复用 Pico 原生引脚。</td>
</tr>
<tr>
<td style="text-align:left"><code>debugprobe_on_pico2.uf2</code></td>
<td style="text-align:left">Raspberry Pi Pico 2</td>
<td style="text-align:left">RP2350</td>
<td style="text-align:left">适配 Pico 2 硬件，保持与 Pico 的引脚兼容性。</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>资源仓库</strong>：<a href="https://github.com/raspberrypi/debugprobe" target="_blank" rel="noreferrer">raspberrypi/debugprobe</a></li>
</ul>
<p><strong>2. 引脚定义 (以 Pico 为例)</strong></p>
<p>使用 <code>debugprobe_on_pico.uf2</code> 固件时：</p>
<table tabindex="0">
<thead>
<tr>
<th style="text-align:left">功能</th>
<th style="text-align:left">GPIO 引脚</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>SWCLK</strong> (时钟)</td>
<td style="text-align:left"><strong>GPIO 2</strong></td>
<td style="text-align:left">连接到目标板的 SWCLK</td>
</tr>
<tr>
<td style="text-align:left"><strong>SWDIO</strong> (数据)</td>
<td style="text-align:left"><strong>GPIO 3</strong></td>
<td style="text-align:left">连接到目标板的 SWDIO</td>
</tr>
<tr>
<td style="text-align:left"><strong>GND</strong></td>
<td style="text-align:left">GND</td>
<td style="text-align:left">必须共地</td>
</tr>
<tr>
<td style="text-align:left">UART TX</td>
<td style="text-align:left">GPIO 4</td>
<td style="text-align:left">(可选) 连接到目标板的 RX</td>
</tr>
<tr>
<td style="text-align:left">UART RX</td>
<td style="text-align:left">GPIO 5</td>
<td style="text-align:left">(可选) 连接到目标板的 TX</td>
</tr>
<tr>
<td style="text-align:left">LED</td>
<td style="text-align:left">GPIO 25</td>
<td style="text-align:left">指示工作状态</td>
</tr>
</tbody>
</table>
<div class="info custom-block"><p class="custom-block-title">注意</p>
<p>官方成品 Debug Probe 的引脚定义不同（SWCLK=GP12, SWDIO=GP14），请务必根据硬件下载对应固件。</p>
</div>
</div>
        <input type="radio" name="group-eO6vr" id="tab-GZxkPe5" />  
        <label for="tab-GZxkPe5">方案 B：单板虚拟调试 (pico-debug)</label><div class="content">
        <p>如果你手头只有一块 Pico，可以让它利用自身的一个核心来调试另一个核心。</p>
<ul>
<li><strong>资源仓库</strong>：<a href="https://github.com/majbthrd/pico-debug" target="_blank" rel="noreferrer">majbthrd/pico-debug</a></li>
<li><strong>原理</strong>：固件运行在 RAM 中，模拟成 CMSIS-DAP 接口。</li>
<li><strong>适用软件</strong>：<strong>必须配合 OpenOCD 使用</strong>。目前 <code>probe-rs</code> 对该方案支持不佳。</li>
</ul>
<p><strong>固件版本选择</strong>：</p>
<div class="tip custom-block"><p class="custom-block-title">推荐：pico-debug-gimmecache.uf2</p>
<ul>
<li><strong>特点</strong>：保留 Flash 缓存 (XIP)，保留 248KB (94%) SRAM 给用户程序。</li>
<li><strong>理由</strong>：性能影响最小，适合绝大多数场景。</li>
</ul>
</div>
<div class="warning custom-block"><p class="custom-block-title">备选：pico-debug-maxram.uf2</p>
<ul>
<li><strong>特点</strong>：提供完整的 264KB SRAM。</li>
<li><strong>缺点</strong>：占用了 Flash 缓存，会导致用户代码运行变慢，仅在急需内存时使用。</li>
</ul>
</div>
</div>
        <input type="radio" name="group-eO6vr" id="tab-Oc1iU9b" />  
        <label for="tab-Oc1iU9b">方案 C：ST-Link V2 Clone (dap42)</label><div class="content">
        <div class="tip custom-block"><p class="custom-block-title">提示</p>
<p>随着时间推移，直接购买原装 STM32F103 的 ST-Link 越来越难，很多廉价克隆版可能导致兼容性问题。
使用通用的 STM32F103 开发板（BluePill）或兼容的 ST-Link V2 Dongle 配合 <code>dap42</code> 固件是高性价比选择。</p>
</div>
<ul>
<li><strong>资源仓库</strong>：<a href="https://github.com/devanlai/dap42" target="_blank" rel="noreferrer">devanlai/dap42</a></li>
</ul>
<p><strong>1. 固件文件说明</strong></p>
<table tabindex="0">
<thead>
<tr>
<th style="text-align:left">文件名</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>DAP103-dapboot-combined-stlink.bin</code></td>
<td style="text-align:left"><strong>新手推荐</strong>。适用于 ST-Link V2 硬件，集成 Bootloader，一步到位。</td>
</tr>
<tr>
<td style="text-align:left"><code>DAP42.bin</code> / <code>DAP42DC.bin</code></td>
<td style="text-align:left">适用于 BluePill 开发板 (PA9/PA10 USB)。</td>
</tr>
<tr>
<td style="text-align:left"><code>DAP103-HID-*.bin</code></td>
<td style="text-align:left">HID 版本，免驱兼容性更好，无需 WinUSB 驱动。</td>
</tr>
<tr>
<td style="text-align:left"><code>DAP103-DFU-*.bin</code></td>
<td style="text-align:left">带有 DFU 功能的版本，方便后续通过 USB 升级。</td>
</tr>
<tr>
<td style="text-align:left"><code>DAP103-stlink.bin</code></td>
<td style="text-align:left">纯固件，需自行处理 Bootloader。</td>
</tr>
<tr>
<td style="text-align:left"><code>BRAINv3.3.bin</code></td>
<td style="text-align:left">适用于 Brain V3.3 硬件。</td>
</tr>
</tbody>
</table>
<p><strong>2. 烧录指南 (救砖模式)</strong></p>
<p>如果你手头有另一个调试器（如另一块 DAPLink 或 ST-Link），可以使用 <code>probe-rs</code> 将固件刷入你的 ST-Link Dongle：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 警告：请确保你了解硬件连接，错误操作可能导致设备变砖 (需要飞线连接内部 SWD 接口)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">probe-rs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> download</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --chip</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> stm32f103c8</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --protocol</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> swd</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --binary-format</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> bin</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --base-address</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0x08000000</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> .</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">AP103-dapboot-combined-stlink.bin</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><ul>
<li><strong>替代方案</strong>：使用 <code>dfu-util</code> (需设备处于 DFU 模式，且有一定风险)。
<ul>
<li><a href="https://sourceforge.net/projects/dfu-util/files/" target="_blank" rel="noreferrer">下载预构建版 (SourceForge)</a></li>
</ul>
</li>
</ul>
<p><strong>3. 引脚定义 (刷入 dap42 后)</strong></p>
<table tabindex="0">
<thead>
<tr>
<th style="text-align:left">信号</th>
<th style="text-align:left">引脚</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>SWDIO</strong></td>
<td style="text-align:left"><strong>PB14</strong></td>
<td style="text-align:left">对应原 ST-Link 的 SWDIO</td>
</tr>
<tr>
<td style="text-align:left"><strong>SWCLK</strong></td>
<td style="text-align:left"><strong>PB13</strong></td>
<td style="text-align:left">对应原 ST-Link 的 SWCLK</td>
</tr>
<tr>
<td style="text-align:left">RESET</td>
<td style="text-align:left">PB0</td>
<td style="text-align:left">复位引脚</td>
</tr>
<tr>
<td style="text-align:left">TX</td>
<td style="text-align:left">PA2</td>
<td style="text-align:left">虚拟串口发送</td>
</tr>
<tr>
<td style="text-align:left">RX</td>
<td style="text-align:left">PA3</td>
<td style="text-align:left">虚拟串口接收</td>
</tr>
</tbody>
</table>
</div>
        <input type="radio" name="group-eO6vr" id="tab-8q_wxrO" />  
        <label for="tab-8q_wxrO">方案 D：其他 CMSIS-DAP 方案</label><div class="content">
        <p>除了上述方案，还有许多开源硬件 / 固件支持 RP2040 调试：</p>
<ul>
<li>
<p><strong>ST-Link V2 (STM32F103C8) [不推荐]</strong>:</p>
<ul>
<li><a href="https://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO" target="_blank" rel="noreferrer">GitHub</a></li>
<li>需注意引脚重映射，最后更新于 2020 年。</li>
</ul>
</li>
<li>
<p><strong>第二块 Pico (DapperMime) [不推荐]</strong>:</p>
<ul>
<li><a href="https://github.com/majbthrd/DapperMime/releases/download/20210225/raspberry_pi_pico-DapperMime.uf2" target="_blank" rel="noreferrer">下载地址</a></li>
<li>类似 Picoprobe，但运行 DapperMime 固件。仓库已存档。</li>
</ul>
</li>
<li>
<p><strong>WeAct MiniF4 (STM32F4x1)</strong>:</p>
<ul>
<li><a href="https://therealprof.github.io/blog/usb-c-pill-part1/" target="_blank" rel="noreferrer">Docs</a></li>
<li><a href="https://github.com/WeActStudio/WeActStudio.MiniSTM32F4x1/blob/master/SDK/CMSIS-DAP/CMSIS-DAP_WeActStudio.hex" target="_blank" rel="noreferrer">下载地址</a></li>
</ul>
</li>
<li>
<p><strong>HS-Probe (STM32F723)</strong>:</p>
<ul>
<li><a href="https://github.com/probe-rs/hs-probe" target="_blank" rel="noreferrer">GitHub</a></li>
<li>基于 STM32F7 的高速调试器，Rust 社区作品。</li>
</ul>
</li>
<li>
<p><strong>DAPLink (通用)</strong>:</p>
<ul>
<li>适用于 LPC4322, LPC11U35, K20 等芯片的 DAPLink 固件。</li>
<li><a href="https://github.com/ARMmbed/DAPLink/tree/develop" target="_blank" rel="noreferrer">GitHub 源码</a></li>
</ul>
</li>
</ul>
</div></div><hr>
<h2 id="补充阅读-其他调试方案" tabindex="-1">补充阅读：其他调试方案 <a class="header-anchor" href="#补充阅读-其他调试方案" aria-label="Permalink to &quot;补充阅读：其他调试方案&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="_1-black-magic-probe-gdb-server" tabindex="-1">1. Black Magic Probe (GDB Server) <a class="header-anchor" href="#_1-black-magic-probe-gdb-server" aria-label="Permalink to &quot;1. Black Magic Probe (GDB Server)&quot;">&ZeroWidthSpace;</a></h3>
<p>如果不想用 OpenOCD，可以将 ST-Link 刷成 <strong>Black Magic Probe (BMP)</strong> 固件。它内置了 GDB Server，可以直接用 GDB 连接，无需中间件。</p>
<details class="details custom-block"><summary>点击展开：刷写与使用教程</summary>
<p><strong>1. 准备工作</strong></p>
<ul>
<li>硬件：ST-Link V2</li>
<li>仓库：<a href="https://github.com/arendjan/stlink_rp2040" target="_blank" rel="noreferrer">arendjan/stlink_rp2040</a></li>
</ul>
<p>**2. 刷入固件 **</p>
<ul>
<li>见 <code>方案 C：ST-Link V2 Clone (dap42)</code> 步骤相同。</li>
</ul>
<p><strong>3. 硬件接线</strong></p>
<ul>
<li><strong>SWCLK</strong> -&gt; RP2040 SWCLK</li>
<li><strong>SWDIO</strong> -&gt; RP2040 SWDIO</li>
<li><strong>GND</strong> -&gt; GND</li>
</ul>
<p><strong>4. GDB 调试</strong></p>
<ul>
<li>查找 COM 端口：较小编号的为 GDB 接口，较大编号的为 UART。</li>
<li>启动 GDB 并连接：<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">arm-none-eabi-gdb</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> your_firmware.elf</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li>
<li>GDB 内部执行：<div class="language-gdb vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">gdb</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>target extended-remote \\.\COM10  # 替换实际端口</span></span>
<span class="line"><span>monitor swdp_scan               # 扫描 SWD 设备</span></span>
<span class="line"><span>attach 1                        # 连接第一个设备</span></span>
<span class="line"><span>load                            # 烧录</span></span>
<span class="line"><span>run                             # 运行</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div></li>
</ul>
</details>
<h3 id="_2-j-link-调试" tabindex="-1">2. J-Link 调试 <a class="header-anchor" href="#_2-j-link-调试" aria-label="Permalink to &quot;2. J-Link 调试&quot;">&ZeroWidthSpace;</a></h3>
<p>J-Link 配合 OpenOCD 调试 RP2040 需要进行驱动替换（Zadig -&gt; WinUSB）等繁琐配置。除非手头只有 J-Link，否则不建议作为首选方案。</p>
<div class="info custom-block"><p class="custom-block-title">参考教程</p>
<p>详细配置步骤请参考：<a href="https://imcbc.github.io/2022/04/09/pipico-swd/" target="_blank" rel="noreferrer">Raspberry Pi Pico SWD with J-Link</a></p>
</div>
]]></content:encoded>
            <category>Rust</category>
            <category>RP2040</category>
            <category>ST-Link</category>
            <category>烧录</category>
            <category>嵌入式</category>
        </item>
        <item>
            <title><![CDATA[HP iLO 许可(License)找回]]></title>
            <link>https://foxxorcat.top/posts/hp/HP_iLO_许可找回.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/hp/HP_iLO_许可找回.html</guid>
            <pubDate>Sun, 21 Dec 2025 02:00:00 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>维护 HP 服务器时一不小心把 iLO (Integrated Lights-Out) 重置了导致高级功能授权丢失 (License), 这里记录了通过 HPE 网站提交 Case 找回 iLO License 的详细流程。</p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>维护 HP 服务器时一不小心把 iLO (Integrated Lights-Out) 重置了导致高级功能授权丢失 (License), 这里记录了通过 HPE 网站提交 Case 找回 iLO License 的详细流程。</p>
<hr>
<h2 id="准备工作" tabindex="-1">准备工作 <a class="header-anchor" href="#准备工作" aria-label="Permalink to &quot;准备工作&quot;">&ZeroWidthSpace;</a></h2>
<p>在开始之前，请准备好以下信息：</p>
<ol>
<li><strong>服务器序列号 (Serial Number, SN)</strong>：通常在服务器机箱上的标签，或者可以在 iLO 概览页面看到。</li>
<li><strong>产品 ID (Product ID)</strong>：通常在服务器机箱上的标签，或者可以在 iLO 概览页面看到。</li>
<li><strong>产品型号 (Product Number/Model)</strong>：例如 HPE DL360 Gen9。</li>
<li><strong>联系方式</strong>：有效的电子邮箱地址，用于接收官方回复。</li>
<li><strong>HP 门户账号</strong>：用于后续根据授权订单编号 (EON) 获取授权</li>
</ol>
<hr>
<h2 id="找回流程" tabindex="-1">找回流程 <a class="header-anchor" href="#找回流程" aria-label="Permalink to &quot;找回流程&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="_1-访问-hpe-licensing-support" tabindex="-1">1. 访问 HPE Licensing Support <a class="header-anchor" href="#_1-访问-hpe-licensing-support" aria-label="Permalink to &quot;1. 访问 HPE Licensing Support&quot;">&ZeroWidthSpace;</a></h3>
<p>首先访问 <a href="https://hp.my.salesforce-sites.com/CustomerSalesOp/SoftwareLicensingServicesWebform" target="_blank" rel="noreferrer">HPE 许可支持页面（HPE Licensing Support）</a>。</p>
<div class="tip custom-block"><p class="custom-block-title">TIP</p>
<blockquote>
<p><strong>提示</strong>：如果地址失效，可以搜索 &quot;HPE Licensing Support Case&quot; 或直接通过 My HPE Software Center 寻找支持入口。</p>
</blockquote>
</div>
<h3 id="_2-填写申请单" tabindex="-1">2. 填写申请单 <a class="header-anchor" href="#_2-填写申请单" aria-label="Permalink to &quot;2. 填写申请单&quot;">&ZeroWidthSpace;</a></h3>
<p>在打开的页面中，需要填写详细的请求信息。该页面支持中文输入。</p>
<p><strong>必填信息包括：</strong></p>
<ul>
<li><strong>Serial Number (序列号)</strong>：准确填写服务器的 SN 码。</li>
<li><strong>Contact Information (联系信息)</strong>：姓名、邮箱等。</li>
<li><strong>Description (描述)</strong>：简要说明诉求，例如：“iLO License 丢失，申请查询找回”。</li>
</ul>
<p><img src="/images/hp/ilo-00.jpg" alt="获取信息">
<img src="/images/hp/ilo-01.jpg" alt="填写申请单页面"></p>
<p>确认信息无误后，点击 <strong>SUBMIT</strong> 提交。</p>
<h3 id="_3-获取案例编号-case-number" tabindex="-1">3. 获取案例编号 (Case Number) <a class="header-anchor" href="#_3-获取案例编号-case-number" aria-label="Permalink to &quot;3. 获取案例编号 (Case Number)&quot;">&ZeroWidthSpace;</a></h3>
<p>提交成功后，网页会显示本次服务的案例编号（Case Number）。</p>
<figure><img src="/images/hp/ilo-02.jpg" alt="提交成功及Case编号" data-fancybox="post-image" loading="lazy"></figure>
<p>此时你可以点击 “ATTACH FILE” 上传购买凭证（如果有），或者直接点击 “CONTINUE” 完成提交。接下来只需要耐心等待邮件。</p>
<h3 id="_4-等待官方回复" tabindex="-1">4. 等待官方回复 <a class="header-anchor" href="#_4-等待官方回复" aria-label="Permalink to &quot;4. 等待官方回复&quot;">&ZeroWidthSpace;</a></h3>
<p>HPE 的响应时间通常在 <strong>24 小时之内</strong>。你会收到来自 <code>Software Services Support</code> 的邮件。</p>
<p><strong>邮件确认：</strong>
官方可能会先发一封邮件确认收到请求，并告知 Case ID。</p>
<h3 id="_5-查看查询结果" tabindex="-1">5. 查看查询结果 <a class="header-anchor" href="#_5-查看查询结果" aria-label="Permalink to &quot;5. 查看查询结果&quot;">&ZeroWidthSpace;</a></h3>
<p>客服在后台查询后，会根据结果发送邮件：</p>
<p><s> 如果根据 SN 码查到了绑定的 iLO License，客服会在邮件中直接提供 <strong>License Key</strong>。</s></p>
<p>最新的邮件采用了授权订单编号 (EON) 的形式获取需要多一个步骤</p>
<figure><img src="/images/hp/ilo-03.jpg" alt="找回成功邮件示例" data-fancybox="post-image" loading="lazy"></figure>
<h3 id="_6-根据-eon-获取-license-key" tabindex="-1">6. 根据 EON 获取 License Key <a class="header-anchor" href="#_6-根据-eon-获取-license-key" aria-label="Permalink to &quot;6. 根据 EON 获取 License Key&quot;">&ZeroWidthSpace;</a></h3>
<p>访问 <a href="https://myenterpriselicense.hpe.com/cwp-ui/dashboard/entitlement" target="_blank" rel="noreferrer">HP 仪表页</a></p>
<figure><img src="/images/hp/ilo-04.jpg" alt="EON 提交" data-fancybox="post-image" loading="lazy"></figure>
<h3 id="_7-结束服务" tabindex="-1">7. 结束服务 <a class="header-anchor" href="#_7-结束服务" aria-label="Permalink to &quot;7. 结束服务&quot;">&ZeroWidthSpace;</a></h3>
<p>对查询结果没有异议后，HPE 会发送邮件告知 Case 即将关闭。</p>
<p>如果后续有其他问题，需要提交新的 Case 并引用旧的 Case ID。</p>
<h2 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to &quot;常见问题&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><strong>Gen8 之前的机器能找回吗？</strong>
太老的机器可能数据不再维护，具体以官方回复为准。</li>
<li><strong>iLO Advanced 有什么用？</strong>
解锁远程控制台（Remote Console）的全部功能（如解除 .NET/Java 远程桌面的连接时长限制、虚拟介质挂载等）。</li>
</ul>
]]></content:encoded>
            <category>HP</category>
            <category>iLO</category>
            <category>License</category>
            <category>服务器</category>
            <category>运维</category>
        </item>
        <item>
            <title><![CDATA[Proxmox(PVE): 安装 HP ssacli 磁盘管理工具及 Smartctl 穿透]]></title>
            <link>https://foxxorcat.top/posts/pve/Proxmox(PVE)_安装HP_ssacli.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/pve/Proxmox(PVE)_安装HP_ssacli.html</guid>
            <pubDate>Sat, 20 Dec 2025 10:00:00 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>在使用惠普（HPE）服务器运行 Proxmox VE 时，硬件阵列卡（Smart Array Controller）通常会屏蔽底层的物理磁盘信息。
为了监控磁盘健康状态和配置阵列，我们需要安装 HPE 官方的 <code>ssacli</code> (Smart Storage Admin CLI) 工具。</p>
<p>此外，在不安装官方工具的情况下，我们也可以通过特定参数让 <code>smartctl</code> 穿透阵列卡直接读取物理硬盘的 SMART 信息。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">smartctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -a</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cciss,</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">N</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /dev/sg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">M</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div>]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>在使用惠普（HPE）服务器运行 Proxmox VE 时，硬件阵列卡（Smart Array Controller）通常会屏蔽底层的物理磁盘信息。
为了监控磁盘健康状态和配置阵列，我们需要安装 HPE 官方的 <code>ssacli</code> (Smart Storage Admin CLI) 工具。</p>
<p>此外，在不安装官方工具的情况下，我们也可以通过特定参数让 <code>smartctl</code> 穿透阵列卡直接读取物理硬盘的 SMART 信息。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">smartctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -a</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cciss,</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">N</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /dev/sg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">M</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><hr>
<h2 id="方法一-smartctl-穿透读取-smart-信息" tabindex="-1">方法一：Smartctl 穿透读取 SMART 信息 <a class="header-anchor" href="#方法一-smartctl-穿透读取-smart-信息" aria-label="Permalink to &quot;方法一：Smartctl 穿透读取 SMART 信息&quot;">&ZeroWidthSpace;</a></h2>
<p>如果你只想查看硬盘的健康状况（如温度、通电时间、错误计数），而不需要配置阵列，通过 <code>smartctl</code> 穿透查询是最简单的方法，无需安装任何额外的驱动或工具。</p>
<h3 id="命令格式" tabindex="-1">命令格式 <a class="header-anchor" href="#命令格式" aria-label="Permalink to &quot;命令格式&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">smartctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -a</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cciss,</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">N</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /dev/sg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">M</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 或者直接对逻辑卷对应的设备节点（视驱动模式而定）</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">smartctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -a</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cciss,</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">N</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /dev/sda</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><ul>
<li><strong><code>-d cciss,&lt;N&gt;</code></strong>: 关键参数。告诉 smartctl 设备是 CCISS 类型（惠普阵列卡旧称），<code>&lt;N&gt;</code> 代表物理磁盘的索引号，从 0 开始。</li>
<li><strong><code>/dev/sda</code></strong>: 你的阵列卡逻辑卷设备路径。</li>
</ul>
<h3 id="实际操作示例" tabindex="-1">实际操作示例 <a class="header-anchor" href="#实际操作示例" aria-label="Permalink to &quot;实际操作示例&quot;">&ZeroWidthSpace;</a></h3>
<p>假设系统识别到的阵列盘是 <code>/dev/sda</code>，你想查看第 5 块物理硬盘的信息：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">smartctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -a</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cciss,4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /dev/sda</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><div class="tip custom-block"><p class="custom-block-title">TIP</p>
<blockquote>
<p><strong>提示</strong>：你可以写一个简单的循环脚本来扫描所有可能的 ID，找出所有物理盘：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> i </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">0..10}</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">do</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "=== Disk </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ==="</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">smartctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cciss,</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$i </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">/dev/sda</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">done</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></blockquote>
</div>
<hr>
<h2 id="方法二-安装-hpe-ssacli-管理工具" tabindex="-1">方法二：安装 HPE ssacli 管理工具 <a class="header-anchor" href="#方法二-安装-hpe-ssacli-管理工具" aria-label="Permalink to &quot;方法二：安装 HPE ssacli 管理工具&quot;">&ZeroWidthSpace;</a></h2>
<p><code>ssacli</code> 是惠普官方提供的命令行配置工具，功能非常强大，支持查看详细的阵列卡状态、电池状态、配置 RAID、扩容等操作。</p>
<h3 id="_1-添加-hpe-软件源" tabindex="-1">1. 添加 HPE 软件源 <a class="header-anchor" href="#_1-添加-hpe-软件源" aria-label="Permalink to &quot;1. 添加 HPE 软件源&quot;">&ZeroWidthSpace;</a></h3>
<p>导入其 GPG 公钥并创建源文件 <code>/etc/apt/sources.list.d/hp-mcp.list</code>。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -fsSL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> https://downloads.linux.hpe.com/SDR/hpePublicKey2048_key1.pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> gpg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --dearmor</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/keyrings/hpePublicKey2048_key1.gpg</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">chmod</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0644</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/keyrings/hpePublicKey2048_key1.gpg</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "deb [signed-by=/etc/apt/keyrings/hpePublicKey2048_key1.gpg] https://downloads.linux.hpe.com/SDR/repo/mcp $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -Po</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '^VERSION_CODENAME=\K.*' /etc/os-release)/current non-free"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/hp-mcp.list</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><h3 id="_2-更新并安装" tabindex="-1">2. 更新并安装 <a class="header-anchor" href="#_2-更新并安装" aria-label="Permalink to &quot;2. 更新并安装&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> update</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ssacli</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><div class="tip custom-block"><p class="custom-block-title">TIP</p>
<blockquote>
<p><strong>注意</strong>：运行 <code>apt update</code> 时可能会看到关于 <code>non-free-firmware</code> 的提示（Debian 12 的新策略），这对 <code>ssacli</code> 的安装没有影响，可以忽略。</p>
</blockquote>
</div>
<hr>
<h2 id="ssacli-常用命令指南" tabindex="-1">ssacli 常用命令指南 <a class="header-anchor" href="#ssacli-常用命令指南" aria-label="Permalink to &quot;ssacli 常用命令指南&quot;">&ZeroWidthSpace;</a></h2>
<p>安装完成后，可以直接在终端输入 <code>ssacli</code> 进入交互模式，或者直接在命令行执行。</p>
<h3 id="_1-查看整体状态" tabindex="-1">1. 查看整体状态 <a class="header-anchor" href="#_1-查看整体状态" aria-label="Permalink to &quot;1. 查看整体状态&quot;">&ZeroWidthSpace;</a></h3>
<p>这是最常用的命令，用于列出所有控制器、阵列和逻辑卷的概览。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> all</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> show</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> config</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_2-查看详细信息" tabindex="-1">2. 查看详细信息 <a class="header-anchor" href="#_2-查看详细信息" aria-label="Permalink to &quot;2. 查看详细信息&quot;">&ZeroWidthSpace;</a></h3>
<ul>
<li>
<p><strong>列出所有控制器</strong>：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> all</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> show</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li>
<li>
<p><strong>查看特定插槽（Slot）控制器的详细配置</strong>（假设控制器在 Slot 0）：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> slot=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> show</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> config</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> detail</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li>
<li>
<p><strong>查看所有物理硬盘状态</strong>：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> slot=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> physicaldrive</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> all</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> show</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><em>输出示例：</em></p>
<div class="language-text vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SATA HDD, 10 TB, OK)</span></span>
<span class="line"><span>physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SATA HDD, 10 TB, OK)</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></li>
<li>
<p><strong>查看逻辑卷（RAID）状态</strong>：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> slot=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> logicaldrive</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> all</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> show</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li>
</ul>
<h3 id="_3-阵列卡缓存与电池状态" tabindex="-1">3. 阵列卡缓存与电池状态 <a class="header-anchor" href="#_3-阵列卡缓存与电池状态" aria-label="Permalink to &quot;3. 阵列卡缓存与电池状态&quot;">&ZeroWidthSpace;</a></h3>
<p>检查缓存模块是否有电，以及电池（超级电容）是否健康。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> slot=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> show</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> status</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_4-常用简写语法" tabindex="-1">4. 常用简写语法 <a class="header-anchor" href="#_4-常用简写语法" aria-label="Permalink to &quot;4. 常用简写语法&quot;">&ZeroWidthSpace;</a></h3>
<p><code>ssacli</code> 的命令结构通常为：<code>&lt;目标&gt; &lt;命令&gt; [参数]</code>。</p>
<ul>
<li>
<p><strong>目标 (Target)</strong>：</p>
<ul>
<li><code>ctrl all</code> / <code>ctrl slot=0</code> (控制器)</li>
<li><code>physicaldrive all</code> / <code>pd 1I:1:1</code> (物理盘)</li>
<li><code>logicaldrive all</code> / <code>ld 1</code> (逻辑盘)</li>
</ul>
</li>
<li>
<p><strong>命令 (Command)</strong>：</p>
<ul>
<li><code>show</code>: 显示信息</li>
<li><code>modify</code>: 修改配置（如开启 / 关闭缓存）</li>
<li><code>rescan</code>: 重新扫描设备</li>
</ul>
</li>
</ul>
<h3 id="_5-高级操作示例" tabindex="-1">5. 高级操作示例 <a class="header-anchor" href="#_5-高级操作示例" aria-label="Permalink to &quot;5. 高级操作示例&quot;">&ZeroWidthSpace;</a></h3>
<ul>
<li>
<p><strong>开启 SSD 智能路径 (SSD Smart Path)</strong>（适用于 SSD 阵列）：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> slot=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> array</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> modify</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ssdsmartpath=enable</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li>
<li>
<p><strong>点亮硬盘指示灯</strong>（定位物理硬盘时非常有用）：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> slot=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> pd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1I:1:1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> modify</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> led=on</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 关闭</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssacli</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ctrl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> slot=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> pd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1I:1:1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> modify</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> led=off</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div></li>
</ul>
<h2 id="参考资料" tabindex="-1">参考资料 <a class="header-anchor" href="#参考资料" aria-label="Permalink to &quot;参考资料&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><a href="https://aljax.us/install-ssacli-on-pve/" target="_blank" rel="noreferrer">Install HP Smart Storage Admin CLI (ssacli) on your PVE node</a></li>
</ul>
]]></content:encoded>
            <category>PVE</category>
            <category>HP</category>
            <category>运维</category>
        </item>
        <item>
            <title><![CDATA[VSCode Remote + X11: 实现 Slint 远程开发预览]]></title>
            <link>https://foxxorcat.top/posts/linux/VSCode_Remote_X11_Slint.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/linux/VSCode_Remote_X11_Slint.html</guid>
            <pubDate>Sat, 06 Dec 2025 02:00:00 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>在进行嵌入式 GUI 开发（如使用 Rust 和 <a href="https://slint.dev/" target="_blank" rel="noreferrer">Slint</a>）时，通常会面临以下技术挑战：</p>
<ul>
<li><strong>资源限制</strong>：嵌入式设备性能有限，编译速度慢且存储空间不足，不适合直接作为开发环境。</li>
<li><strong>环境隔离</strong>：为了保持本地开发环境的整洁，通常使用 PVE/WSL/Docker 等虚拟化平台部署独立的 Linux 容器进行开发。</li>
</ul>
<p><strong>VSCode Remote - SSH</strong> 提供了便捷的远程开发体验，实现了 “本地编码，云端编译”。然而，Slint 的 “实时预览” (Live Preview) 功能依赖于图形界面显示。虽然配合 <a href="/posts/linux/SSH_X11_转发配置指南.html">SSH X11 转发</a> 可以将远程窗口投射至本地，但 VSCode 的插件机制存在一定的环境隔离，Slint 插件启动的预览进程往往无法正确获取 <code>DISPLAY</code> 环境变量，导致预览窗口无法显示。</p>
<p>本文介绍一种通过 LSP (Language Server Protocol) 代理脚本注入环境变量的方法，以解决该问题。</p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>在进行嵌入式 GUI 开发（如使用 Rust 和 <a href="https://slint.dev/" target="_blank" rel="noreferrer">Slint</a>）时，通常会面临以下技术挑战：</p>
<ul>
<li><strong>资源限制</strong>：嵌入式设备性能有限，编译速度慢且存储空间不足，不适合直接作为开发环境。</li>
<li><strong>环境隔离</strong>：为了保持本地开发环境的整洁，通常使用 PVE/WSL/Docker 等虚拟化平台部署独立的 Linux 容器进行开发。</li>
</ul>
<p><strong>VSCode Remote - SSH</strong> 提供了便捷的远程开发体验，实现了 “本地编码，云端编译”。然而，Slint 的 “实时预览” (Live Preview) 功能依赖于图形界面显示。虽然配合 <a href="/posts/linux/SSH_X11_转发配置指南.html">SSH X11 转发</a> 可以将远程窗口投射至本地，但 VSCode 的插件机制存在一定的环境隔离，Slint 插件启动的预览进程往往无法正确获取 <code>DISPLAY</code> 环境变量，导致预览窗口无法显示。</p>
<p>本文介绍一种通过 LSP (Language Server Protocol) 代理脚本注入环境变量的方法，以解决该问题。</p>
<hr>
<h2 id="准备工作" tabindex="-1">准备工作 <a class="header-anchor" href="#准备工作" aria-label="Permalink to &quot;准备工作&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="安装-slint-lsp" tabindex="-1">安装 slint-lsp <a class="header-anchor" href="#安装-slint-lsp" aria-label="Permalink to &quot;安装 slint-lsp&quot;">&ZeroWidthSpace;</a></h3>
<p>VSCode 的 Slint 插件默认不包含语言服务器二进制文件，且不会自动安装。我们需要在远程环境中手动安装它。请确保已安装 Rust 工具链：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cargo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> slint-lsp</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>安装完成后，<code>slint-lsp</code> 通常位于 <code>~/.cargo/bin/</code> 目录下。</p>
<div class="tip custom-block"><p class="custom-block-title">TIP</p>
<blockquote>
<p><strong>提示</strong>：即便是本地开发（非远程），有时 VSCode 插件也无法自动定位 <code>slint-lsp</code>。此时同样建议在 VSCode 设置中手动指定 <code>slint.lspBinaryPath</code> 的绝对路径，以确保插件正常工作。</p>
</blockquote>
</div>
<h2 id="问题分析" tabindex="-1">问题分析 <a class="header-anchor" href="#问题分析" aria-label="Permalink to &quot;问题分析&quot;">&ZeroWidthSpace;</a></h2>
<p>在 SSH 终端中手动运行 <code>cargo run</code> 时，Shell 会自动继承 SSH 会话中的 <code>DISPLAY</code> 环境变量（例如 <code>localhost:10.0</code>），因此常规 GUI 程序可以正常通过 X11 转发显示。</p>
<p>然而，VSCode 的 Slint 插件是在后台启动 <code>slint-lsp</code>（语言服务器）进程的。该过程并不总是能继承 SSH Shell 会话中的完整环境变量。这导致当用户点击 &quot;Show Preview&quot; 时，LSP 进程因无法定位显示设备而启动失败。</p>
<h2 id="解决方案-lsp-代理脚本" tabindex="-1">解决方案：LSP 代理脚本 <a class="header-anchor" href="#解决方案-lsp-代理脚本" aria-label="Permalink to &quot;解决方案：LSP 代理脚本&quot;">&ZeroWidthSpace;</a></h2>
<p>Slint 插件允许用户自定义 LSP 可执行文件的路径。利用这一特性，我们可以编写一个中间脚本（Wrapper Script）作为代理。在该脚本中手动注入必要的环境变量，然后再调用实际的 LSP 二进制文件。</p>
<h3 id="_1-创建代理脚本" tabindex="-1">1. 创建代理脚本 <a class="header-anchor" href="#_1-创建代理脚本" aria-label="Permalink to &quot;1. 创建代理脚本&quot;">&ZeroWidthSpace;</a></h3>
<p>在远程服务器的项目目录或用户目录下创建一个脚本文件，例如 <code>/root/slint_test/.vscode/slint-lsp-proxy.sh</code>：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 1. 配置区域设置 (Locale)</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># Slint 依赖 UTF-8 环境，强制指定以避免编码错误</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 需确保系统已生成对应 locale (Debian/Ubuntu: sudo dpkg-reconfigure locales)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> LANG</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">zh_CN.UTF-8</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 或者使用通用的 C.UTF-8</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># export LANG=C.UTF-8</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 2. 注入 X11 显示变量</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 此处需填入 SSH X11 转发的 DISPLAY 地址</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># SSH 自动转发通常为 localhost:10.0，具体值可通过在终端执行 echo $DISPLAY 获取</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> DISPLAY</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">localhost:10.0</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 3. 图形后端配置 (可选)</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 强制 winit 使用 X11 后端，避免因尝试连接 Wayland 而失败</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> WINIT_UNIX_BACKEND</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">x11</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 4. 启动实际的 LSP</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 需替换为服务器上 cargo 安装的 slint-lsp 实际路径</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">exec</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /root/.cargo/bin/slint-lsp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">$@</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br></div></div><blockquote>
<p><strong>注意</strong>：<code>DISPLAY</code> 的值可能会随会话变化。在固定 IP 的开发环境中，将其硬编码在脚本中较为稳定。</p>
</blockquote>
<h3 id="_2-赋予执行权限" tabindex="-1">2. 赋予执行权限 <a class="header-anchor" href="#_2-赋予执行权限" aria-label="Permalink to &quot;2. 赋予执行权限&quot;">&ZeroWidthSpace;</a></h3>
<p>需给予脚本执行权限，否则 VSCode 无法调用：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /root/slint_test/.vscode/slint-lsp-proxy.sh</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_3-配置-vscode" tabindex="-1">3. 配置 VSCode <a class="header-anchor" href="#_3-配置-vscode" aria-label="Permalink to &quot;3. 配置 VSCode&quot;">&ZeroWidthSpace;</a></h3>
<p>编辑项目的 <code>.vscode/settings.json</code>（或全局 User Settings），将 Slint 插件的 LSP 路径指向上述脚本：</p>
<div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "slint.lspBinaryPath"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"/root/slint_test/.vscode/slint-lsp-proxy.sh"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><h2 id="验证结果" tabindex="-1">验证结果 <a class="header-anchor" href="#验证结果" aria-label="Permalink to &quot;验证结果&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>确保本地电脑的 X Server（如 VcXsrv）已启动。</li>
<li>Reload VSCode 窗口以重启 LSP 服务。</li>
<li>打开任意 <code>.slint</code> 文件。</li>
<li>点击编辑器右上角的 <strong>Show Preview</strong> 按钮。</li>
<li>Slint 的预览窗口应能通过 SSH 隧道正常显示在本地桌面上。</li>
</ol>
<figure><img src="/images/slint/VSCode_Remote_X11_Slint.jpg" alt="成功预览效果图" data-fancybox="post-image" loading="lazy"></figure>
<p>值得留意的是官方视乎准备实现真正的远程预览</p>
<ul>
<li><a href="https://github.com/slint-ui/slint/issues/9880" target="_blank" rel="noreferrer">Remote controlled slint-viewer - GitHub Issue #9880</a></li>
</ul>
<h2 id="总结" tabindex="-1">总结 <a class="header-anchor" href="#总结" aria-label="Permalink to &quot;总结&quot;">&ZeroWidthSpace;</a></h2>
<p>通过 Shell 脚本封装 LSP 启动命令，可以有效绕过 VSCode 插件的环境隔离限制。该方法具有一定的通用性，对于其他依赖特定环境变量（如 <code>LD_LIBRARY_PATH</code> 或特定 SDK 路径）的 LSP 服务应该也同样适用。</p>
]]></content:encoded>
            <category>VSCode</category>
            <category>Slint</category>
            <category>X11</category>
            <category>Rust</category>
        </item>
        <item>
            <title><![CDATA[SSH X11 转发配置指南]]></title>
            <link>https://foxxorcat.top/posts/linux/SSH_X11_转发配置指南.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/linux/SSH_X11_转发配置指南.html</guid>
            <pubDate>Fri, 05 Dec 2025 03:00:00 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>在管理 Linux 服务器时，通常使用 SSH 命令行进行操作。但有时需运行一些必须使用图形界面（GUI）的软件（如 Oracle 安装程序、IDE、虚拟化管理器 virt-manager 等），以及 Windows 配合 Docker 容器进行 GUI 开发时，而服务器本身可能没有安装桌面环境，或者为了安全和性能不希望安装完整的 VNC/RDP 服务。</p>
<p><strong>X11 转发 (X11 Forwarding)</strong> 是一项非常实用的技术，它允许通过 SSH 通道将 Linux 服务器上的图形界面 “转发” 到本地电脑上显示。简而言之，即程序在服务器上运行，但窗口绘制在本地屏幕上。</p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>在管理 Linux 服务器时，通常使用 SSH 命令行进行操作。但有时需运行一些必须使用图形界面（GUI）的软件（如 Oracle 安装程序、IDE、虚拟化管理器 virt-manager 等），以及 Windows 配合 Docker 容器进行 GUI 开发时，而服务器本身可能没有安装桌面环境，或者为了安全和性能不希望安装完整的 VNC/RDP 服务。</p>
<p><strong>X11 转发 (X11 Forwarding)</strong> 是一项非常实用的技术，它允许通过 SSH 通道将 Linux 服务器上的图形界面 “转发” 到本地电脑上显示。简而言之，即程序在服务器上运行，但窗口绘制在本地屏幕上。</p>
<hr>
<h2 id="工作原理" tabindex="-1">工作原理 <a class="header-anchor" href="#工作原理" aria-label="Permalink to &quot;工作原理&quot;">&ZeroWidthSpace;</a></h2>
<p>X11 协议采用 C/S（客户端 / 服务端）架构，但其定义与直觉稍有不同：</p>
<ul>
<li><strong>X Server（服务端）</strong>：运行在<strong>本地电脑</strong>（拥有显示终端的一端）。负责 “绘图”，管理显示器、键盘和鼠标。</li>
<li><strong>X Client（客户端）</strong>：运行在<strong>远程服务器</strong>。即实际的应用程序（如 Firefox, xclock），负责请求 X Server 绘制窗口。</li>
</ul>
<p>SSH X11 转发的作用即在这两者之间建立一条加密隧道。</p>
<h2 id="服务端配置-远程-linux-主机" tabindex="-1">服务端配置 (远程 Linux 主机) <a class="header-anchor" href="#服务端配置-远程-linux-主机" aria-label="Permalink to &quot;服务端配置 (远程 Linux 主机)&quot;">&ZeroWidthSpace;</a></h2>
<p>首先需确保远程 Linux 服务器允许 X11 转发，并安装了必要的认证工具。</p>
<ol>
<li>
<p><strong>安装 xauth</strong>
<code>xauth</code> 用于生成和管理 X 权限文件，是 X11 转发必须的组件。</p>
<div class="vp-tabs">
        <input type="radio" name="group-tks87" id="tab-YvFIKM4" checked/>  
        <label for="tab-YvFIKM4">Debian/Ubuntu</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> update</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xauth</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></div>
        <input type="radio" name="group-tks87" id="tab--EB9Zhs" />  
        <label for="tab--EB9Zhs">CentOS/RHEL</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xorg-x11-xauth</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div></div></li>
<li>
<p><strong>配置 SSH 服务</strong>
编辑 <code>/etc/ssh/sshd_config</code> 文件，确保以下配置项处于启用状态：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">X11Forwarding</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yes</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">X11DisplayOffset</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">X11UseLocalhost</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yes</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p><em>通常 <code>X11Forwarding</code> 默认为 no，必须修改为 yes。</em></p>
</li>
<li>
<p><strong>重启 SSH 服务</strong></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> restart</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sshd</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li>
</ol>
<h2 id="客户端配置-本地电脑" tabindex="-1">客户端配置 (本地电脑) <a class="header-anchor" href="#客户端配置-本地电脑" aria-label="Permalink to &quot;客户端配置 (本地电脑)&quot;">&ZeroWidthSpace;</a></h2>
<p>根据本地电脑的操作系统，配置方式有所不同。</p>
<div class="vp-tabs">
        <input type="radio" name="group-gd9wy" id="tab-LEoy3gQ" checked/>  
        <label for="tab-LEoy3gQ">Windows</label><div class="content">
        <p>Windows 本身没有原生的 X Server，需安装第三方软件来接收图像数据。</p>
<h3 id="_1-安装-x-server-软件" tabindex="-1">1. 安装 X Server 软件 <a class="header-anchor" href="#_1-安装-x-server-软件" aria-label="Permalink to &quot;1. 安装 X Server 软件&quot;">&ZeroWidthSpace;</a></h3>
<p>推荐使用 <strong>VcXsrv</strong> (免费开源) 或 <strong>Xming</strong>。若使用 <strong>MobaXterm</strong>，其已内置 X Server，无需额外安装。</p>
<ul>
<li><strong>VcXsrv 下载</strong>: <a href="https://sourceforge.net/projects/vcxsrv/" target="_blank" rel="noreferrer">SourceForge 链接</a></li>
</ul>
<p>安装完成后，启动 <code>XLaunch</code>。配置向导中通常一路默认即可，但要注意在 &quot;Extra settings&quot; 步骤中：</p>
<ul>
<li>✅ 勾选 <strong>Disable access control</strong> (解决权限拒绝问题)</li>
</ul>
<h3 id="_2-配置-ssh-客户端" tabindex="-1">2. 配置 SSH 客户端 <a class="header-anchor" href="#_2-配置-ssh-客户端" aria-label="Permalink to &quot;2. 配置 SSH 客户端&quot;">&ZeroWidthSpace;</a></h3>
<p><strong>方案 A: 使用 PowerShell / CMD (OpenSSH)</strong>
若安装了 Windows 的 OpenSSH 客户端：</p>
<div class="language-powershell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">powershell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 需先设置 DISPLAY 环境变量指向本地 X Server</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">env:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">DISPLAY</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'localhost:0.0'</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">ssh </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">Y user@remote_host</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p><strong>方案 B: 使用 PuTTY</strong></p>
<ol>
<li>打开 PuTTY，填写 Host Name。</li>
<li>在左侧菜单找到 <code>Connection</code> -&gt; <code>SSH</code> -&gt; <code>X11</code>。</li>
<li>勾选 <strong>Enable X11 forwarding</strong>。</li>
<li><code>X display location</code> 留空或填 <code>localhost:0.0</code>。</li>
<li>回到 Session 保存并连接。</li>
</ol>
</div>
        <input type="radio" name="group-gd9wy" id="tab-H4YA0Hc" />  
        <label for="tab-H4YA0Hc">Linux/macOS</label><div class="content">
        <p>Linux 桌面版通常自带 X Server。macOS 用户需安装 <a href="https://www.xquartz.org/" target="_blank" rel="noreferrer">XQuartz</a>。</p>
<h3 id="连接命令" tabindex="-1">连接命令 <a class="header-anchor" href="#连接命令" aria-label="Permalink to &quot;连接命令&quot;">&ZeroWidthSpace;</a></h3>
<p>使用 <code>-X</code> (安全转发) 或 <code>-Y</code> (可信转发) 参数连接：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 推荐使用 -Y，兼容性更好，虽然理论安全性略低</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ssh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -Y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user@remote_host</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><ul>
<li><code>-X</code>: 启用 X11 转发，并进行访问控制检查（较安全，但部分应用可能崩溃）。</li>
<li><code>-Y</code>: 启用受信任的 X11 转发（绕过部分安全检查，性能和兼容性更好）。</li>
</ul>
</div></div><h2 id="连接与测试" tabindex="-1">连接与测试 <a class="header-anchor" href="#连接与测试" aria-label="Permalink to &quot;连接与测试&quot;">&ZeroWidthSpace;</a></h2>
<p>建立 SSH 连接后，可通过运行简单的 GUI 程序来测试转发是否成功。</p>
<ol>
<li>
<p><strong>验证环境变量</strong>
在 SSH 连入的终端中输入：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> $DISPLAY</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>若输出类似 <code>localhost:10.0</code> 或 <code>:10.0</code>，说明 SSH 已经成功为当前会话分配了显示通道。若为空，请检查 SSH 服务端配置。</p>
</li>
<li>
<p><strong>运行测试程序</strong>
若没有测试程序，可先安装一个简单的时钟：</p>
<div class="vp-tabs">
        <input type="radio" name="group-tNM62" id="tab-VbBjTYO" checked/>  
        <label for="tab-VbBjTYO">Debian/Ubuntu</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> x11-apps</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-tNM62" id="tab-p7G1zLO" />  
        <label for="tab-p7G1zLO">CentOS/RHEL</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xorg-x11-apps</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div></div><p>然后运行：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">xclock</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>若本地电脑上弹出了一个时钟小窗口，则表明 X11 转发配置成功。</p>
</li>
</ol>
<h2 id="常见问题排查" tabindex="-1">常见问题排查 <a class="header-anchor" href="#常见问题排查" aria-label="Permalink to &quot;常见问题排查&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="error-can-t-open-display" tabindex="-1">Error: Can't open display: <a class="header-anchor" href="#error-can-t-open-display" aria-label="Permalink to &quot;Error: Can't open display:&quot;">&ZeroWidthSpace;</a></h3>
<ul>
<li><strong>原因 1</strong>：本地 X Server 未启动（Windows 用户常见）。请确保 VcXsrv 或 Xming 已在托盘区运行。</li>
<li><strong>原因 2</strong>：未启用 SSH 转发参数。请检查是否加了 <code>-Y</code> 参数或 PuTTY 中是否勾选了选项。</li>
<li><strong>原因 3</strong>：<code>xauth</code> 未安装。服务端必须有 <code>xauth</code> 命令。</li>
</ul>
<h3 id="x11-connection-rejected-because-of-wrong-authentication" tabindex="-1">X11 connection rejected because of wrong authentication <a class="header-anchor" href="#x11-connection-rejected-because-of-wrong-authentication" aria-label="Permalink to &quot;X11 connection rejected because of wrong authentication&quot;">&ZeroWidthSpace;</a></h3>
<ul>
<li>通常是因为 <code>xauth</code> 文件权限问题或文件损坏。尝试在服务端删除 <code>.Xauthority</code> 文件后重新连接：<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">rm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ~/.Xauthority</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">exit</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 重新 SSH 登录</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div></li>
</ul>
<h3 id="画面响应慢" tabindex="-1">画面响应慢 <a class="header-anchor" href="#画面响应慢" aria-label="Permalink to &quot;画面响应慢&quot;">&ZeroWidthSpace;</a></h3>
<p>X11 协议本身网络开销较大，且没有压缩。</p>
<ul>
<li><strong>优化</strong>：可使用 <code>ssh -Y -C user@host</code> 开启 gzip 压缩，对低带宽环境有一定帮助。</li>
<li><strong>替代方案</strong>：若需流畅操作复杂桌面，建议改用 VNC 或 NoMachine。</li>
</ul>
]]></content:encoded>
            <category>Linux</category>
            <category>SSH</category>
            <category>X11</category>
            <category>远程桌面</category>
            <category>教程</category>
        </item>
        <item>
            <title><![CDATA[常用单片机脚定义图]]></title>
            <link>https://foxxorcat.top/posts/hardware/常用单片机脚定义图.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/hardware/常用单片机脚定义图.html</guid>
            <pubDate>Sat, 25 Nov 2023 13:28:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="esp8266" tabindex="-1">ESP8266 <a class="header-anchor" href="#esp8266" aria-label="Permalink to &quot;ESP8266&quot;">&ZeroWidthSpace;</a></h2>
<div class="vp-tabs">
        <input type="radio" name="group-B-Ixc" id="tab-4nxGwV_" checked/>  
        <label for="tab-4nxGwV_">ESP8266-01</label><div class="content">
        <figure><img src="/images/hardware/单片机脚定义图/ESP8266-01.png" alt="ESP8266-01" data-fancybox="post-image" loading="lazy"></figure>
</div>
        <input type="radio" name="group-B-Ixc" id="tab-wngxntt" />  
        <label for="tab-wngxntt">ESP8266-12E</label><div class="content">
        <figure><img src="/images/hardware/单片机脚定义图/ESP8266-12E.png" alt="ESP8266-12E" data-fancybox="post-image" loading="lazy"></figure>
</div>
        <input type="radio" name="group-B-Ixc" id="tab-eZUk0Ar" />  
        <label for="tab-eZUk0Ar">ESP8266-12E-NodeMCU-Kit</label><div class="content">
        <figure><img src="/images/hardware/单片机脚定义图/ESP8266-12E-NodeMCU-Kit.png" alt="ESP8266-12E-NodeMCU-Kit" data-fancybox="post-image" loading="lazy"></figure>
<figure><img src="/images/hardware/单片机脚定义图/ESP8266-DEVKIT.png" alt="ESP8266-DEVKIT" data-fancybox="post-image" loading="lazy"></figure>
</div>
        <input type="radio" name="group-B-Ixc" id="tab-K0gHGDN" />  
        <label for="tab-K0gHGDN">ESP8266-WeMos-D1-Mini</label><div class="content">
        <figure><img src="/images/hardware/单片机脚定义图/ESP8266-WeMos-D1-Mini.png" alt="ESP8266-WeMos-D1-Mini" data-fancybox="post-image" loading="lazy"></figure>
</div></div><p>除 GPIO4/5 以外，其他引在启动时都会产生电平变化</p>
<h3 id="esp8266参考" tabindex="-1">ESP8266 参考 <a class="header-anchor" href="#esp8266参考" aria-label="Permalink to &quot;ESP8266参考&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/" target="_blank" rel="noreferrer">esp8266-pinout-reference-gpios</a></p>
<p><a href="http://rabbithole.wwwdotorg.org/2017/03/28/esp8266-gpio.html" target="_blank" rel="noreferrer">esp8266-gpio</a></p>
<h2 id="esp32" tabindex="-1">ESP32 <a class="header-anchor" href="#esp32" aria-label="Permalink to &quot;ESP32&quot;">&ZeroWidthSpace;</a></h2>
<div class="vp-tabs">
        <input type="radio" name="group-aGjir" id="tab-Y3LT99V" checked/>  
        <label for="tab-Y3LT99V">ESP-WROOM-32</label><div class="content">
        <figure><img src="/images/hardware/单片机脚定义图/ESP32-WROOM.png" alt="ESP-WROOM-32" data-fancybox="post-image" loading="lazy"></figure>
</div>
        <input type="radio" name="group-aGjir" id="tab-x72uVLv" />  
        <label for="tab-x72uVLv">ESP32-NodeMCU-32S</label><div class="content">
        <figure><img src="/images/hardware/单片机脚定义图/ESP32-NodeMCU-32S.jpg" alt="ESP32-NodeMCU-32S" data-fancybox="post-image" loading="lazy"></figure>
</div>
        <input type="radio" name="group-aGjir" id="tab-ukvJDyT" />  
        <label for="tab-ukvJDyT">ESP32-S3-DevKitC-1</label><div class="content">
        <figure><img src="/images/hardware/单片机脚定义图/ESP32-S3-DevKitC-1.jpg" alt="ESP32-S3-DevKitC-1" data-fancybox="post-image" loading="lazy"></figure>
</div></div><h2 id="stm32" tabindex="-1">STM32 <a class="header-anchor" href="#stm32" aria-label="Permalink to &quot;STM32&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="esp32参考" tabindex="-1">ESP32 参考 <a class="header-anchor" href="#esp32参考" aria-label="Permalink to &quot;ESP32参考&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://randomnerdtutorials.com/esp32-pinout-reference-gpios" target="_blank" rel="noreferrer">esp32-pinout-reference-gpios</a></p>
]]></content:encoded>
            <category>物联网</category>
            <category>ESP8266</category>
            <category>ESP32</category>
            <category>引脚定义</category>
        </item>
        <item>
            <title><![CDATA[openwrt启动脚本]]></title>
            <link>https://foxxorcat.top/posts/linux/openwrt启动脚本.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/linux/openwrt启动脚本.html</guid>
            <pubDate>Sat, 25 Nov 2023 13:28:00 GMT</pubDate>
            <description><![CDATA[<h2 id="说明" tabindex="-1">说明 <a class="header-anchor" href="#说明" aria-label="Permalink to &quot;说明&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>OpenWRT 的启动脚本放在 /etc/init.d 目录下，并且须要 chmod +x 赋予执行权。</li>
<li>OpenWRT 开机时会自动运行 /etc/rc.d 目录下的脚本。由 /etc/init.d 链接生成。</li>
</ol>
<div class="language-sh vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/init.d/{name}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">service</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {name}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {action}</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 或</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">/etc/init.d/</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">{name}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {action}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div>]]></description>
            <content:encoded><![CDATA[<h2 id="说明" tabindex="-1">说明 <a class="header-anchor" href="#说明" aria-label="Permalink to &quot;说明&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>OpenWRT 的启动脚本放在 /etc/init.d 目录下，并且须要 chmod +x 赋予执行权。</li>
<li>OpenWRT 开机时会自动运行 /etc/rc.d 目录下的脚本。由 /etc/init.d 链接生成。</li>
</ol>
<div class="language-sh vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/init.d/{name}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">service</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {name}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {action}</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 或</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">/etc/init.d/</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">{name}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {action}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><hr>
<h2 id="编写" tabindex="-1">编写 <a class="header-anchor" href="#编写" aria-label="Permalink to &quot;编写&quot;">&ZeroWidthSpace;</a></h2>
<p>/etc/rc.common 中已经定义了所有默认的函数，只需要重写几个函数就可以实现启动脚本</p>
<h3 id="基础脚本" tabindex="-1">基础脚本<sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1" /></sup> <a class="header-anchor" href="#基础脚本" aria-label="Permalink to &quot;基础脚本[^initscripts]&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-sh vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#!/bin/sh /etc/rc.common</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 启动的顺序，越大越靠后</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">START</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">20</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 停止的顺序, 越小越靠前</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">STOP</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">15</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">start</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(){</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "script is start"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">stop</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(){</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "script is stop"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">reload</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "script is reload"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">restart</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(){</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "script is restart"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 系统启动时执行</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># boot(){}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 系统关机时执行</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># shutdown(){}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 增加自定义命令方法</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">EXTRA_COMMANDS</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"custom1 custom2 custom3"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">EXTRA_HELP</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=&#x3C;&#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">EOF</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    custom1 Help for the custom1 command</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    custom2 Help for the custom2 command</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    custom3 Help for the custom3 command</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">custom1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "script is custom1"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">custom2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "script is custom2"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">custom3</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "script is custom3"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br></div></div><h4 id="可覆盖方法以及说明" tabindex="-1">可覆盖方法以及说明 <a class="header-anchor" href="#可覆盖方法以及说明" aria-label="Permalink to &quot;可覆盖方法以及说明&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">/etc/rc.common 默认操作</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">start</td>
<td style="text-align:left">启动服务</td>
<td style="text-align:left">return 0</td>
</tr>
<tr>
<td style="text-align:left">stop</td>
<td style="text-align:left">停止服务</td>
<td style="text-align:left">return 0</td>
</tr>
<tr>
<td style="text-align:left">restart</td>
<td style="text-align:left">重启服务</td>
<td style="text-align:left">stop &amp;&amp; start</td>
</tr>
<tr>
<td style="text-align:left">reload</td>
<td style="text-align:left">重新加载配置文件，如果失败则重启</td>
<td style="text-align:left">restart</td>
</tr>
<tr>
<td style="text-align:left">enable</td>
<td style="text-align:left">启动开机自启动</td>
<td style="text-align:left">创建 /etc/rc.d/{S${START}${name}, K${STOP}${name}}</td>
</tr>
<tr>
<td style="text-align:left">disable</td>
<td style="text-align:left">禁用开机自启动</td>
<td style="text-align:left">删除 /etc/rc.d/{S${START}${name}, K${STOP}${name}}</td>
</tr>
<tr>
<td style="text-align:left">boot</td>
<td style="text-align:left">系统启动调用 boot</td>
<td style="text-align:left">start</td>
</tr>
<tr>
<td style="text-align:left">shutdown</td>
<td style="text-align:left">系统关机 / 重启时调用 shutdown</td>
<td style="text-align:left">stop</td>
</tr>
<tr>
<td style="text-align:left">depends</td>
<td style="text-align:left">依赖关系 (未找到详细使用方法)</td>
<td style="text-align:left">return 0</td>
</tr>
</tbody>
</table>
<h4 id="默认导出的命令说明" tabindex="-1">默认导出的命令说明 <a class="header-anchor" href="#默认导出的命令说明" aria-label="Permalink to &quot;默认导出的命令说明&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th>命令</th>
<th>说明</th>
<th>命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>start</td>
<td>启动服务</td>
<td>stop</td>
<td>停止服务</td>
</tr>
<tr>
<td>restart</td>
<td>重启服务</td>
<td>reload</td>
<td>重载服务</td>
</tr>
<tr>
<td>enable</td>
<td>启用自动启动</td>
<td>disable</td>
<td>禁用自动启动</td>
</tr>
<tr>
<td>enabled</td>
<td>是否开启自动启动</td>
<td>help</td>
<td>输出命令帮助</td>
</tr>
<tr>
<td>boot</td>
<td>系统调用</td>
<td>shutdown</td>
<td>系统调用</td>
</tr>
<tr>
<td>depends</td>
<td>系统调用</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="procd脚本" tabindex="-1">procd 脚本<sup class="footnote-ref"><a href="#footnote2">[2]</a><a class="footnote-anchor" id="footnote-ref2" /></sup> <a class="header-anchor" href="#procd脚本" aria-label="Permalink to &quot;procd脚本[^procd-init-scripts]&quot;">&ZeroWidthSpace;</a></h3>
<p>继承基础脚本信息</p>
<p>由 /etc/rc.common 中导入的 /lib/functions/procd.sh 实现 procd 方法</p>
<h4 id="覆盖方法说明" tabindex="-1">覆盖方法说明 <a class="header-anchor" href="#覆盖方法说明" aria-label="Permalink to &quot;覆盖方法说明&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th>名称</th>
<th>说明</th>
<th>/etc/rc.common 默认操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>start_service</td>
<td>启动服务</td>
<td>return 0</td>
</tr>
<tr>
<td>service_started</td>
<td>服务启动后</td>
<td>undefined</td>
</tr>
<tr>
<td>stop_service</td>
<td>停止服务</td>
<td>return 0</td>
</tr>
<tr>
<td>service_stopped</td>
<td>服务停止后触发</td>
<td>undefined</td>
</tr>
<tr>
<td>reload_service</td>
<td>重新加载配置文件</td>
<td>start</td>
</tr>
<tr>
<td>service_running</td>
<td>检查服务是否正在运行</td>
<td>procd_running</td>
</tr>
<tr>
<td>status_service</td>
<td>检查服务状态</td>
<td>_procd_status</td>
</tr>
<tr>
<td>service_triggers</td>
<td>服务触发器配置</td>
<td>return 0</td>
</tr>
<tr>
<td>service_data</td>
<td></td>
<td>return 0</td>
</tr>
</tbody>
</table>
<h4 id="导出命令" tabindex="-1">导出命令 <a class="header-anchor" href="#导出命令" aria-label="Permalink to &quot;导出命令&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th>命令</th>
<th>说明</th>
<th>调用方法</th>
</tr>
</thead>
<tbody>
<tr>
<td>start</td>
<td>启动服务</td>
<td>start_service &amp; service_started</td>
</tr>
<tr>
<td>stop</td>
<td>停止服务</td>
<td>stop_service &amp; procd_kill &amp;service_stopped</td>
</tr>
<tr>
<td>reload</td>
<td>重载服务</td>
<td>reload_service</td>
</tr>
<tr>
<td>running</td>
<td>检查服务是否在运行</td>
<td>service_running</td>
</tr>
<tr>
<td>status</td>
<td>获取服务状态</td>
<td>status_service</td>
</tr>
<tr>
<td>trace</td>
<td></td>
<td></td>
</tr>
<tr>
<td>info</td>
<td>打印 procd 服务信息</td>
<td>_procd_ubus_call</td>
</tr>
</tbody>
</table>
<h4 id="procd-基础方法" tabindex="-1">procd 基础方法 <a class="header-anchor" href="#procd-基础方法" aria-label="Permalink to &quot;procd 基础方法&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th>方法</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>procd_open_instance([name])</td>
<td>新增服务实例</td>
</tr>
<tr>
<td>procd_set_param(type, [value...])</td>
<td>实例配置</td>
</tr>
<tr>
<td>procd_append_param(type, [value...])</td>
<td>追加实例配置</td>
</tr>
<tr>
<td>procd_close_instance</td>
<td>完成服务实例新增</td>
</tr>
</tbody>
</table>
<h4 id="procd-触发器注册方法" tabindex="-1">procd 触发器注册方法 <a class="header-anchor" href="#procd-触发器注册方法" aria-label="Permalink to &quot;procd 触发器注册方法&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th>方法</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>procd_open_trigger</td>
<td>打开触发器配置</td>
</tr>
<tr>
<td>procd_add_reload_trigger([name...])</td>
<td>配置文件变化触发 reload</td>
</tr>
<tr>
<td>procd_add_reload_interface_trigger(interface)</td>
<td>接口变化触发 reload</td>
</tr>
<tr>
<td>procd_add_reload_mount_trigger([path...])</td>
<td>挂载变化时触发 reload</td>
</tr>
<tr>
<td>procd_add_restart_mount_trigger([path...])</td>
<td>挂载变化时触发 restart</td>
</tr>
<tr>
<td>procd_close_trigger</td>
<td>完成触发器配置</td>
</tr>
</tbody>
</table>
<h4 id="procd-type列表" tabindex="-1">procd type 列表 <a class="header-anchor" href="#procd-type列表" aria-label="Permalink to &quot;procd type列表&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th>type</th>
<th>类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>command</td>
<td>kv-list</td>
<td>命令行参数</td>
</tr>
<tr>
<td>env</td>
<td>kv-list</td>
<td>环境变量</td>
</tr>
</tbody>
</table>
<p>详细见 <sup class="footnote-ref"><a href="#footnote3">[3]</a><a class="footnote-anchor" id="footnote-ref3" /></sup></p>
<h2 id="相关工具" tabindex="-1">相关工具 <a class="header-anchor" href="#相关工具" aria-label="Permalink to &quot;相关工具&quot;">&ZeroWidthSpace;</a></h2>
<div class="vp-tabs">
        <input type="radio" name="group-bC5If" id="tab-iTVENNt" checked/>  
        <label for="tab-iTVENNt">start-stop-daemon</label><div class="content">
        <p>一个系统自带的工具，配合基础脚本就可创建简单的守护进程</p>
<p>由 /etc/rc.common 中导入的 /lib/functions/service.sh 实现</p>
<div class="language-sh vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#!/bin/sh /etc/rc.common</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">SERVICE_DAEMONIZE</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">1</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">SERVICE_WRITE_PID</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">1</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">START</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">20</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">STOP</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">15</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">start</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(){</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    service_start</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {path/to/name}</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">stop</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(){</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    service_stop</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {path/to/name}</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br></div></div><h4 id="可用方法" tabindex="-1">可用方法 <a class="header-anchor" href="#可用方法" aria-label="Permalink to &quot;可用方法&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">service_start</td>
<td style="text-align:left">启动服务</td>
</tr>
<tr>
<td style="text-align:left">service_stop</td>
<td style="text-align:left">停止服务</td>
</tr>
<tr>
<td style="text-align:left">service_reload</td>
<td style="text-align:left">重新加载服务</td>
</tr>
<tr>
<td style="text-align:left">service_check</td>
<td style="text-align:left">检测服务</td>
</tr>
<tr>
<td style="text-align:left">service_signal</td>
<td style="text-align:left">发送 $SERVICE_SIG 信号</td>
</tr>
</tbody>
</table>
<h4 id="配置变量" tabindex="-1">配置变量 <a class="header-anchor" href="#配置变量" aria-label="Permalink to &quot;配置变量&quot;">&ZeroWidthSpace;</a></h4>
<table tabindex="0">
<thead>
<tr>
<th style="text-align:left">名称</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">默认值</th>
<th style="text-align:center">启用值</th>
<th style="text-align:left">拼接选项</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">SERVICE_DEBUG</td>
<td style="text-align:left">DEBUG 只打印命令不运行</td>
<td style="text-align:left">undefined</td>
<td style="text-align:center">1</td>
<td style="text-align:left">echo</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_DAEMONIZE</td>
<td style="text-align:left">后台运行</td>
<td style="text-align:left">undefined</td>
<td style="text-align:center">1</td>
<td style="text-align:left">-b</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_WRITE_PID</td>
<td style="text-align:left">创建 PID 文件 进行匹配</td>
<td style="text-align:left">undefined</td>
<td style="text-align:center">1</td>
<td style="text-align:left">-m</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_MATCH_EXEC</td>
<td style="text-align:left">使用 EXEC 命令行进行匹配</td>
<td style="text-align:left">1</td>
<td style="text-align:center">1</td>
<td style="text-align:left">-x $exec</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_MATCH_NAME</td>
<td style="text-align:left">使用 EXEC 进程名称进行匹配</td>
<td style="text-align:left">undefined</td>
<td style="text-align:center">1</td>
<td style="text-align:left">-n $SERVICE_NAME</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_USE_PID</td>
<td style="text-align:left"></td>
<td style="text-align:left">undefined</td>
<td style="text-align:center">1</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">SERVICE_NAME</td>
<td style="text-align:left">进程名称</td>
<td style="text-align:left">执行文件的名称</td>
<td style="text-align:center" EXEC=""></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">SERVICE_PID_FILE</td>
<td style="text-align:left">PID 文件</td>
<td style="text-align:left">/var/run/$SERVICE_NAME.pid</td>
<td style="text-align:center" FILE=""></td>
<td style="text-align:left">-p $PID_FILE</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_SIG</td>
<td style="text-align:left">停止、杀死、重载信号</td>
<td style="text-align:left">undefined</td>
<td style="text-align:center"></td>
<td style="text-align:left">-s $SERVICE_SIG</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_SIG_RELOAD</td>
<td style="text-align:left">重载时发送的信号</td>
<td style="text-align:left">HUP</td>
<td style="text-align:center"></td>
<td style="text-align:left">覆盖 $SERVICE_SIG</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_SIG_STOP</td>
<td style="text-align:left">停止时发送的信号</td>
<td style="text-align:left">TERM</td>
<td style="text-align:center"></td>
<td style="text-align:left">覆盖 $SERVICE_SIG</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_STOP_TIME</td>
<td style="text-align:left">停止超时，超时杀死进程</td>
<td style="text-align:left">5</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">SERVICE_UID</td>
<td style="text-align:left">运行使用的 UID</td>
<td style="text-align:left">undefined</td>
<td style="text-align:center" UID=""></td>
<td style="text-align:left">-c $SERVICE_UID</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_GID</td>
<td style="text-align:left">运行使用的 GID</td>
<td style="text-align:left">undefined</td>
<td style="text-align:center" GID=""></td>
<td style="text-align:left">:$SERVICE_GID</td>
</tr>
<tr>
<td style="text-align:left">SERVICE_QUIET</td>
<td style="text-align:left">静默执行</td>
<td style="text-align:left">1</td>
<td style="text-align:center">1</td>
<td style="text-align:left">-q</td>
</tr>
</tbody>
</table>
</div></div><h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="footnote1" class="footnote-item"><p><a href="https://openwrt.org/docs/techref/initscripts" target="_blank" rel="noreferrer">initscripts</a> <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote2" class="footnote-item"><p><a href="https://openwrt.org/docs/guide-developer/procd-init-scripts" target="_blank" rel="noreferrer">procd-init-scripts</a> <a href="#footnote-ref2" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote3" class="footnote-item"><p><a href="https://openwrt.org/docs/guide-developer/procd-init-scripts#service_parameters" target="_blank" rel="noreferrer">procd-init-scripts#service_parameters</a> <a href="#footnote-ref3" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>OpenWrt</category>
            <category>Shell脚本</category>
            <category>系统服务</category>
        </item>
        <item>
            <title><![CDATA[vscode使用中遇到的问题]]></title>
            <link>https://foxxorcat.top/posts/trap/vscode使用中遇到的问题.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/trap/vscode使用中遇到的问题.html</guid>
            <pubDate>Wed, 01 Nov 2023 15:12:00 GMT</pubDate>
            <content:encoded><![CDATA[<h3 id="vscode-本地调试-html-无法获取外部数据" tabindex="-1">VSCode 本地调试 html 无法获取外部数据 <a class="header-anchor" href="#vscode-本地调试-html-无法获取外部数据" aria-label="Permalink to &quot;VSCode 本地调试 html 无法获取外部数据&quot;">&ZeroWidthSpace;</a></h3>
<h4 id="错误特征" tabindex="-1">错误特征 <a class="header-anchor" href="#错误特征" aria-label="Permalink to &quot;错误特征&quot;">&ZeroWidthSpace;</a></h4>
<p>Access to XMLHttpRequest at 'file:///&lt;name&gt;.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome-untrusted, https, edge.</p>
<h4 id="产生原因" tabindex="-1">产生原因 <a class="header-anchor" href="#产生原因" aria-label="Permalink to &quot;产生原因&quot;">&ZeroWidthSpace;</a></h4>
<p>使用 file:// 直接访问本地文件，存在安全隐患，在最新版浏览器中默认被限制</p>
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1558299" target="_blank" rel="noreferrer">CVE-2019-11730</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1193027" target="_blank" rel="noreferrer">CVE-2015-7186</a></li>
</ul>
<h4 id="解决方案" tabindex="-1">解决方案 <a class="header-anchor" href="#解决方案" aria-label="Permalink to &quot;解决方案&quot;">&ZeroWidthSpace;</a></h4>
<h5 id="_1-配置调试文件" tabindex="-1">1. 配置调试文件 <a class="header-anchor" href="#_1-配置调试文件" aria-label="Permalink to &quot;1.配置调试文件&quot;">&ZeroWidthSpace;</a></h5>
<div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// .vscode/launch.json</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "version"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"0.2.0"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "configurations"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: [</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      "type"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"msedge"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      "request"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"launch"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      "name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"启动 Edge"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      "file"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"${workspaceFolder}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line diff add"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      "runtimeArgs"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"--allow-file-access-from-files"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">] </span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  ]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><h5 id="_2-使用-live-server-插件" tabindex="-1">2. 使用 Live Server 插件 <a class="header-anchor" href="#_2-使用-live-server-插件" aria-label="Permalink to &quot;2.使用 Live Server 插件&quot;">&ZeroWidthSpace;</a></h5>
<p>安装后选择要打开的文件，鼠标右击后点击 Open With Live Server</p>
]]></content:encoded>
            <category>VSCode</category>
            <category>JavaScript</category>
            <category>踩坑记录</category>
            <category>调试</category>
        </item>
        <item>
            <title><![CDATA[Proxmox(PVE): Intel网卡问题]]></title>
            <link>https://foxxorcat.top/posts/pve/Proxmox(PVE)_Intel网卡问题.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/pve/Proxmox(PVE)_Intel网卡问题.html</guid>
            <pubDate>Sun, 29 Oct 2023 12:51:00 GMT</pubDate>
            <description><![CDATA[<h3 id="问题关键词" tabindex="-1">问题关键词 <a class="header-anchor" href="#问题关键词" aria-label="Permalink to &quot;问题关键词&quot;">&ZeroWidthSpace;</a></h3>
<p>pve kernel: e1000e 0000:00:1f.6 eno1: Detected Hardware Unit Hang</p>
]]></description>
            <content:encoded><![CDATA[<h3 id="问题关键词" tabindex="-1">问题关键词 <a class="header-anchor" href="#问题关键词" aria-label="Permalink to &quot;问题关键词&quot;">&ZeroWidthSpace;</a></h3>
<p>pve kernel: e1000e 0000:00:1f.6 eno1: Detected Hardware Unit Hang</p>
<hr>
<h3 id="完整错误信息" tabindex="-1">完整错误信息 <a class="header-anchor" href="#完整错误信息" aria-label="Permalink to &quot;完整错误信息&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-text vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>pve kernel: e1000e 0000:00:1f.6 eno1: Detected Hardware Unit Hang:</span></span>
<span class="line"><span>  TDH                  &#x3C;43></span></span>
<span class="line"><span>  TDT                  &#x3C;89></span></span>
<span class="line"><span>  next_to_use          &#x3C;89></span></span>
<span class="line"><span>  next_to_clean        &#x3C;42></span></span>
<span class="line"><span>buffer_info[next_to_clean]:</span></span>
<span class="line"><span>  time_stamp           &#x3C;100898259></span></span>
<span class="line"><span>  next_to_watch        &#x3C;43></span></span>
<span class="line"><span>  jiffies              &#x3C;1008987c1></span></span>
<span class="line"><span>  next_to_watch.status &#x3C;0></span></span>
<span class="line"><span>MAC Status             &#x3C;40080083></span></span>
<span class="line"><span>PHY Status             &#x3C;796d></span></span>
<span class="line"><span>PHY 1000BASE-T Status  &#x3C;3c00></span></span>
<span class="line"><span>PHY Extended Status    &#x3C;3000></span></span>
<span class="line"><span>PCI Status             &#x3C;10></span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br></div></div><h3 id="解决方法" tabindex="-1">解决方法 <a class="header-anchor" href="#解决方法" aria-label="Permalink to &quot;解决方法&quot;">&ZeroWidthSpace;</a></h3>
<p>修改 /etc/network/interfacesn 文件，并在对应网卡下追加以下配置</p>
<div class="vp-tabs">
        <input type="radio" name="group-mwqsW" id="tab-bSA82MF" checked/>  
        <label for="tab-bSA82MF">ethtool</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ifupdown2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ethtool</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># /etc/network/interfacesn</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">iface</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> eno1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> inet</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> manual</span></span>
<span class="line diff add"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    post-up</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ethtool</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -K</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> $IFACE </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">tso</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> off</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gso</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> off</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">    # post-up ethtool -K $IFACE gso off gro off tso off tx off rx off rxvlan off txvlan off sg off</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div></div>
        <input type="radio" name="group-mwqsW" id="tab-t2X4kaw" />  
        <label for="tab-t2X4kaw">other</label><div class="content">
        <p>买张新网卡...</p>
</div></div><h3 id="参考链接" tabindex="-1">参考链接 <a class="header-anchor" href="#参考链接" aria-label="Permalink to &quot;参考链接&quot;">&ZeroWidthSpace;</a></h3>
<ul>
<li>
<p><a href="https://forum.proxmox.com/threads/e1000e-eno1-detected-hardware-unit-hang.59928" target="_blank" rel="noreferrer">e1000e-eno1-detected-hardware-unit-hang.59928</a></p>
</li>
<li>
<p><a href="https://forum.proxmox.com/threads/e1000-driver-hang.58284" target="_blank" rel="noreferrer">e1000-driver-hang.58284</a></p>
</li>
</ul>
]]></content:encoded>
            <category>PVE</category>
            <category>网卡</category>
            <category>坑</category>
            <category>故障排查</category>
        </item>
        <item>
            <title><![CDATA[Proxmox(PVE): 开启NVIDIA vGPU]]></title>
            <link>https://foxxorcat.top/posts/pve/Proxmox(PVE)_开启NVIDIA vGPU(上).html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/pve/Proxmox(PVE)_开启NVIDIA vGPU(上).html</guid>
            <pubDate>Sat, 31 Dec 2022 14:55:30 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>NVIDIA vGPU 是一种允许多个虚拟机使用受支持的单个物理 GPU 的技术。</p>
<p>NVIDIA 不允许在消费级 GPU 上使用 vGPU 功能，但是实际上硬件是完全支持的。</p>
<p>这里使用开源软件  vgpu_unlock  通过修补 NVIDIA 驱动的方式解锁了消费级 NVIDIA vGPU 功能。</p>
<p>当然这仅能使消费级 GPU 能够支持 vGPU 技术，而不是破解了授权。<s>（所以还是需要去 NVIDIA 购买！）</s></p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>NVIDIA vGPU 是一种允许多个虚拟机使用受支持的单个物理 GPU 的技术。</p>
<p>NVIDIA 不允许在消费级 GPU 上使用 vGPU 功能，但是实际上硬件是完全支持的。</p>
<p>这里使用开源软件  vgpu_unlock  通过修补 NVIDIA 驱动的方式解锁了消费级 NVIDIA vGPU 功能。</p>
<p>当然这仅能使消费级 GPU 能够支持 vGPU 技术，而不是破解了授权。<s>（所以还是需要去 NVIDIA 购买！）</s></p>
<hr>
<h2 id="基本要求" tabindex="-1">基本要求 <a class="header-anchor" href="#基本要求" aria-label="Permalink to &quot;基本要求&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>一张 vgpu_unlock 支持的显卡（可以通过<a href="https://devicehunt.com/view/type/pci/vendor/10DE" target="_blank" rel="noreferrer">这个网站</a>查询 DeivceID 与下面数据进行对比）, 如果不使用 vgpu_unlock 仅需要满足支持 vGPU 即可</li>
<li>开启 IOMMU</li>
<li>开启 SR-IOV (部分显卡可能需要)</li>
</ul>
<h2 id="补充数据" tabindex="-1">补充数据 <a class="header-anchor" href="#补充数据" aria-label="Permalink to &quot;补充数据&quot;">&ZeroWidthSpace;</a></h2>
<details class="details custom-block"><summary>vGPU unlock 支持的 GPU</summary>
<div>
<input placeholder="请输入显卡DeviceID" class="supper-input" v-model="inputValue"/>
<span class="supper-show">{{ showText }}</span>
</div>
<table tabindex="0">
<thead>
<tr>
<th>Nvidia vGPU 显卡</th>
<th>GPU 核心</th>
<th>vGPU unlock 支持</th>
<th>支持的显卡 DeviceID 范围</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tesla M10</td>
<td>GM107 x4</td>
<td>大多数 Maxwell 1.0 显卡</td>
<td>[1340 , 13bd]∪[174d , 179c]</td>
</tr>
<tr>
<td>Tesla M60</td>
<td>GM204 x2</td>
<td>大多数 Maxwell 2.0 显卡</td>
<td>[13c0 , 1436]∪[1617 , 1667]∪[17c2 , 17fd]</td>
</tr>
<tr>
<td>Tesla P40</td>
<td>GP102</td>
<td>大多数 Pascal 显卡</td>
<td>[15f0 , 15f1]∪[1b00 , 1d56]∪[1725 , 172f]</td>
</tr>
<tr>
<td>Tesla V100 16GB</td>
<td>GV100</td>
<td>Titan V 和 Quadro GV100</td>
<td>[1d81 , 1dba]</td>
</tr>
<tr>
<td>Quadro RTX 6000</td>
<td>TU102</td>
<td>大多数 Turing 显卡</td>
<td>[1e02 , 1ff9]∪[2182 , 21d1]</td>
</tr>
<tr>
<td>RTX A6000</td>
<td>GA102</td>
<td>不支持 Ampere 显卡（有部分支持？）</td>
<td>[2200 , 2600]</td>
</tr>
</tbody>
</table>
</details>
<details class="details custom-block"><summary>使用工具说明</summary>
<table tabindex="0">
<thead>
<tr>
<th>工具</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>vgpu_unlock<sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1" /></sup></td>
<td>修补驱动解锁限制 + 使用 frida hook ioctl</td>
</tr>
<tr>
<td>vgpu_unlock-rs<sup class="footnote-ref"><a href="#footnote2">[2]</a><a class="footnote-anchor" id="footnote-ref2" /></sup></td>
<td>替换 vgpu_unlock 使用的 frida hook 方案</td>
</tr>
<tr>
<td>额外补丁 <sup class="footnote-ref"><a href="#footnote3">[3]</a><a class="footnote-anchor" id="footnote-ref3" /></sup> <sup class="footnote-ref"><a href="#footnote4">[4]</a><a class="footnote-anchor" id="footnote-ref4" /></sup></td>
<td>kernel &gt;= 5.10-rc1 <code>set_fs</code> 函数被移除<sup class="footnote-ref"><a href="#footnote5">[5]</a><a class="footnote-anchor" id="footnote-ref5" /></sup>，从此版本开始需要额外打补丁 (仅限 4xx)</td>
</tr>
<tr>
<td>vgpu-proxmox<sup class="footnote-ref"><a href="#footnote6">[6]</a><a class="footnote-anchor" id="footnote-ref6" /></sup></td>
<td>根据<sup class="footnote-ref"><a href="#footnote7">[7]</a><a class="footnote-anchor" id="footnote-ref7" /></sup>制作的 patch 文件，简化 vgpu_unlock 操作</td>
</tr>
<tr>
<td>fastapi-dls<sup class="footnote-ref"><a href="#footnote8">[8]</a><a class="footnote-anchor" id="footnote-ref8" /></sup></td>
<td>最小的 NVIDIA 授权服务器</td>
</tr>
<tr>
<td>vGPU-Unlock-patcher<sup class="footnote-ref"><a href="#footnote9">[9]</a><a class="footnote-anchor" id="footnote-ref9" /></sup></td>
<td>一些补丁的自动化脚本 (没用过)</td>
</tr>
<tr>
<td>dkms</td>
<td>用于动态安装内核模块，升降内核自动模块编译 (注意：需要安装 kernel-headers)</td>
</tr>
</tbody>
</table>
</details>
<!-- ::::details 驱动与内核版本的对应关系

:::tip
kernel >= 5.10-rc1 `set_fs` 函数被移除[^set_fs-remove]，所以从此版本开始需要额外打补丁
:::

| kernel 版本                       | vGPU 驱动版本        |
| --------------------------------- | -------------------- |
| vgpu_unlock[^vgpu_unlock] 方案:   |                      |
| =<5.10-rc1                        | ?                    |
| >5.10-rc1                         | ==4xx (需要打补丁 1) |
| >=5.15                            | ==4xx (需要打补丁 2) |
| vgpu-proxmox[^vgpu-proxmox] 方案: |                      |
| >= 5.13                           | 510.47.03            |
| 5.13~5.16                         | 510.85.03(14.2)      |
| 5.13~5.16                         | 510.108.03(14.3)     |
| 5.15~5.19                         | 525.60.12(15.0)      |
|                                   | 525.85.07(15.1)      |
|                                   | 535.54.06(16.0)      |
|                                   | 535.104.06(16.1)     |

:::: -->
<details class="details custom-block"><summary>vGPU 版本对应显卡兼容情况</summary>
<table tabindex="0">
<thead>
<tr>
<th>GPU 架构</th>
<th>GPU 名称</th>
<th>首个支持的 vGPU 软件版本</th>
<th>最后支持的 vGPU 软件版本分支</th>
<th>vGPU 软件支持状态</th>
<th>最后出货日期</th>
<th>扩展支持终止日期</th>
<th>维护正式终止日期</th>
</tr>
</thead>
<tbody>
<tr>
<td>Maxwell</td>
<td>Tesla M10</td>
<td>4.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2022 年 11 月</td>
<td>2025 年 11 月</td>
<td>待定</td>
</tr>
<tr>
<td>Maxwell</td>
<td>Tesla M60</td>
<td>2.0</td>
<td>16</td>
<td>维护支持</td>
<td>2020 年 3 月</td>
<td>2023 年 3 月</td>
<td>2026 年 7 月</td>
</tr>
<tr>
<td>Maxwell</td>
<td>Tesla M6</td>
<td>2.0</td>
<td>16</td>
<td>维护支持</td>
<td>2018 年 12 月</td>
<td>2021 年 12 月</td>
<td>2026 年 7 月</td>
</tr>
<tr>
<td>Pascal</td>
<td>Tesla P100 PCIe 12 GB</td>
<td>5.0</td>
<td>16</td>
<td>维护支持</td>
<td>2019 年 4 月</td>
<td>2022 年 4 月</td>
<td>2026 年 7 月</td>
</tr>
<tr>
<td>Pascal</td>
<td>Tesla P100 PCIe 16 GB</td>
<td>5.0</td>
<td>16</td>
<td>维护支持</td>
<td>2019 年 4 月</td>
<td>2022 年 4 月</td>
<td>2026 年 7 月</td>
</tr>
<tr>
<td>Pascal</td>
<td>Tesla P100 SXM2 16 GB</td>
<td>5.0</td>
<td>16</td>
<td>维护支持</td>
<td>2019 年 4 月</td>
<td>2022 年 4 月</td>
<td>2026 年 7 月</td>
</tr>
<tr>
<td>Pascal</td>
<td>Tesla P40</td>
<td>5.0</td>
<td>16</td>
<td>维护支持</td>
<td>2021 年 4 月</td>
<td>2024 年 4 月</td>
<td>2026 年 7 月</td>
</tr>
<tr>
<td>Pascal</td>
<td>Tesla P4</td>
<td>5.0</td>
<td>16</td>
<td>维护支持</td>
<td>2019 年 3 月</td>
<td>2022 年 3 月</td>
<td>2026 年 7 月</td>
</tr>
<tr>
<td>Pascal</td>
<td>Tesla P6</td>
<td>5.0</td>
<td>16</td>
<td>维护支持</td>
<td>2021 年 8 月</td>
<td>2024 年 8 月</td>
<td>2026 年 7 月</td>
</tr>
<tr>
<td>Volta</td>
<td>Tesla V100 SXM2 16 GB</td>
<td>6.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2020 年 6 月</td>
<td>2023 年 6 月</td>
<td>待定</td>
</tr>
<tr>
<td>Volta</td>
<td>Tesla V100 FHHL 16 GB</td>
<td>6.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2021 年 6 月</td>
<td>2024 年 6 月</td>
<td>待定</td>
</tr>
<tr>
<td>Volta</td>
<td>Tesla V100 PCIe 16 GB</td>
<td>6.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2021 年 4 月</td>
<td>2024 年 4 月</td>
<td>待定</td>
</tr>
<tr>
<td>Volta</td>
<td>Tesla V100 SXM2 32 GB</td>
<td>6.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2021 年 6 月</td>
<td>2024 年 6 月</td>
<td>待定</td>
</tr>
<tr>
<td>Volta</td>
<td>Tesla V100 PCIe 32 GB</td>
<td>6.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2021 年 6 月</td>
<td>2024 年 6 月</td>
<td>待定</td>
</tr>
<tr>
<td>Volta</td>
<td>Tesla V100S PCIe 16 GB</td>
<td>6.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2022 年 1 月</td>
<td>2025 年 1 月</td>
<td>待定</td>
</tr>
<tr>
<td>Turing</td>
<td>Quadro RTX 6000</td>
<td>8.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2022 年 5 月</td>
<td>2025 年 5 月</td>
<td>待定</td>
</tr>
<tr>
<td>Turing</td>
<td>Quadro RTX 6000 passive</td>
<td>10.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2022 年 5 月</td>
<td>2025 年 5 月</td>
<td>待定</td>
</tr>
<tr>
<td>Turing</td>
<td>Quadro RTX 8000</td>
<td>8.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2022 年 5 月</td>
<td>2025 年 5 月</td>
<td>待定</td>
</tr>
<tr>
<td>Turing</td>
<td>Quadro RTX 8000 passive</td>
<td>10.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2022 年 5 月</td>
<td>2025 年 5 月</td>
<td>待定</td>
</tr>
<tr>
<td>Turing</td>
<td>Tesla T4</td>
<td>7.1</td>
<td>待定</td>
<td>扩展支持</td>
<td>2024 年 12 月</td>
<td>2027 年 12 月</td>
<td>待定</td>
</tr>
<tr>
<td>Ampere</td>
<td>NVIDIA A2</td>
<td>14.0</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ampere</td>
<td>NVIDIA A10</td>
<td>12.2</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ampere</td>
<td>NVIDIA A16</td>
<td>13.0</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ampere</td>
<td>NVIDIA A40</td>
<td>12.0</td>
<td>待定</td>
<td>扩展支持</td>
<td>2024 年 12 月</td>
<td>2027 年 12 月</td>
<td>待定</td>
</tr>
<tr>
<td>Ampere</td>
<td>NVIDIA RTX A5000</td>
<td>12.2</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ampere</td>
<td>NVIDIA RTX A5500</td>
<td>14.0</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ampere</td>
<td>NVIDIA RTX A6000</td>
<td>12.0</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ada</td>
<td>NVIDIA L2</td>
<td>16.3</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ada</td>
<td>NVIDIA L4</td>
<td>15.2</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ada</td>
<td>NVIDIA L20</td>
<td>16.3</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ada</td>
<td>NVIDIA L40</td>
<td>15.2</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ada</td>
<td>NVIDIA L40S</td>
<td>16.1</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ada</td>
<td>NVIDIA RTX 5000 Ada</td>
<td>16.1</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ada</td>
<td>NVIDIA RTX 5880 Ada</td>
<td>17.0</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Ada</td>
<td>NVIDIA RTX 6000 Ada</td>
<td>15.2</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
<tr>
<td>Blackwell</td>
<td>NVIDIA RTX PRO 6000 Blackwell Server Edition</td>
<td>19.0</td>
<td>待定</td>
<td>全面支持</td>
<td>在售</td>
<td>待定</td>
<td>待定</td>
</tr>
</tbody>
</table>
</details>
<details class="details custom-block"><summary>vGPU 不同类型比较</summary>
<div class="tip custom-block"><p class="custom-block-title">TIP</p>
<p>这不太重要，可以使用 vgpu_unlock-rs 自由调整</p>
</div>
<table tabindex="0">
<thead>
<tr>
<th>vGPU Type</th>
<th>OS</th>
<th>Use Case</th>
<th>License</th>
<th>Display</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>A-series</td>
<td>Windows, Linux</td>
<td>Virtual Applications</td>
<td>vApps</td>
<td>1280x1024, 1 display</td>
<td>Good for RDSH</td>
</tr>
<tr>
<td>B-series</td>
<td>Windows, Linux</td>
<td>Basic PC work</td>
<td>vPC</td>
<td>Up to 5K, 2 displays</td>
<td>45 FPS max</td>
</tr>
<tr>
<td>C-series</td>
<td>Linux</td>
<td>Compute server</td>
<td>vCS</td>
<td>Up to 4K, 1 display</td>
<td>CUDA Only</td>
</tr>
<tr>
<td>Q-series</td>
<td>Windows, Linux</td>
<td>ProfessionalWorkstation</td>
<td>vDWS</td>
<td>Up to 8K, 4 displays</td>
<td>CUDA, OpenGL</td>
</tr>
</tbody>
</table>
</details>
<h2 id="安装驱动" tabindex="-1">安装驱动 <a class="header-anchor" href="#安装驱动" aria-label="Permalink to &quot;安装驱动&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="环境准备" tabindex="-1">环境准备 <a class="header-anchor" href="#环境准备" aria-label="Permalink to &quot;环境准备&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> curl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> unzip</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> patch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> dkms</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mdevctl</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> build-essential</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> pve-headers-`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">uname</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h3 id="驱动文件准备" tabindex="-1">驱动文件准备 <a class="header-anchor" href="#驱动文件准备" aria-label="Permalink to &quot;驱动文件准备&quot;">&ZeroWidthSpace;</a></h3>
<p>下载名为 NVIDIA-Linux-x86_64-&lt;version&gt;-vgpu-kvm.run 驱动文件</p>
<h3 id="安装" tabindex="-1">安装 <a class="header-anchor" href="#安装" aria-label="Permalink to &quot;安装&quot;">&ZeroWidthSpace;</a></h3>
<div class="tip custom-block"><p class="custom-block-title">TIP</p>
<p>如果安装成功应该会显示这个输出。</p>
<p>Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64 (version: &lt;version&gt;) is now complete.</p>
</div>
<details class="details custom-block"><summary><code>kernel &gt;= 5.10-rc1</code> and <code>vGPU driver &lt;= 4xx</code></summary>
<div class="info custom-block"><p class="custom-block-title">INFO</p>
<p>从此版本开始 <code>set_fs</code> 函数被移除<sup class="footnote-ref"><a href="#footnote5">[5:1]</a><a class="footnote-anchor" id="footnote-ref5:1" /></sup>，所以需要额外打补丁</p>
</div>
<h4 id="解包驱动" tabindex="-1">解包驱动 <a class="header-anchor" href="#解包驱动" aria-label="Permalink to &quot;解包驱动&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> NVIDIA-Linux-x86_64-</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">versio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">n</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">-vgpu-kvm.run</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./NVIDIA-Linux-x86_64-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;version>-vgpu-kvm.run </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">-x</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --target</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h4 id="打上额外补丁" tabindex="-1">打上额外补丁 <a class="header-anchor" href="#打上额外补丁" aria-label="Permalink to &quot;打上额外补丁&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 补丁1：</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -sSf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> https://raw.githubusercontent.com/rupansh/vgpu_unlock_5.12/master/twelve.patch</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> patch</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -p0</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 或者</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 补丁2：</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -sSf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> https://gitlab.com/polloloco/vgpu-proxmox/-/raw/450-driver/450_5.15.patch</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> patch</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -p0</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 修改许可, 将 NVIDIA、Dual MIT/GPL、MIT 改为 GPL</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># sed -i 's/^c("\(NVIDIA\|Dual MIT\/GPL\|MIT\)")/MODULE_LICENSE("GPL")/' ./kernel/nvidia/nv-frontend.c ./kernel/nvidia-vgpu-vfio/nvidia-vgpu-vfio.c</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ..</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><h4 id="安装-1" tabindex="-1">安装 <a class="header-anchor" href="#安装-1" aria-label="Permalink to &quot;安装&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./vgpu-kvm/nvidia-installer</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --dkms</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></details>
<p>显卡本身就支持 vGPU 可以不打解锁补丁直接安装</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./NVIDIA-Linux-x86_64-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;version>-vgpu-kvm.run </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">--dkms</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="应用解锁补丁-可选" tabindex="-1">应用解锁补丁 (可选) <a class="header-anchor" href="#应用解锁补丁-可选" aria-label="Permalink to &quot;应用解锁补丁(可选)&quot;">&ZeroWidthSpace;</a></h3>
<div class="vp-tabs">
        <input type="radio" name="group-YGjUj" id="tab-aGNZWfr" checked/>  
        <label for="tab-aGNZWfr">vgpu-proxmox</label><div class="content">
        <p>补丁下载<sup class="footnote-ref"><a href="#footnote6">[6:1]</a><a class="footnote-anchor" id="footnote-ref6:1" /></sup>: 选择对应的分支下载，文件名为 &lt;version&gt;.patch</p>
<h4 id="修补" tabindex="-1">修补 <a class="header-anchor" href="#修补" aria-label="Permalink to &quot;修补&quot;">&ZeroWidthSpace;</a></h4>
<p>如果成功应该能看到 successfully created. 之类的文字</p>
<p>并在当前目录下会生产名称为 NVIDIA-Linux-x86_64-&lt;version&gt;-vgpu-kvm-custom.run 的文件</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> NVIDIA-Linux-x86_64-</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">versio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">n</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">-vgpu-kvm.run</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./NVIDIA-Linux-x86_64-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;version>-vgpu-kvm.run </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">--apply-patch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ./</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">versio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">n</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.patch</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h4 id="安装-2" tabindex="-1">安装 <a class="header-anchor" href="#安装-2" aria-label="Permalink to &quot;安装&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./NVIDIA-Linux-x86_64-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;version>-vgpu-kvm-custom.run </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">--dkms</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-YGjUj" id="tab-ytqqwZh" />  
        <label for="tab-ytqqwZh">vgpu_unlock</label><div class="content">
        <h4 id="解包驱动-1" tabindex="-1">解包驱动 <a class="header-anchor" href="#解包驱动-1" aria-label="Permalink to &quot;解包驱动&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> NVIDIA-Linux-x86_64-</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">versio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">n</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">-vgpu-kvm.run</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./NVIDIA-Linux-x86_64-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;version>-vgpu-kvm.run </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">-x</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --target</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h4 id="打上解锁补丁" tabindex="-1">打上解锁补丁 <sup class="footnote-ref"><a href="#footnote10">[10]</a><a class="footnote-anchor" id="footnote-ref10" /></sup> <a class="header-anchor" href="#打上解锁补丁" aria-label="Permalink to &quot;打上解锁补丁 [^patch-vgpu_unlock]&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'https://github.com/DualCoder/vgpu_unlock.git'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu_unlock</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -l</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu_unlock/kern.ld</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm/kernel/nvidia/kern.ld</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -l</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu_unlock/vgpu_unlock_hooks.c</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm/kernel/common/inc/vgpu_unlock_hooks.c</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 在文件 vgpu-kvm/kernel/nvidia/nvidia.Kbuild 的末尾插入 ldflags-y += -T $(src)/nvidia/kern.ld</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '$ a ldflags-y += -T $(src)/nvidia/kern.ld'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm/kernel/nvidia/nvidia.Kbuild</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 在文件 vgpu-kvm/kernel/nvidia/os-interface.c 的32行后插入 #include "vgpu_unlock_hooks.c"</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '32 a #include "vgpu_unlock_hooks.c"'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm/kernel/nvidia/os-interface.c</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'kernel/nvidia/kern.ld 0644 KERNEL_MODULE_SRC INHERIT_PATH_DEPTH:1 MODULE:resman'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> >></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm/.manifest</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'kernel/common/inc/vgpu_unlock_hooks.c 0644 KERNEL_MODULE_SRC INHERIT_PATH_DEPTH:1 MODULE:vgpu'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> >></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu-kvm/.manifest</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><h4 id="安装-3" tabindex="-1">安装 <a class="header-anchor" href="#安装-3" aria-label="Permalink to &quot;安装&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./vgpu-kvm/nvidia-installer</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --dkms</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div></div><h3 id="安装-vgpu-unlock-rs-可选" tabindex="-1">安装 vgpu_unlock-rs (可选) <a class="header-anchor" href="#安装-vgpu-unlock-rs-可选" aria-label="Permalink to &quot;安装 vgpu_unlock-rs(可选)&quot;">&ZeroWidthSpace;</a></h3>
<h4 id="安装环境" tabindex="-1">安装环境 <a class="header-anchor" href="#安装环境" aria-label="Permalink to &quot;安装环境&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 国内请使用镜像安装 见: https://rsproxy.cn/</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">curl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> https://sh.rustup.rs</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -sSf</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --profile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> minimal</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> $HOME</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">/.cargo/env</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 版本过老</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#apt -y install cargo rustc</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><h4 id="编译" tabindex="-1">编译 <a class="header-anchor" href="#编译" aria-label="Permalink to &quot;编译&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> https://github.com/mbilker/vgpu_unlock-rs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu_unlock-rs</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu_unlock-rs</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 编译过程需要下载文件，可能会失败</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cargo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --release</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ..</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><h4 id="安装-4" tabindex="-1">安装 <a class="header-anchor" href="#安装-4" aria-label="Permalink to &quot;安装&quot;">&ZeroWidthSpace;</a></h4>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /lib/nvidia/libvgpu_unlock_rs.so</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mkdir</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/systemd/system/{nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d}</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '[Service]</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">Environment=LD_PRELOAD=/lib/nvidia/libvgpu_unlock_rs.so'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> tee</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/systemd/system/nvidia-{vgpu-mgr,vgpud}.service.d/vgpu_unlock-rs.conf</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> daemon-reload</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> enable</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> nvidia-{vgpu-mgr,vgpud}.service</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><h4 id="配置" tabindex="-1">配置 <a class="header-anchor" href="#配置" aria-label="Permalink to &quot;配置&quot;">&ZeroWidthSpace;</a></h4>
<p>创建空的配置文件</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mkdir</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/vgpu_unlock</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">touch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/vgpu_unlock/profile_override.toml</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>配置文件说明，可能有误具体看源码</p>
<div class="language-toml vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">toml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">unlock = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> # 启用解锁功能(不需要unlock vGPU可以设置为0)</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># unlock_migration = 1 # 解锁 VM 迁移功能</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 这里的nvidia-&#x3C;n>通过 mdevctl types 命令查询得到</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 工作模式为覆盖，所以nvidia-&#x3C;n>是必须存在的mdev设备</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 更多设置请查看源码 https://github.com/mbilker/vgpu_unlock-rs/blob/master/src/lib.rs#L235-L264</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">profile</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">nvidia-&#x3C;n></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">num_displays = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">          # 虚拟显示器的最大数量</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">display_width = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1920</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">      # 最大显示宽度</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">display_height = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1080</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">     # 最大显示高度</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">max_pixels = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2073600</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">      # 最大像素 max_pixels=display_width*display_height</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">cuda_enabled = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">          # 是否开启CUDA</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">frl_enabled = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">           # 如果开启会限制帧率为60fps</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">framebuffer = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0x76000000</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  # VRAM的大小</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # 其他选项:</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # 1GB: 0x3B000000</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # 2GB: 0x76000000</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # 3GB: 0xB1000000</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # 4GB: 0xEC000000</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # 8GB: 0x1D8000000</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # 16GB: 0x3B0000000</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # 这些数据仅供参考，你可以通过此方法计算</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                          # VRAM=`framebuffer`+`framebuffer_reservation`</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 修改did和sdis,svid</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 似乎只对Windows有效</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 你可以通过这个网站用Ctrl+F查询相同核心显卡的DeivceID（设备ID）</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># https://devicehunt.com/view/type/pci/vendor/10DE/</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># pci_device_id = 0x1E30    # 0x&#x3C;did> 由设备ID组成</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># pci_id = 0x1E3012BA       # 0x&#x3C;sdid>&#x3C;svid> 由子设备ID和子供应商ID组成</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 使用 mdevctl list 查看已经创建的 mdev</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mdev</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">&#x3C;00000000-0000-0000-0000-000000000000></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 具体配置同上</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 仅pve支持</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">vm</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">&#x3C;VMID></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 具体配置同上</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br></div></div><h3 id="屏蔽-nvidia-gpu-开源驱动" tabindex="-1">屏蔽 NVIDIA GPU 开源驱动 <a class="header-anchor" href="#屏蔽-nvidia-gpu-开源驱动" aria-label="Permalink to &quot;屏蔽 NVIDIA GPU 开源驱动&quot;">&ZeroWidthSpace;</a></h3>
<p>Proxmox 自带了适用于 NVIDIA GPU 的开源驱动程序，所以我们要屏蔽掉它然后使用 vGPU 驱动。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "blacklist nouveau"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> >></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/modprobe.d/blacklist.conf</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 似乎可以不执行</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">update-initramfs</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -u</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -k</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> all</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><!-- :::details 如果有多张 NVIDIA

::: -->
<h3 id="重启主机" tabindex="-1">重启主机 <a class="header-anchor" href="#重启主机" aria-label="Permalink to &quot;重启主机&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">reboot</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="验证安装" tabindex="-1">验证安装 <a class="header-anchor" href="#验证安装" aria-label="Permalink to &quot;验证安装&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="检查驱动是否安装成功" tabindex="-1">检查驱动是否安装成功 <a class="header-anchor" href="#检查驱动是否安装成功" aria-label="Permalink to &quot;检查驱动是否安装成功&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">nvidia-smi</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>输出类似如下</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">+---------------------------------------------------------------------------------------+</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> NVIDIA-SMI</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 535.54.06</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">              Driver</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Version:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 535.54.06</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    CUDA</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Version:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> N/A</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">      |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">-----------------------------------------+----------------------+----------------------+</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> GPU</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  Name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">                 Persistence-M</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Bus-Id</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        Disp.A</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Volatile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Uncorr.</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ECC</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Fan</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  Temp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   Perf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">          Pwr:Usage/Cap</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">         Memory-Usage</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> GPU-Util</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  Compute</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> M.</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">                                         |</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">                      |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">               MIG</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> M.</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">=========================================+======================+======================</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  Tesla</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> P40</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">                      On</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">  |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 00000000:05:00.0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Off</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">                    0</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> N/A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   38C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    P8</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">              19W</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 250W</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   7668MiB</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 23040MiB</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">      1%</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">      Default</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">                                         |</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">                      |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">                  N/A</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">+-----------------------------------------+----------------------+----------------------+</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">+---------------------------------------------------------------------------------------+</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Processes:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">                                                                            |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  GPU</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   GI</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   CI</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        PID</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   Type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   Process</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">                            GPU</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Memory</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">        ID</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   ID</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">                                                             Usage</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">      |</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">=======================================================================================</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   No</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> running</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> processes</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> found</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">                                                          |</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">+---------------------------------------------------------------------------------------+</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br></div></div><h3 id="检查-vgpu-是否解锁成功" tabindex="-1">检查 vGPU 是否解锁成功 <a class="header-anchor" href="#检查-vgpu-是否解锁成功" aria-label="Permalink to &quot;检查 vGPU 是否解锁成功&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mdevctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> types</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>输出类似如下，如果没有输出说明解锁失败</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">0000:05:00.0</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  nvidia-156</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Available</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> instances:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Device</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> API:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vfio-pci</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Name:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> GRID</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> P40-2B</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Description:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> num_heads=4,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> frl_config=45,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> framebuffer=2048M,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> max_resolution=5120x2880,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> max_instance=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">12</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  nvidia-215</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Available</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> instances:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Device</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> API:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vfio-pci</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Name:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> GRID</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> P40-2B4</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Description:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> num_heads=4,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> frl_config=45,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> framebuffer=2048M,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> max_resolution=5120x2880,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> max_instance=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">12</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  nvidia-241</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Available</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> instances:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Device</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> API:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vfio-pci</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Name:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> GRID</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> P40-1B4</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Description:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> num_heads=4,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> frl_config=45,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> framebuffer=1024M,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> max_resolution=5120x2880,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> max_instance=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">24</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">---SNIP---</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br></div></div><h3 id="检查此卡是否被识别为启用了-vgpu" tabindex="-1">检查此卡是否被识别为启用了 vGPU <a class="header-anchor" href="#检查此卡是否被识别为启用了-vgpu" aria-label="Permalink to &quot;检查此卡是否被识别为启用了 vGPU&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">nvidia-smi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vgpu</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>如果输出 <code>No supported devices in vGPU mode</code> ，请检查以上步骤是否出现错误。</p>
<p>如果检查无误，说明此卡不支持 vGPU。</p>
<h3 id="错误排查" tabindex="-1">错误排查 <a class="header-anchor" href="#错误排查" aria-label="Permalink to &quot;错误排查&quot;">&ZeroWidthSpace;</a></h3>
<p>你需要有一定的 Linux 知识和看懂报错的能力，这些命令或许对你有帮助</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">dmesg</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">journalctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --no-pager</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -b</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -u</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> nvidia-vgpud</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">journalctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --no-pager</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -b</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -u</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> nvidia-vgpu-mgr</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">uname</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -a</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cat</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /proc/cmdline</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><h2 id="在-proxmox-虚拟机中使用-vgpu" tabindex="-1">在 Proxmox 虚拟机中使用 vGPU <a class="header-anchor" href="#在-proxmox-虚拟机中使用-vgpu" aria-label="Permalink to &quot;在 Proxmox 虚拟机中使用 vGPU&quot;">&ZeroWidthSpace;</a></h2>
<details class="details custom-block"><summary>qemu-server &lt; 7.2-4</summary>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> list</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> nvidia-smi</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>修改 /etc/pve/qemu-server/&lt;VMID&gt;.conf 文件</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># /etc/pve/qemu-server/&#x3C;VMID>.conf</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 在首行追加新的一行，第5段一共12位，不足位前面补0</span></span>
<span class="line diff add"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">args:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -uuid</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 00000000-0000-0000-0000-00000000</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">VMI</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">D</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div></details>
<p>打开 Proxmox Web 界面，转到对应的 VM，添加一个 PCI 直通设备。选择对应 GPU 和对应 MDev Type 并添加。</p>
<figure><img src="/images/pve/5879A880-01.png" alt="Proxmox vGPU 配置" data-fancybox="post-image" loading="lazy"></figure>
<h2 id="下载链接" tabindex="-1">下载链接 <a class="header-anchor" href="#下载链接" aria-label="Permalink to &quot;下载链接&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="工具" tabindex="-1">工具 <a class="header-anchor" href="#工具" aria-label="Permalink to &quot;工具&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://github.com/DualCoder/vgpu_unlock" target="_blank" rel="noreferrer">vgpu_unlock</a></p>
<p><a href="https://github.com/mbilker/vgpu_unlock-rs" target="_blank" rel="noreferrer">vgpu_unlock-rs</a></p>
<p><a href="https://gitlab.com/polloloco/vgpu-proxmox" target="_blank" rel="noreferrer">vgpu-proxmox</a></p>
<p><a href="https://git.collinwebdesigns.de/oscar.krause/fastapi-dls" target="_blank" rel="noreferrer">fastapi-dls</a></p>
<h3 id="vgpu-驱动" tabindex="-1">vGPU 驱动 <a class="header-anchor" href="#vgpu-驱动" aria-label="Permalink to &quot;vGPU 驱动&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://alist.homelabproject.cc/foxipan/vGPU" target="_blank" rel="noreferrer">APQA 网盘 – vGPU (有最新版)</a></p>
<p><a href="https://cloud.google.com/compute/docs/gpus/grid-drivers-table?hl=zh-cn" target="_blank" rel="noreferrer">适用于 NVIDIA RTX 虚拟工作站的驱动程序 (仅包含 guest 驱动)</a></p>
<p><s><a href="https://github.com/justin-himself/NVIDIA-VGPU-Driver-Archive" target="_blank" rel="noreferrer">NVIDIA-VGPU-Driver-Archive (推荐使用 删库了)</a></s></p>
<p><a href="https://archive.org/download/NVIDIA-VGPU-Driver-Archive" target="_blank" rel="noreferrer">NVIDIA-VGPU-Driver-Archive (archive.org 还有一部分)</a></p>
<p>之前备份了整个 NVIDIA-VGPU-Driver-Archive, 不过为了方便存储是解包过的，只保留有完整的压缩包结构</p>
<p><a href="https://store.foxxorcat.top/ipns/k51qzi5uqu5digbs94jgshrkv04utjja1gsda3ppmawyd2igp3n67bk07zlw6w" target="_blank" rel="noreferrer">NVIDIA-VGPU-Driver-Archive (IPFS 建议用客户端)</a></p>
<h2 id="相关教程" tabindex="-1">相关教程 <a class="header-anchor" href="#相关教程" aria-label="Permalink to &quot;相关教程&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://pve.sqlsec.com/4/5/" target="_blank" rel="noreferrer">vGPU 教程 – 国光的 PVE 环境搭建教程</a></p>
<p><a href="https://foxi.buduanwang.vip/linux/1809.html/" target="_blank" rel="noreferrer">在 Proxmox VE 7.2 中开启 vGPU_unlock，实现显卡虚拟化</a></p>
<p><a href="https://xinalin.com/159/vgpu-configuration-on-pve" target="_blank" rel="noreferrer">vGPU 在 Proxmox VE 下的配置与使用</a></p>
<p><a href="https://pve-doc-cn.readthedocs.io/zh-cn/pve-nvidia-vgpu/introduce.html" target="_blank" rel="noreferrer">Proxmox VE Nvidia-vGPU doc</a></p>
<p><a href="https://cloud-atlas.readthedocs.io/zh-cn/latest/kvm/vgpu/install_vgpu_manager.html" target="_blank" rel="noreferrer">安装 NVIDIA Virtual GPU Manager</a></p>
<h2 id="补充说明" tabindex="-1">补充说明 <a class="header-anchor" href="#补充说明" aria-label="Permalink to &quot;补充说明&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>nvidia-smi vgpu 查询出的可能不是覆盖后的信息，可以参考<a href="https://gitlab.com/polloloco/vgpu-proxmox/-/blob/450-driver/nvidia-smi" target="_blank" rel="noreferrer">这个</a>创建一个启动文件</li>
<li>虚拟机中的驱动版本不能高于宿主机</li>
<li>文章可能有误，这只是一个笔记。</li>
</ul>
<h2 id="脚注" tabindex="-1">脚注 <a class="header-anchor" href="#脚注" aria-label="Permalink to &quot;脚注&quot;">&ZeroWidthSpace;</a></h2>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="footnote1" class="footnote-item"><p><a href="https://github.com/DualCoder/vgpu_unlock" target="_blank" rel="noreferrer">vgpu_unlock</a> <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote2" class="footnote-item"><p><a href="https://github.com/mbilker/vgpu_unlock-rs" target="_blank" rel="noreferrer">vgpu_unlock-rs</a> <a href="#footnote-ref2" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote3" class="footnote-item"><p><a href="https://raw.githubusercontent.com/rupansh/vgpu_unlock_5.12/master/twelve.patch" target="_blank" rel="noreferrer">修补文件 1</a> <a href="#footnote-ref3" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote4" class="footnote-item"><p><a href="https://gitlab.com/polloloco/vgpu-proxmox/-/raw/450-driver/450_5.15.patch" target="_blank" rel="noreferrer">修补文件 2</a> <a href="#footnote-ref4" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote5" class="footnote-item"><p><a href="https://www.zdnet.com/article/linux-5-10-finally-ditches-decades-old-tool-that-caused-security-bugs/" target="_blank" rel="noreferrer">set_fs remove</a> <a href="#footnote-ref5" class="footnote-backref">↩︎</a> <a href="#footnote-ref5:1" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote6" class="footnote-item"><p><a href="https://gitlab.com/polloloco/vgpu-proxmox" target="_blank" rel="noreferrer">vgpu-proxmox</a> <a href="#footnote-ref6" class="footnote-backref">↩︎</a> <a href="#footnote-ref6:1" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote7" class="footnote-item"><p><a href="https://docs.nvidia.com/grid/index.html" target="_blank" rel="noreferrer">vgpu 文档</a> <a href="#footnote-ref7" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote8" class="footnote-item"><p><a href="https://git.collinwebdesigns.de/oscar.krause/fastapi-dls" target="_blank" rel="noreferrer">fastapi-dls</a> <a href="#footnote-ref8" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote9" class="footnote-item"><p><a href="https://github.com/VGPU-Community-Drivers/vGPU-Unlock-patcher" target="_blank" rel="noreferrer">vGPU-Unlock-patcher</a> <a href="#footnote-ref9" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote10" class="footnote-item"><p><a href="https://krutavshah.github.io/GPU_Virtualization-Wiki/installation/driver-customization.html#add-unlock-hooks" target="_blank" rel="noreferrer">patch vgpu_unlock</a> <a href="#footnote-ref10" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>PVE</category>
            <category>vGPU</category>
            <category>NVIDIA</category>
            <category>显卡</category>
            <category>教程</category>
        </item>
        <item>
            <title><![CDATA[Proxmox(PVE): 开启IOMMU]]></title>
            <link>https://foxxorcat.top/posts/pve/Proxmox(PVE)_开启IOMMU.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/pve/Proxmox(PVE)_开启IOMMU.html</guid>
            <pubDate>Mon, 26 Dec 2022 21:38:29 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="iommu-的作用" tabindex="-1">IOMMU 的作用 <a class="header-anchor" href="#iommu-的作用" aria-label="Permalink to &quot;IOMMU 的作用&quot;">&ZeroWidthSpace;</a></h3>
<p>让虚拟机可以直接控制主机的 PCI 设备。</p>
<p>在使用时也会有一定优势，例如更低的延迟、更高的性能或更多功能。</p>
<p>但当设备传递到虚拟机后该设备不再被主机使用。</p>
<h3 id="环境要求" tabindex="-1">环境要求 <a class="header-anchor" href="#环境要求" aria-label="Permalink to &quot;环境要求&quot;">&ZeroWidthSpace;</a></h3>
<p>主板 / 硬件需要支持 IOMMU，并在主板设置中开启 IOMMU</p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="iommu-的作用" tabindex="-1">IOMMU 的作用 <a class="header-anchor" href="#iommu-的作用" aria-label="Permalink to &quot;IOMMU 的作用&quot;">&ZeroWidthSpace;</a></h3>
<p>让虚拟机可以直接控制主机的 PCI 设备。</p>
<p>在使用时也会有一定优势，例如更低的延迟、更高的性能或更多功能。</p>
<p>但当设备传递到虚拟机后该设备不再被主机使用。</p>
<h3 id="环境要求" tabindex="-1">环境要求 <a class="header-anchor" href="#环境要求" aria-label="Permalink to &quot;环境要求&quot;">&ZeroWidthSpace;</a></h3>
<p>主板 / 硬件需要支持 IOMMU，并在主板设置中开启 IOMMU</p>
<hr>
<h2 id="开启-iommu" tabindex="-1">开启 IOMMU <sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1" /></sup> <a class="header-anchor" href="#开启-iommu" aria-label="Permalink to &quot;开启 IOMMU [^kernel]&quot;">&ZeroWidthSpace;</a></h2>
<div class="tip custom-block"><p class="custom-block-title">TIP</p>
<ul>
<li>AMD 的 CPU IOMMU 貌似是自动的，可以不设置</li>
<li>pcie_acs_override=downstream,multifunction 可以配置 PCIe 设备的 ACS 策略，细分 IOMMU 分组，在最新版内核中可以解决 j3455 的 IOMMU 分组问题</li>
<li>iommu=pt 只会影响内核驱动，少一层地址转换可以让内核驱动设备性能更高</li>
</ul>
</div>
<div class="vp-tabs">
        <input type="radio" name="group-eLpzv" id="tab-2f-QQaX" checked/>  
        <label for="tab-2f-QQaX">Intel</label><div class="content">
        <p>Intel CPU 请按此步骤操作</p>
<div class="vp-tabs">
        <input type="radio" name="group-vS73_" id="tab-0JeUvU0" checked/>  
        <label for="tab-0JeUvU0">GRUB</label><div class="content">
        <p>编辑 /etc/default/grub</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># /etc/default/grub</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">GRUB_CMDLINE_LINUX_DEFAULT</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"quiet"</span></span>
<span class="line diff remove"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">GRUB_CMDLINE_LINUX</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">""</span></span>
<span class="line diff add"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">GRUB_CMDLINE_LINUX</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><p>更新 GRUB</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">update-grub</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-vS73_" id="tab-fApNDyB" />  
        <label for="tab-fApNDyB">systemd-boot</label><div class="content">
        <p>编辑 /etc/kernel/cmdline</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># /etc/kernel/cmdline</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 在末尾空格追加</span></span>
<span class="line diff add"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">intel_iommu</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> iommu</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">pt</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> pcie_acs_override</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">downstream,multifunction</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p>更新 systemd-boot 引导</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">proxmox-boot-tool</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> refresh</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div></div></div>
        <input type="radio" name="group-eLpzv" id="tab-axOdSRt" />  
        <label for="tab-axOdSRt">AMD</label><div class="content">
        <p>AMD CPU 请按此步骤操作</p>
<div class="vp-tabs">
        <input type="radio" name="group-u1TYL" id="tab-Q82tESS" checked/>  
        <label for="tab-Q82tESS">GRUB</label><div class="content">
        <p>编辑 /etc/default/grub</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># /etc/default/grub</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">GRUB_CMDLINE_LINUX_DEFAULT</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"quiet"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">GRUB_CMDLINE_LINUX</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">""</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> //</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [!code </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">--</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line diff add"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">GRUB_CMDLINE_LINUX</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><p>更新 GRUB</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">update-grub</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-u1TYL" id="tab-wR2Gaon" />  
        <label for="tab-wR2Gaon">systemd-boot</label><div class="content">
        <p>编辑 /etc/kernel/cmdline</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># /etc/kernel/cmdline</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 在末尾空格追加</span></span>
<span class="line diff add"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">amd_iommu</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> iommu</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">pt</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> pcie_acs_override</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">downstream,multifunction</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p>更新 systemd-boot 引导</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">proxmox-boot-tool</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> refresh</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div></div></div></div><p>重启后验证是否配置成功</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cat</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /proc/cmdline</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="增加所需模块" tabindex="-1">增加所需模块 <a class="header-anchor" href="#增加所需模块" aria-label="Permalink to &quot;增加所需模块&quot;">&ZeroWidthSpace;</a></h2>
<p>编辑 /etc/modules</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># /etc/modules</span></span>
<span class="line diff add"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">vfio</span></span>
<span class="line diff add"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">vfio_iommu_type1</span></span>
<span class="line diff add"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">vfio_pci</span></span>
<span class="line diff add"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">vfio_virqfd</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><h2 id="验证-iommu" tabindex="-1">验证 IOMMU <a class="header-anchor" href="#验证-iommu" aria-label="Permalink to &quot;验证 IOMMU&quot;">&ZeroWidthSpace;</a></h2>
<p>如果输出 DMAR: IOMMU enabled 则说明开启成功</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">dmesg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> DMAR</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> IOMMU</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> AMD-Vi</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>查询 IOMMU 分组情况</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#!/bin/bash</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">shopt</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> nullglob</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> g </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">find</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /sys/kernel/iommu_groups/</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">*</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -maxdepth</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> d</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> sort</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -V</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">); </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">do</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "IOMMU Group ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">g</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">##*/</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}:"</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> d </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> $g</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">/devices/*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">do</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        echo</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "\t$(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lspci</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -nns</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">d</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">##*/</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">})"</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    done</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">done</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><h2 id="iommu-中断重新映射" tabindex="-1">IOMMU 中断重新映射 <sup class="footnote-ref"><a href="#footnote2">[2]</a><a class="footnote-anchor" id="footnote-ref2" /></sup> <a class="header-anchor" href="#iommu-中断重新映射" aria-label="Permalink to &quot;IOMMU 中断重新映射 [^iommu_interrupts]&quot;">&ZeroWidthSpace;</a></h2>
<div class="tip custom-block"><p class="custom-block-title">TIP</p>
<p>现代计算机主板几乎都支持，可以跳过此步骤</p>
</div>
<p>验证是否支持</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">dmesg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> grep</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'remapping'</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>如果输出类似如下结果说明支持</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">AMD-Vi:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Interrupt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> remapping</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> enabled</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">DMAR-IR:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enabled</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> IRQ</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> remapping</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> x2apic</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mode</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>如果您的系统不支持，您可以通过以下方式允许不安全的中断</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "options vfio_iommu_type1 allow_unsafe_interrupts=1"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/modprobe.d/iommu_unsafe_interrupts.conf</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="footnote1" class="footnote-item"><p><a href="https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt" target="_blank" rel="noreferrer">内核参数说明</a> <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote2" class="footnote-item"><p><a href="https://pve.proxmox.com/wiki/PCI_Passthrough" target="_blank" rel="noreferrer">PCI_Passthrough</a> <a href="#footnote-ref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>PVE</category>
            <category>IOMMU</category>
            <category>系统配置</category>
        </item>
        <item>
            <title><![CDATA[博通BCM57810S更改2.5G速率]]></title>
            <link>https://foxxorcat.top/posts/z-turn/博通BCM57810S更改2.5G速率.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/z-turn/博通BCM57810S更改2.5G速率.html</guid>
            <pubDate>Tue, 04 Oct 2022 07:47:24 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>前阵子手贱在海鲜市场买了个 2.5G 的猫棒，本来到货了很高兴结果插上去没有一点反应，查了半天发现是卡在了速率协商上，必须手动指定 1G 还好不是猫棒有问题要不然 RMB-200......</p>
<p>但这样一来就有些浪费，还好早有国外大神提出了<a href="https://www.dslreports.com/forum/r32230041-Internet-Bypassing-the-HH3K-up-to-2-5Gbps-using-a-BCM57810S-NIC" target="_blank" rel="noreferrer">解决方法</a>，似乎不止适用于 BCM57810S。</p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>前阵子手贱在海鲜市场买了个 2.5G 的猫棒，本来到货了很高兴结果插上去没有一点反应，查了半天发现是卡在了速率协商上，必须手动指定 1G 还好不是猫棒有问题要不然 RMB-200......</p>
<p>但这样一来就有些浪费，还好早有国外大神提出了<a href="https://www.dslreports.com/forum/r32230041-Internet-Bypassing-the-HH3K-up-to-2-5Gbps-using-a-BCM57810S-NIC" target="_blank" rel="noreferrer">解决方法</a>，似乎不止适用于 BCM57810S。</p>
<hr>
<p>使用前需要重新编译驱动，不过目前大部分系统已经内置了该驱动补丁，刚好 openwrt、ikuai 也在其中，不用重新编译。</p>
<p>修改方法有两种 DOS (或许可以用 cmd) 和 UEFI，使用 DOS 太麻烦所以这里直接使用 UEFI。</p>
<h2 id="准备" tabindex="-1">准备 <a class="header-anchor" href="#准备" aria-label="Permalink to &quot;准备&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>一张博通 BCM57810S 网卡</li>
<li>一个大于 100MB 的 FAT32 格式的 U 盘</li>
<li>支持 UEFI 启动的电脑</li>
<li>下载需要的文件<a href="https://mega.nz/file/rrJyFaxB#yqW-FTDNuTb2-2Ewm7nuafab8lbzDrE-G7-zUeksUV8" target="_blank" rel="noreferrer">B57BCMCD_T7.6.2.3.zip</a>, <a href="https://mega.nz/file/fuRQyAZJ#0sGH8szJovJIiPcjkM3gkTUpfPthE2dJ2G0shWxY9kQ" target="_blank" rel="noreferrer">B57BCMCD_T7.6.4.1.zip</a>, <a href="https://mega.nz/file/b2YWHahJ#R8J-sEzQ5wm9EMxlyu4AULj5JqadlnJsc0zkfeIu57U" target="_blank" rel="noreferrer">B57BCMCD_T7.12b.4.1.zip</a>(下载任意一个皆可)(mega 下不了的点<a href="https://cloud.189.cn/t/IbeuEnVZNrie" target="_blank" rel="noreferrer">这里</a>(访问码:fl7d))</li>
</ul>
<h2 id="开始" tabindex="-1">开始 <a class="header-anchor" href="#开始" aria-label="Permalink to &quot;开始&quot;">&ZeroWidthSpace;</a></h2>
<div class="vp-tabs">
        <input type="radio" name="group-jpp4z" id="tab-jMASghH" checked/>  
        <label for="tab-jMASghH">UEFI</label><div class="content">
        <p>复制 / UEFI/uefi_ediag/x64 目录下面所有的文件到 U 盘根目录</p>
<p>进入到主板的 UEFI Shell 界面，进入 U 盘（一般情况下 u 盘为 fsX）执行 ediag_x64.efi -b10eng</p>
<figure><img src="/images/z-turn/3e13fea1-01.png" alt="进入配置程序" data-fancybox="post-image" loading="lazy"></figure>
</div></div><p>输入命令进入速率设置模式</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">device</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">numbe</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">r</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> #number 为需要修改的光口编号</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">nvm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cfg</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">7</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  # link settings</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><figure><img src="/images/z-turn/3e13fea1-02.png" alt="配置网卡速率" data-fancybox="post-image" loading="lazy"></figure>
<p>遇到 <code>more... 'q' to quit</code> 可以按 q 键取消打印更多</p>
<p>按照 &lt;option&gt;=&lt;value&gt; 的格式修改数据，cancel 取消本次配置，save 保存设置</p>
<div class="vp-tabs">
        <input type="radio" name="group-ps_wM" id="tab-h_SBqxn" checked/>  
        <label for="tab-h_SBqxn">改 2.5G</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">35</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">70</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">36</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">70</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">56</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">6</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">59</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">6</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div></div>
        <input type="radio" name="group-ps_wM" id="tab--7sW5wK" />  
        <label for="tab--7sW5wK">改 10G</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">35</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">50</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">36</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">50</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">56</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">7</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">59</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">7</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div></div></div><h2 id="遇到的问题" tabindex="-1">遇到的问题 <a class="header-anchor" href="#遇到的问题" aria-label="Permalink to &quot;遇到的问题&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><s>两个口不能同时使用 2.5G 速率</s> 经过测试可以同时使用 2.5G 猫棒 + 2.5G 电口</li>
<li>耗电比光猫还高，需要给软路由配一个好点的电源，不然间接性罢工</li>
</ul>
]]></content:encoded>
            <category>网卡</category>
            <category>固件</category>
            <category>博通</category>
            <category>折腾</category>
        </item>
        <item>
            <title><![CDATA[Proxmox(PVE): 换源]]></title>
            <link>https://foxxorcat.top/posts/pve/Proxmox(PVE)_换源.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/pve/Proxmox(PVE)_换源.html</guid>
            <pubDate>Thu, 29 Sep 2022 07:56:04 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>Proxmox VE (PVE) 安装后，默认配置的软件源指向官方服务器。由于国内网络环境的原因，下载速度可能较慢，甚至连接失败。为了获得更好的使用体验，建议替换为国内的镜像源。</p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>Proxmox VE (PVE) 安装后，默认配置的软件源指向官方服务器。由于国内网络环境的原因，下载速度可能较慢，甚至连接失败。为了获得更好的使用体验，建议替换为国内的镜像源。</p>
<hr>
<h2 id="pve-软件源更换" tabindex="-1">PVE 软件源更换 <a class="header-anchor" href="#pve-软件源更换" aria-label="Permalink to &quot;PVE 软件源更换&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="_1-移除企业版订阅源" tabindex="-1">1. 移除企业版订阅源 <a class="header-anchor" href="#_1-移除企业版订阅源" aria-label="Permalink to &quot;1. 移除企业版订阅源&quot;">&ZeroWidthSpace;</a></h3>
<p>Proxmox 默认启用了企业版软件源（Enterprise Repository），该源需要付费订阅才能使用。如果你没有订阅，更新时会报错。我们需要将其禁用或移除。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 或者直接删除该文件（推荐备份）</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mv</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/pve-enterprise.list</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/pve-enterprise.list.bak</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mv</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/ceph.list</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/ceph.list.bak</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><h3 id="_2-添加非订阅版源" tabindex="-1">2. 添加非订阅版源 <a class="header-anchor" href="#_2-添加非订阅版源" aria-label="Permalink to &quot;2. 添加非订阅版源&quot;">&ZeroWidthSpace;</a></h3>
<p>我们可以使用国内镜像提供的非订阅版源（No-Subscription Repository）。</p>
<blockquote>
<p><strong>注意</strong>：部分精简版系统可能未预装 <code>lsb_release</code> 命令。如果执行报错，请先安装：<code>apt-get install lsb-release</code>，或者手动将 <code>$(lsb_release -sc)</code> 替换为你的系统代号（如 <code>bookworm</code> 或 <code>bullseye</code>）。</p>
</blockquote>
<div class="vp-tabs">
        <input type="radio" name="group-dSVsp" id="tab-xwgH3hx" checked/>  
        <label for="tab-xwgH3hx">清华大学 (TUNA)</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -Po</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '^VERSION_CODENAME=\K.*' /etc/os-release) pve-no-subscription"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/pve-no-subscription.list</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-dSVsp" id="tab-vujOdtv" />  
        <label for="tab-vujOdtv">中科大 (USTC)</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -Po</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '^VERSION_CODENAME=\K.*' /etc/os-release) pve-no-subscription"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/pve-no-subscription.list</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-dSVsp" id="tab-bzQMaBn" />  
        <label for="tab-bzQMaBn">南京大学 (NJU)</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "deb https://mirrors.nju.edu.cn/proxmox/debian/pve $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -Po</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '^VERSION_CODENAME=\K.*' /etc/os-release) pve-no-subscription"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/pve-no-subscription.list</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div></div><h2 id="debian-基础源更换" tabindex="-1">Debian 基础源更换 <a class="header-anchor" href="#debian-基础源更换" aria-label="Permalink to &quot;Debian 基础源更换&quot;">&ZeroWidthSpace;</a></h2>
<p>PVE 是基于 Debian 构建的，因此还需要替换 Debian 的基础系统源。</p>
<div class="vp-tabs">
        <input type="radio" name="group-dnrvZ" id="tab-En1lAAs" checked/>  
        <label for="tab-En1lAAs">清华大学</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://ftp.debian.org#https://mirrors.tuna.tsinghua.edu.cn#g'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">           -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://security.debian.org#https://mirrors.tuna.tsinghua.edu.cn/debian-security#g'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> \</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">           /etc/apt/sources.list</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div></div>
        <input type="radio" name="group-dnrvZ" id="tab-53inGOE" />  
        <label for="tab-53inGOE">中科大</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://ftp.debian.org#https://mirrors.ustc.edu.cn#g'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">           -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://security.debian.org#https://mirrors.ustc.edu.cn/debian-security#g'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> \</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">           /etc/apt/sources.list</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div></div>
        <input type="radio" name="group-dnrvZ" id="tab-PJqaT42" checked/>  
        <label for="tab-PJqaT42">阿里云</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://ftp.debian.org#https://mirrors.aliyun.com#g'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">           -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://security.debian.org#https://mirrors.aliyun.com/debian-security#g'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> \</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">           /etc/apt/sources.list</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div></div>
        <input type="radio" name="group-dnrvZ" id="tab-KBDTAoa" />  
        <label for="tab-KBDTAoa">华为云</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://ftp.debian.org#https://repo.huaweicloud.com#g'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">           -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://security.debian.org#https://repo.huaweicloud.com/debian-security#g'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> \</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">           /etc/apt/sources.list</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div></div></div><h2 id="ceph-源更换" tabindex="-1">CEPH 源更换 <a class="header-anchor" href="#ceph-源更换" aria-label="Permalink to &quot;CEPH 源更换&quot;">&ZeroWidthSpace;</a></h2>
<p>如果你在 PVE 中使用了 CEPH 存储，建议同步替换 CEPH 的源。通常 CEPH 源位于 <code>/etc/apt/sources.list.d/ceph.list</code>。</p>
<blockquote>
<p><strong>注意</strong>：PVE 8 (Bookworm) 对应的 CEPH 版本通常为 <code>quincy</code> 或 <code>reef</code>，而 PVE 7 (Bullseye) 对应 <code>pacific</code> 或 <code>quincy</code>。以下命令以 PVE 8 (Bookworm) + CEPH Quincy 为例，请根据实际情况调整。</p>
</blockquote>
<div class="vp-tabs">
        <input type="radio" name="group-SSTgL" id="tab-zeh3itU" checked/>  
        <label for="tab-zeh3itU">清华大学</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 请根据你的 CEPH 版本和系统代号进行调整</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/ceph-quincy $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -Po</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '^VERSION_CODENAME=\K.*' /etc/os-release) no-subscription"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/ceph.list</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "s#http://download.proxmox.com#https://mirrors.tuna.tsinghua.edu.cn/proxmox#g"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /usr/share/perl5/PVE/CLI/pveceph.pm</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div></div>
        <input type="radio" name="group-SSTgL" id="tab-93RHQbe" checked/>  
        <label for="tab-93RHQbe">中科大</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 替换 ceph.list 中的源地址</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 请根据你的 CEPH 版本（如 ceph-quincy, ceph-reef）进行调整</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -Po</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '^VERSION_CODENAME=\K.*' /etc/os-release) no-subscription"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/apt/sources.list.d/ceph.list</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 替换 pveceph 初始化工具中的下载地址（可选，用于 pveceph install 命令）</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "s#http://download.proxmox.com#https://mirrors.ustc.edu.cn/proxmox#g"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /usr/share/perl5/PVE/CLI/pveceph.pm</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div></div></div><h2 id="lxc-容器模板源更换" tabindex="-1">LXC 容器模板源更换 <a class="header-anchor" href="#lxc-容器模板源更换" aria-label="Permalink to &quot;LXC 容器模板源更换&quot;">&ZeroWidthSpace;</a></h2>
<p>PVE 的 LXC 容器模板下载器（APLInfo）也默认使用官方源。替换后可以加速 CT 模板的下载。</p>
<div class="vp-tabs">
        <input type="radio" name="group-bKEOO" id="tab-4lpDiAR" checked/>  
        <label for="tab-4lpDiAR">清华大学</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://download.proxmox.com#https://mirrors.tuna.tsinghua.edu.cn/proxmox#g'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /usr/share/perl5/PVE/APLInfo.pm</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-bKEOO" id="tab-Y3aIoAO" />  
        <label for="tab-Y3aIoAO">中科大</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's#http://download.proxmox.com#https://mirrors.ustc.edu.cn/proxmox#g'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /usr/share/perl5/PVE/APLInfo.pm</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-bKEOO" id="tab-Df62sbO" />  
        <label for="tab-Df62sbO">南京大学</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i.bak</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "s#http://download.proxmox.com#https://mirrors.nju.edu.cn/proxmox#g"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /usr/share/perl5/PVE/APLInfo.pm</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div></div><h2 id="应用更改" tabindex="-1">应用更改 <a class="header-anchor" href="#应用更改" aria-label="Permalink to &quot;应用更改&quot;">&ZeroWidthSpace;</a></h2>
<p>完成上述修改后，必须更新缓存并重启 PVE 的后台服务以使更改生效。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 更新 apt 缓存</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> update</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 重启 pvedaemon 服务 (无需重启系统)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> restart</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> pvedaemon</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>若 <code>apt update</code> 运行无报错且速度明显提升，则说明换源成功。</p>
]]></content:encoded>
            <category>PVE</category>
            <category>软件源</category>
            <category>系统维护</category>
        </item>
        <item>
            <title><![CDATA[平板触摸屏驱动适配(gslx680)]]></title>
            <link>https://foxxorcat.top/posts/z-turn/平板触摸屏驱动适配(gslx680).html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/z-turn/平板触摸屏驱动适配(gslx680).html</guid>
            <pubDate>Thu, 01 Sep 2022 17:30:52 GMT</pubDate>
            <description><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>由于 windows 太卡，索性把平板换成 manjaro 系统，导致触摸屏无法使用（虽然大概率用不到，但强迫症不舒服）</p>
<p>苦寻许久终于找到解决方案 <a href="https://github.com/onitake/gsl-firmware" target="_blank" rel="noreferrer">gsl-firmware</a></p>
]]></description>
            <content:encoded><![CDATA[<h2 id="序言" tabindex="-1">序言 <a class="header-anchor" href="#序言" aria-label="Permalink to &quot;序言&quot;">&ZeroWidthSpace;</a></h2>
<p>由于 windows 太卡，索性把平板换成 manjaro 系统，导致触摸屏无法使用（虽然大概率用不到，但强迫症不舒服）</p>
<p>苦寻许久终于找到解决方案 <a href="https://github.com/onitake/gsl-firmware" target="_blank" rel="noreferrer">gsl-firmware</a></p>
<hr>
<h2 id="设备信息" tabindex="-1">设备信息 <a class="header-anchor" href="#设备信息" aria-label="Permalink to &quot;设备信息&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>主板：H8811</li>
<li>屏幕：显示分辨率 1280x800，10.1 英寸屏幕</li>
<li>内存：DDR3 4GB</li>
<li>磁盘：eMMC 64GB</li>
<li>CPU：Intel Cherry Trail X5-Z8350 1.44GHz</li>
</ul>
<h2 id="准备驱动" tabindex="-1">准备驱动 <a class="header-anchor" href="#准备驱动" aria-label="Permalink to &quot;准备驱动&quot;">&ZeroWidthSpace;</a></h2>
<div class="info custom-block"><p class="custom-block-title">INFO</p>
<p>如果在<a href="https://github.com/onitake/gsl-firmware#device-list" target="_blank" rel="noreferrer">设备列表</a>找到相同型号可进入<a href="#安装驱动">下一步</a>。</p>
</div>
<p>从 github 拉取 gsl-firmware, 并进入工具目录</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> https://github.com/onitake/gsl-firmware.git</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gsl-firmware/tools</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><div class="info custom-block"><p class="custom-block-title">INFO</p>
<p>可能会生成多个固件文件，格式为 firmware_00.fw， firmware_01.fw… ，须要一一进行测试才能找到适合的正确文件</p>
</div>
<div class="vp-tabs">
        <input type="radio" name="group-ip6cs" id="tab-zOp5n22" checked/>  
        <label for="tab-zOp5n22">Android</label><div class="content">
        <p>安卓系统可以在 /system/vendor/modules 目录下找到 gslX680.ko 文件。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./fw_extractor</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gslX680.ko</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></div>
        <input type="radio" name="group-ip6cs" id="tab-eeNwZ3t" />  
        <label for="tab-eeNwZ3t">Windows</label><div class="content">
        <p>windows 系统可以在 C:\Windows\System32\drives 找到 SileadTouch.sys 文件或者官网下载驱动。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 通过GSL_TS_CFG.h获取</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./untscfg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> GSL_TS_CFG.h</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> firmware.fw</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 通过SileadTouch.fw获取</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./unscramble</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> SileadTouch.fw</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> firmware.fw</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 通过SileadTouch.sys获取</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./scanwindrv</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> SileadTouch.sys</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div></div></div><h2 id="安装驱动" tabindex="-1">安装驱动 <a class="header-anchor" href="#安装驱动" aria-label="Permalink to &quot;安装驱动&quot;">&ZeroWidthSpace;</a></h2>
<div class="vp-tabs">
        <input type="radio" name="group-o69ZL" id="tab-7GJXqRX" checked/>  
        <label for="tab-7GJXqRX">silead_ts</label><div class="content">
        <p>silead_ts 需要重新编译内核，这里为了方便没有编译</p>
<p>使用命令 dmesg | grep silead_ts 查看 silead_ts 模块加载日记</p>
<p>可以看到 silead_ts 模块尝试加载 (/lib/firmware/) silead/mssl1680.fw 失败， <code>error -2</code> 说明文件不存在</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">dmesg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> grep</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> silead</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># Output:</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># [    7.238457] silead_ts i2c-MSSL1680:00: supply vddio not found, using dummy regulator</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># [    7.238596] silead_ts i2c-MSSL1680:00: supply avdd not found, using dummy regulator</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># [    7.239017] silead_ts i2c-MSSL1680:00: Silead chip ID: 0x80360000</span></span>
<span class="line highlighted"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># [    7.384785] silead_ts i2c-MSSL1680:00: Direct firmware load for silead/mssl1680.fw failed with error -2</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># [    7.384802] silead_ts i2c-MSSL1680:00: Firmware request error -2</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># [    7.571823] silead_ts: probe of i2c-MSSL1680:00 failed with error -2</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p>把步骤二得到的 firmware.fw 复制到 /lib/firmware/silead 并重命名为 mssl1680.fw ，如果目录不存在需要创建目录。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mkdir</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /lib/firmware/silead</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> firmware.fw</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /lib/firmware/silead/mssl1680.fw</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>使用 modprobe 命令重新加载 silead_ts 模块</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">modprobe</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> silead</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">modprobe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> silead</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></div>
        <input type="radio" name="group-o69ZL" id="tab-evHoEIQ" />  
        <label for="tab-evHoEIQ">gslx680_ts_acpi</label><div class="content">
        <p>从 github 拉取 gslx680_ts_acpi 源码编译安装</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> https://github.com/onitake/gslx680-acpi.git</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gslx680-acpi</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">make</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">make</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># make uninstall 卸载命令</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><p>将步骤二获取的 firmware.fw 转换为特殊紧凑格式的固件，并安装该固件</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./fwtool</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -c</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> firmware.fw</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -m</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1680</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -w</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1280</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -h</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 800</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -t</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> silead_ts.fw</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> silead_ts.fw</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /lib/firmware</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># Usage: fwtool {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#   -i &#x3C;new_firmware.fw> |</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#   -x &#x3C;new_firmware.fw> &#x3C;firmware.fw> |</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#   (-c [&#x3C;firmware.fw> -1|&#x3C;GSL_TS_CFG.h> -2|&#x3C;SileadTouch.fw> -3] | -s ) [-m &#x3C;controller_model>] [-w &#x3C;width>] [-h &#x3C;height>] [-t &#x3C;num_touches>] [-f &#x3C;flags>] &#x3C;new_firmware.fw></span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># }</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -i    打印新型固件的信息</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -c    将旧的固件格式转换为新型固件格式</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -s    设置新型固件参数和标志</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -x    新型固件格式转换回旧的固件格式</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -1    Plain firmware, as used with the Android driver (默认)</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -2    Windows GSL_TS_CFG.h firmware</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -3    Scrambled Windows SileadTouch.fw firmware</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -m    设置芯片型号（4字节ASCII字符串，例如：1680）</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -w    设置宽度参数（分辨率）</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -h    设置高度参数（分辨率）</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -t    设置支持的触点数量参数</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># -f    设置标志，用逗号分隔（可选，支持的标志： xflip, yflip, swap, track）</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#           xflip 开启水平翻转</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#           yflip 开启垂直翻转</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#           swap xy轴交换</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#           track 启用手指跟踪（用于不支持的芯片）</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#          (每个标志都可以加上'no'前缀以禁用它(noxflip, noyflip, noswap, notrack))</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br></div></div><p>使用 modprobe 命令重新加载 gslx680_ts_acpi</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">modprobe</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gslx680_ts_acpi</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">modprobe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gslx680_ts_acpi</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></div></div><h2 id="遇到的问题" tabindex="-1">遇到的问题 <a class="header-anchor" href="#遇到的问题" aria-label="Permalink to &quot;遇到的问题&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>不知道什么原因，一旦屏幕旋转校准信息就会丢失</li>
<li>HOME 键无法使用</li>
</ul>
]]></content:encoded>
            <category>Linux</category>
            <category>驱动开发</category>
            <category>平板电脑</category>
            <category>折腾</category>
        </item>
        <item>
            <title><![CDATA[Markdown Test]]></title>
            <link>https://foxxorcat.top/posts/Markdown Test.html</link>
            <guid isPermaLink="false">https://foxxorcat.top/posts/Markdown Test.html</guid>
            <pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate>
            <description><![CDATA[<h2 id="描述" tabindex="-1">描述 <a class="header-anchor" href="#描述" aria-label="Permalink to &quot;描述&quot;">&ZeroWidthSpace;</a></h2>
<p>markdown-it 测试</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 命令代码预览测试</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div>]]></description>
            <content:encoded><![CDATA[<h2 id="描述" tabindex="-1">描述 <a class="header-anchor" href="#描述" aria-label="Permalink to &quot;描述&quot;">&ZeroWidthSpace;</a></h2>
<p>markdown-it 测试</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 命令代码预览测试</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><hr>
<h2 id="选项卡测试" tabindex="-1">选项卡测试 <a class="header-anchor" href="#选项卡测试" aria-label="Permalink to &quot;选项卡测试&quot;">&ZeroWidthSpace;</a></h2>
<div class="vp-tabs">
        <input type="radio" name="group-KsDHe" id="tab-JUkhikh" checked/>  
        <label for="tab-JUkhikh">sss</label><div class="content">
        <div class="vp-tabs">
        <input type="radio" name="group-8QcE9" id="tab-WLmexsQ" checked/>  
        <label for="tab-WLmexsQ">silead_ts</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">modprobe</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> silead</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">modprobe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> silead</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></div></div></div>
        <input type="radio" name="group-KsDHe" id="tab-jsw4ce_" />  
        <label for="tab-jsw4ce_">gslx680_ts_acpi</label><div class="content">
        <div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">modprobe</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gslx680_ts_acpi</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">modprobe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gslx680_ts_acpi</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></div></div><h2 id="代码块测试" tabindex="-1">代码块测试 <a class="header-anchor" href="#代码块测试" aria-label="Permalink to &quot;代码块测试&quot;">&ZeroWidthSpace;</a></h2>
<p><code>test</code></p>
<p><a> <code>testa</code> </a></p>
<h3 id="test2" tabindex="-1"><code>test2</code> <a class="header-anchor" href="#test2" aria-label="Permalink to &quot;`test2`&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark has-highlighted vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  data</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line highlighted error"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      msg: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Error"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span></span>
<span class="line highlighted warning"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      msg: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Warning"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    };</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark has-diff vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  data</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line diff remove"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      msg: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'Removed'</span></span>
<span class="line diff add"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      msg: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'Added'</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark has-focused-lines vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  data</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line has-focus"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      msg: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Focused!"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    };</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark has-highlighted vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  data</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line highlighted"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      msg: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Highlighted!"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    };</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><div class="language-ts vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line highlighted"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// line-numbers is disabled by default</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> line2</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "This is line 2"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> line3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "This is line 3"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><div class="language-ts vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line highlighted"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// line-numbers is enabled</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> line2</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'This is line 2'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> line3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'This is line 3'</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><div class="language-ts vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line highlighted"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// line-numbers is enabled and start from 2</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> line3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'This is line 3'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> line4</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'This is line 4'</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line highlighted"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// Highlighted</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  data</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line highlighted"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      msg: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`Highlighted!</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">      This line isn't highlighted,</span></span>
<span class="line highlighted"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">      but this and the next 2 are.`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line highlighted"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      motd: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'VitePress is awesome'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line highlighted"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      lorem: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'ipsum'</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br></div></div><h2 id="提示测试" tabindex="-1">提示测试 <a class="header-anchor" href="#提示测试" aria-label="Permalink to &quot;提示测试&quot;">&ZeroWidthSpace;</a></h2>
<div class="info custom-block"><p class="custom-block-title">INFO</p>
<p>This is an info box.</p>
</div>
<div class="tip custom-block"><p class="custom-block-title">TIP</p>
<p>This is a tip.</p>
</div>
<div class="warning custom-block"><p class="custom-block-title">WARNING</p>
<p>This is a warning.</p>
</div>
<div class="danger custom-block"><p class="custom-block-title">DANGER</p>
<p>This is a dangerous warning.</p>
</div>
<details class="details custom-block"><summary>Details</summary>
<p>This is a details block.</p>
</details>
<h2 id="数学公式" tabindex="-1">数学公式 <a class="header-anchor" href="#数学公式" aria-label="Permalink to &quot;数学公式&quot;">&ZeroWidthSpace;</a></h2>
<p>When <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.486ex;" xmlns="http://www.w3.org/2000/svg" width="5.345ex" height="2.106ex" role="img" focusable="false" viewBox="0 -716 2362.6 931" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(806.8,0)"><path data-c="2260" d="M166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183L306 133H70Q56 140 56 153Q56 168 72 173H327L406 327H72Q56 332 56 347Q56 360 70 367H426Q597 702 602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 692 471 367H707Q722 359 722 347Q722 336 708 328L451 327L371 173H708Q722 163 722 153Q722 140 707 133H351Q175 -210 170 -212Q166 -215 159 -215Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1862.6,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>a</mi><mo>≠</mo><mn>0</mn></math></mjx-assistive-mml></mjx-container>, there are two solutions to <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="18.163ex" height="2.452ex" role="img" focusable="false" viewBox="0 -833.9 8028 1083.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(389,0)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(918,0)"><g data-mml-node="mi"><path data-c="1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(605,363) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2148.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3149,0)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3578,0)"><path data-c="1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4372.2,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(5372.4,0)"><path data-c="1D450" d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6083.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(7139,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(7639,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><mi>a</mi><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mi>b</mi><mi>x</mi><mo>+</mo><mi>c</mi><mo>=</mo><mn>0</mn><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> and they are</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -1.575ex;" xmlns="http://www.w3.org/2000/svg" width="20.765ex" height="5.291ex" role="img" focusable="false" viewBox="0 -1642.5 9178 2338.5" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(849.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(1905.6,0)"><g data-mml-node="mfrac"><g data-mml-node="mrow" transform="translate(220,676)"><g data-mml-node="mo"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(778,0)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1429.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z" style="stroke-width: 3;"/></g><g data-mml-node="msqrt" transform="translate(2429.4,0)"><g transform="translate(853,0)"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(462,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1087.8,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2088,0)"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2588,0)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3117,0)"><path data-c="1D450" d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(0,106.5)"><path data-c="221A" d="M95 178Q89 178 81 186T72 200T103 230T169 280T207 309Q209 311 212 311H213Q219 311 227 294T281 177Q300 134 312 108L397 -77Q398 -77 501 136T707 565T814 786Q820 800 834 800Q841 800 846 794T853 782V776L620 293L385 -193Q381 -200 366 -200Q357 -200 354 -197Q352 -195 256 15L160 225L144 214Q129 202 113 190T95 178Z" style="stroke-width: 3;"/></g><rect width="3550" height="60" x="853" y="846.5"/></g></g><g data-mml-node="mrow" transform="translate(3121.7,-686)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g><rect width="7032.4" height="60" x="120" y="220"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mi>x</mi><mo>=</mo><mrow data-mjx-texclass="ORD"><mfrac><mrow><mo>−</mo><mi>b</mi><mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>−</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></mrow></math></mjx-assistive-mml></mjx-container><p><strong>Maxwell's equations:</strong></p>
<table tabindex="0">
<thead>
<tr>
<th>equation</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td><mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="9.518ex" height="2.649ex" role="img" focusable="false" viewBox="0 -1089 4207 1171" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1055.2,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(1555.4,0)"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D401" d="M720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(409,275) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(2651.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3707,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">∇</mi><mo>⋅</mo><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">B</mi></mrow><mo stretchy="false">→</mo></mover></mrow><mo>=</mo><mn>0</mn></math></mjx-assistive-mml></mjx-container></td>
<td>divergence of <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.851ex" height="2.464ex" role="img" focusable="false" viewBox="0 -1089 818 1089" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D401" d="M720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(409,275) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">B</mi></mrow><mo stretchy="false">→</mo></mover></mrow></math></mjx-assistive-mml></mjx-container> is zero</td>
</tr>
<tr>
<td><mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.817ex;" xmlns="http://www.w3.org/2000/svg" width="19.583ex" height="3.451ex" role="img" focusable="false" viewBox="0 -1164 8655.6 1525.2" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1055.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2055.4,0)"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D404" d="M723 286Q721 284 700 145T677 3V0H39V62H147V618H39V680H660V676Q662 670 675 552T691 428V424H629V428Q629 429 627 448T618 494T601 541Q574 593 527 605T382 618H374H304V384H336Q338 384 347 384T361 384T376 386T392 390T407 397T421 407T432 423Q442 444 443 482V501H505V205H443V224Q442 258 435 278T411 307T380 318T336 322H304V62H375H394Q429 62 449 62T497 66T541 76T577 95T609 126T632 170T651 232Q661 287 661 289H723V286Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(378,269) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mstyle" transform="translate(2811.4,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mo" transform="translate(3200.7,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(3978.7,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mfrac" transform="translate(4367.9,0)"><g data-mml-node="mn" transform="translate(220,394) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(243.7,-345) scale(0.707)"><path data-c="1D450" d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" style="stroke-width: 3;"/></g><rect width="553.6" height="60" x="120" y="220"/></g><g data-mml-node="mstyle" transform="translate(5161.4,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mfrac" transform="translate(5328.4,0)"><g data-mml-node="mrow" transform="translate(220,394) scale(0.707)"><g data-mml-node="mi"><path data-c="1D715" d="M202 508Q179 508 169 520T158 547Q158 557 164 577T185 624T230 675T301 710L333 715H345Q378 715 384 714Q447 703 489 661T549 568T566 457Q566 362 519 240T402 53Q321 -22 223 -22Q123 -22 73 56Q42 102 42 148V159Q42 276 129 370T322 465Q383 465 414 434T455 367L458 378Q478 461 478 515Q478 603 437 639T344 676Q266 676 223 612Q264 606 264 572Q264 547 246 528T202 508ZM430 306Q430 372 401 400T333 428Q270 428 222 382Q197 354 183 323T150 221Q132 149 132 116Q132 21 232 21Q244 21 250 22Q327 35 374 112Q389 137 409 196T430 306Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(566,0)"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D401" d="M720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(409,275) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g></g><g data-mml-node="mrow" transform="translate(381.6,-345.6) scale(0.707)"><g data-mml-node="mi"><path data-c="1D715" d="M202 508Q179 508 169 520T158 547Q158 557 164 577T185 624T230 675T301 710L333 715H345Q378 715 384 714Q447 703 489 661T549 568T566 457Q566 362 519 240T402 53Q321 -22 223 -22Q123 -22 73 56Q42 102 42 148V159Q42 276 129 370T322 465Q383 465 414 434T455 367L458 378Q478 461 478 515Q478 603 437 639T344 676Q266 676 223 612Q264 606 264 572Q264 547 246 528T202 508ZM430 306Q430 372 401 400T333 428Q270 428 222 382Q197 354 183 323T150 221Q132 149 132 116Q132 21 232 21Q244 21 250 22Q327 35 374 112Q389 137 409 196T430 306Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(566,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g><rect width="1178.6" height="60" x="120" y="220"/></g><g data-mml-node="mo" transform="translate(7024.9,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(8080.6,0)"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mn"><path data-c="1D7CE" d="M266 654H280H282Q500 654 524 418Q529 370 529 320Q529 125 456 52Q397 -10 287 -10Q110 -10 63 154Q45 212 45 316Q45 504 113 585Q140 618 185 636T266 654ZM374 548Q347 604 286 604Q247 604 218 575Q197 552 193 511T188 311Q188 159 196 116Q202 87 225 64T287 41Q339 41 367 87Q379 107 382 152T386 329Q386 518 374 548Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(287.5,243) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">∇</mi><mo>×</mo><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">E</mi></mrow><mo stretchy="false">→</mo></mover></mrow><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mo>+</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mfrac><mn>1</mn><mi>c</mi></mfrac><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mfrac><mrow><mi>∂</mi><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">B</mi></mrow><mo stretchy="false">→</mo></mover></mrow></mrow><mrow><mi>∂</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mn mathvariant="bold">0</mn></mrow><mo stretchy="false">→</mo></mover></mrow></math></mjx-assistive-mml></mjx-container></td>
<td>curl of <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.71ex" height="2.45ex" role="img" focusable="false" viewBox="0 -1083 756 1083" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D404" d="M723 286Q721 284 700 145T677 3V0H39V62H147V618H39V680H660V676Q662 670 675 552T691 428V424H629V428Q629 429 627 448T618 494T601 541Q574 593 527 605T382 618H374H304V384H336Q338 384 347 384T361 384T376 386T392 390T407 397T421 407T432 423Q442 444 443 482V501H505V205H443V224Q442 258 435 278T411 307T380 318T336 322H304V62H375H394Q429 62 449 62T497 66T541 76T577 95T609 126T632 170T651 232Q661 287 661 289H723V286Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(378,269) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">E</mi></mrow><mo stretchy="false">→</mo></mover></mrow></math></mjx-assistive-mml></mjx-container> is proportional to the rate of change of <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.851ex" height="2.464ex" role="img" focusable="false" viewBox="0 -1089 818 1089" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D401" d="M720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(409,275) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">B</mi></mrow><mo stretchy="false">→</mo></mover></mrow></math></mjx-assistive-mml></mjx-container></td>
</tr>
<tr>
<td><mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.817ex;" xmlns="http://www.w3.org/2000/svg" width="33.284ex" height="3.441ex" role="img" focusable="false" viewBox="0 -1159.8 14711.4 1520.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1055.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2055.4,0)"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D401" d="M720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(409,275) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(3095.7,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(3873.7,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mfrac" transform="translate(4262.9,0)"><g data-mml-node="mn" transform="translate(220,394) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(243.7,-345) scale(0.707)"><path data-c="1D450" d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" style="stroke-width: 3;"/></g><rect width="553.6" height="60" x="120" y="220"/></g><g data-mml-node="mstyle" transform="translate(5056.4,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mfrac" transform="translate(5223.4,0)"><g data-mml-node="mrow" transform="translate(220,394) scale(0.707)"><g data-mml-node="mi"><path data-c="1D715" d="M202 508Q179 508 169 520T158 547Q158 557 164 577T185 624T230 675T301 710L333 715H345Q378 715 384 714Q447 703 489 661T549 568T566 457Q566 362 519 240T402 53Q321 -22 223 -22Q123 -22 73 56Q42 102 42 148V159Q42 276 129 370T322 465Q383 465 414 434T455 367L458 378Q478 461 478 515Q478 603 437 639T344 676Q266 676 223 612Q264 606 264 572Q264 547 246 528T202 508ZM430 306Q430 372 401 400T333 428Q270 428 222 382Q197 354 183 323T150 221Q132 149 132 116Q132 21 232 21Q244 21 250 22Q327 35 374 112Q389 137 409 196T430 306Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(566,0)"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D404" d="M723 286Q721 284 700 145T677 3V0H39V62H147V618H39V680H660V676Q662 670 675 552T691 428V424H629V428Q629 429 627 448T618 494T601 541Q574 593 527 605T382 618H374H304V384H336Q338 384 347 384T361 384T376 386T392 390T407 397T421 407T432 423Q442 444 443 482V501H505V205H443V224Q442 258 435 278T411 307T380 318T336 322H304V62H375H394Q429 62 449 62T497 66T541 76T577 95T609 126T632 170T651 232Q661 287 661 289H723V286Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(378,269) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g></g><g data-mml-node="mrow" transform="translate(359.7,-345.6) scale(0.707)"><g data-mml-node="mi"><path data-c="1D715" d="M202 508Q179 508 169 520T158 547Q158 557 164 577T185 624T230 675T301 710L333 715H345Q378 715 384 714Q447 703 489 661T549 568T566 457Q566 362 519 240T402 53Q321 -22 223 -22Q123 -22 73 56Q42 102 42 148V159Q42 276 129 370T322 465Q383 465 414 434T455 367L458 378Q478 461 478 515Q478 603 437 639T344 676Q266 676 223 612Q264 606 264 572Q264 547 246 528T202 508ZM430 306Q430 372 401 400T333 428Q270 428 222 382Q197 354 183 323T150 221Q132 149 132 116Q132 21 232 21Q244 21 250 22Q327 35 374 112Q389 137 409 196T430 306Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(566,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g><rect width="1134.8" height="60" x="120" y="220"/></g><g data-mml-node="mo" transform="translate(6876,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(7931.8,0)"><g data-mml-node="mrow" transform="translate(220,394) scale(0.707)"><g data-mml-node="mn"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(445.2,-345) scale(0.707)"><path data-c="1D450" d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" style="stroke-width: 3;"/></g><rect width="956.6" height="60" x="120" y="220"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(9128.4,0)"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D423" d="M104 610Q104 649 130 672T191 695Q225 693 249 670T273 610Q273 572 249 549T189 525Q152 525 128 548T104 610ZM78 442L173 446L268 450H274V196Q274 -5 274 -37T269 -83Q256 -132 201 -166T71 -200Q10 -200 -30 -173T-71 -102Q-71 -70 -51 -51T-1 -31Q27 -31 48 -49T69 -100Q69 -121 53 -147H56Q66 -149 77 -149H80Q90 -149 100 -146T127 -125T149 -73Q151 -55 151 149V362Q150 364 148 366T145 370T142 373T138 375T133 377T124 378T113 379T97 380H75V442H78Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(175.5,284) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mi" transform="translate(9479.4,0)"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(10534.6,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(11034.8,0)"><g data-mml-node="mover"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D404" d="M723 286Q721 284 700 145T677 3V0H39V62H147V618H39V680H660V676Q662 670 675 552T691 428V424H629V428Q629 429 627 448T618 494T601 541Q574 593 527 605T382 618H374H304V384H336Q338 384 347 384T361 384T376 386T392 390T407 397T421 407T432 423Q442 444 443 482V501H505V205H443V224Q442 258 435 278T411 307T380 318T336 322H304V62H375H394Q429 62 449 62T497 66T541 76T577 95T609 126T632 170T651 232Q661 287 661 289H723V286Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(378,269) translate(-250 0)"><path data-c="20D7" d="M377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(12068.6,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(13124.4,0)"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(13624.4,0)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(14194.4,0)"><path data-c="1D70C" d="M58 -216Q25 -216 23 -186Q23 -176 73 26T127 234Q143 289 182 341Q252 427 341 441Q343 441 349 441T359 442Q432 442 471 394T510 276Q510 219 486 165T425 74T345 13T266 -10H255H248Q197 -10 165 35L160 41L133 -71Q108 -168 104 -181T92 -202Q76 -216 58 -216ZM424 322Q424 359 407 382T357 405Q322 405 287 376T231 300Q217 269 193 170L176 102Q193 26 260 26Q298 26 334 62Q367 92 389 158T418 266T424 322Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">∇</mi><mo>×</mo><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">B</mi></mrow><mo stretchy="false">→</mo></mover></mrow><mo>−</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mfrac><mn>1</mn><mi>c</mi></mfrac><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mfrac><mrow><mi>∂</mi><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">E</mi></mrow><mo stretchy="false">→</mo></mover></mrow></mrow><mrow><mi>∂</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><mn>4</mn><mi>π</mi></mrow><mi>c</mi></mfrac><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">j</mi></mrow><mo stretchy="false">→</mo></mover></mrow><mi mathvariant="normal">∇</mi><mo>⋅</mo><mrow data-mjx-texclass="ORD"><mover><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">E</mi></mrow><mo stretchy="false">→</mo></mover></mrow><mo>=</mo><mn>4</mn><mi>π</mi><mi>ρ</mi></math></mjx-assistive-mml></mjx-container></td>
<td><em>wha?</em></td>
</tr>
</tbody>
</table>
<h2 id="列表样式" tabindex="-1">列表样式 <a class="header-anchor" href="#列表样式" aria-label="Permalink to &quot;列表样式&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ol>
<li>1</li>
<li>2</li>
<li>3</li>
</ol>
<h3 id="_2-9-分割线" tabindex="-1">2.9 分割线 <a class="header-anchor" href="#_2-9-分割线" aria-label="Permalink to &quot;2.9 分割线&quot;">&ZeroWidthSpace;</a></h3>
<p>可以在一行中用三个以上的减号来建立一个分隔线，同时需要在分隔线的上面空一行。如下：</p>
<hr>
<p>脚注 1 链接<sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1" /></sup>。</p>
<p>脚注 2 链接<sup class="footnote-ref"><a href="#footnote2">[2]</a><a class="footnote-anchor" id="footnote-ref2" /></sup>。</p>
<p>行内的脚注<sup class="footnote-ref"><a href="#footnote3">[3]</a><a class="footnote-anchor" id="footnote-ref3" /></sup> 定义。</p>
<p>重复的页脚定义<sup class="footnote-ref"><a href="#footnote2">[2:1]</a><a class="footnote-anchor" id="footnote-ref2:1" /></sup>。</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="footnote1" class="footnote-item"><p>脚注 <strong>可以包含特殊标记</strong></p>
<p>也可以由多个段落组成 <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote2" class="footnote-item"><p>脚注文字。 <a href="#footnote-ref2" class="footnote-backref">↩︎</a> <a href="#footnote-ref2:1" class="footnote-backref">↩︎</a></p>
</li>
<li id="footnote3" class="footnote-item"><p>行内脚注文本 <a href="#footnote-ref3" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>Markdown</category>
            <category>测试</category>
            <category>演示</category>
        </item>
    </channel>
</rss>