<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>ZHLHZHU</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://www.zhlhzhu.com/</id>
  <link href="https://www.zhlhzhu.com/" rel="alternate"/>
  <link href="https://www.zhlhzhu.com/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, ZHLHZHU</rights>
  <subtitle>ZHLHZHU 的技术博客 - 网络设备、嵌入式、DIY 折腾记录</subtitle>
  <title>ZHLHZHU</title>
  <updated>2026-06-01T08:34:37.973Z</updated>
  <entry>
    <author>
      <name>ZHLHZHU</name>
    </author>
    <category term="折腾" scheme="https://www.zhlhzhu.com/categories/%E6%8A%98%E8%85%BE/"/>
    <category term="es3" scheme="https://www.zhlhzhu.com/tags/es3/"/>
    <category term="人体传感器" scheme="https://www.zhlhzhu.com/tags/%E4%BA%BA%E4%BD%93%E4%BC%A0%E6%84%9F%E5%99%A8/"/>
    <category term="维修" scheme="https://www.zhlhzhu.com/tags/%E7%BB%B4%E4%BF%AE/"/>
    <content>
      <![CDATA[<p><img src="/2026/05/31/fix-linptech-es3/es3.webp" alt="es3"><br>在浴室里面兢兢业业工作了一年的es3突然断联，以为是老问题没电了，给他换了个新的电池。<br>但这次它没有活过来，按了重置按钮也没有反应。另外我注意到纽扣电池有点微微发热，我知道应该是es3寄了。😅<br>因为保修期已经过期了，所以我决定自己维修。</p><span id="more"></span><h2 id="拆解-主板结构"><a href="#拆解-主板结构" class="headerlink" title="拆解 &amp; 主板结构"></a>拆解 &amp; 主板结构</h2><p>从电池仓侧边防水胶圈处撬开<br><img src="/2026/05/31/fix-linptech-es3/disassembly.jpg" alt="es3拆解"></p><p>拆开后能看到PCB背面，有一些电容和测试点（这里能看到一些水印渍，怀疑进水了？毕竟在浴室里）<br><img src="/2026/05/31/fix-linptech-es3/crack-it.jpg" alt="es3主板背面"></p><p>继续撬，将整个主板取出来，整体两层结构，雷达模块堆叠到主板上，通过针脚连接。<br><img src="/2026/05/31/fix-linptech-es3/pcb.jpg" alt="es3主板"></p><p><img src="/2026/05/31/fix-linptech-es3/stack-up-pcb.jpg" alt="堆叠结构"></p><h2 id="定位-维修"><a href="#定位-维修" class="headerlink" title="定位 &amp; 维修"></a>定位 &amp; 维修</h2><p>用可调电源给es3供电，好家伙，直接短路了。<br><img src="/2026/05/31/fix-linptech-es3/short-circuit.jpg" alt="es3短路"></p><p>那直接烧个机吧，配合红外热成像仪，定位到短路点。<br><img src="/2026/05/31/fix-linptech-es3/short-circuit-point.jpg" alt="es3短路点"></p><p>发热点指向一个MLCC电容，用万用表打一下阻值，只有2Ω<br><img src="/2026/05/31/fix-linptech-es3/short-circuit-point-cap.jpg" alt="es3短路点电容"></p><p>电烙铁直接把电容淦下来，再测了一下焊盘，电阻值恢复了<br>那上个电？<br><img src="/2026/05/31/fix-linptech-es3/is-alive.jpg" alt="es3上电"></p><p>ok 恢复了。但是并不知道原来电容是多大的，看他在电源正极附近，姑且认为他是旁路电容吧，补一个100nF的电容，没找到相同封装的，堆了一坨锡🤣<br><img src="/2026/05/31/fix-linptech-es3/replace-cap.jpg" alt="es3旁路电容"></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>总之就是一颗电容短路把整个机器干趴下了，拆掉之后就恢复了。<br>至于补上的这个 100nF 到底是不是原厂同款，我也不确定，只能说它现在确实能正常工作，先用着再观察吧。</p><p>跟 AI 聊了一下，应该是 MLCC 经典的失效场景：<br>MLCC 表面或内部因为机械应力或热冲击产生了微裂纹，在潮湿环境中形成电解池，导致阴极金属长出枝晶延伸到阳极，最终发生短路。</p>]]>
    </content>
    <id>https://www.zhlhzhu.com/2026/05/31/fix-linptech-es3/</id>
    <link href="https://www.zhlhzhu.com/2026/05/31/fix-linptech-es3/"/>
    <published>2026-05-31T17:31:46.000Z</published>
    <summary>
      <![CDATA[<p><img src="/2026/05/31/fix-linptech-es3/es3.webp" alt="es3"><br>在浴室里面兢兢业业工作了一年的es3突然断联，以为是老问题没电了，给他换了个新的电池。<br>但这次它没有活过来，按了重置按钮也没有反应。另外我注意到纽扣电池有点微微发热，我知道应该是es3寄了。😅<br>因为保修期已经过期了，所以我决定自己维修。</p>]]>
    </summary>
    <title>领普 ES3 人体传感器维修记录</title>
    <updated>2026-06-01T08:34:37.973Z</updated>
  </entry>
  <entry>
    <author>
      <name>ZHLHZHU</name>
    </author>
    <category term="折腾" scheme="https://www.zhlhzhu.com/categories/%E6%8A%98%E8%85%BE/"/>
    <category term="WOL" scheme="https://www.zhlhzhu.com/tags/WOL/"/>
    <category term="ESP8266" scheme="https://www.zhlhzhu.com/tags/ESP8266/"/>
    <category term="MQTT" scheme="https://www.zhlhzhu.com/tags/MQTT/"/>
    <category term="DIY" scheme="https://www.zhlhzhu.com/tags/DIY/"/>
    <content>
      <![CDATA[<p>当你不在家，却想要给家里的电脑开机，你有以下几个方案：</p><h3 id="让家里人帮忙"><a href="#让家里人帮忙" class="headerlink" title="让家里人帮忙"></a>让家里人帮忙</h3><p>优点：可靠，有即时的反馈告诉你电脑状态<br>缺点：你得确保你家里有人，独居的朋友忽略这条</p><h3 id="智能插座-上电自启"><a href="#智能插座-上电自启" class="headerlink" title="智能插座+上电自启"></a>智能插座+上电自启</h3><p>在bios里面设置好上电启动，当智能插座打开的时候电脑就自动开机了。不需要靠别人，自己随时能控制<br>不足之处是无法直接唤醒系统S3睡眠。另外还得额外用个智能插座来实现</p><h3 id="开机棒"><a href="#开机棒" class="headerlink" title="开机棒"></a>开机棒</h3><p>开机棒就是用一个MCU去控制你电脑的开机跳线，给MCU发送指令后导通主板跳线，机器开机。相当于帮你按了开机键<br><img src="/2021/12/20/how-to-boot-elegantly/Wakener_taobao-f7913ed00d404a2f80ca56a0aff59684.png" alt="Wakener_taobao"><br>缺点就是对电脑有侵入修改，如果你有多台电脑就要准备多个开机棒</p><h3 id="局域网唤醒（Wake-on-LAN-WOL）"><a href="#局域网唤醒（Wake-on-LAN-WOL）" class="headerlink" title="局域网唤醒（Wake-on-LAN&#x2F;WOL）"></a>局域网唤醒（Wake-on-LAN&#x2F;WOL）</h3><p>优点：可以自己控制，可以直接唤醒S3状态下的电脑，设备数量不限，只要在同一个广播域，都能唤醒<br>缺点：得在目标电脑广播域中有一个可以发唤醒包的设备，可以是路由器，旧手机，树莓派等等。。。</p><p>综合起来看，WOL的方案比较合适。因此某天跟某位不愿透露姓名的<a href="http://www.swingfrog.com/">SwingFrog</a>聊天的时候突发奇想，不如做一个小模块来实现WOL</p><span id="more"></span><h2 id="WOL原理"><a href="#WOL原理" class="headerlink" title="WOL原理"></a>WOL原理</h2><p>如果在BIOS中打开了WOL功能，电脑处于关闭或者休眠状态时，有线网卡仍然保持供电，网卡会监听网络的广播信息，如果发现广播的数据包为Magic Packet，并且指定的MAC地址为本机时，网卡将通知电脑开始启动。</p><h3 id="Magic-Packet介绍"><a href="#Magic-Packet介绍" class="headerlink" title="Magic Packet介绍"></a>Magic Packet介绍</h3><p>WOL唤醒数据包称为魔法数据包（Magic Packet），是一个广播帧，一般使用无状态的传输协议（如UDP），通过7或者9端口进行广播</p><h3 id="Magic-Packet的格式"><a href="#Magic-Packet的格式" class="headerlink" title="Magic Packet的格式"></a>Magic Packet的格式</h3><p>魔法数据包的格式很简单：</p><table><thead><tr><th align="center">Synchronization Stream</th><th align="center">Target MAC</th><th align="center">Password (optional)</th></tr></thead><tbody><tr><td align="center">6</td><td align="center">96</td><td align="center">0,4 or 6</td></tr></tbody></table><p>开头是6个字节的0xFF，<br>紧接着是需要唤醒主机MAC地址，重复写16次，96个字节，<br>最后的密码是可选项，如果配置了就只能是4或者6个字节。如果为4字节密码，将会解析为IP地址，如果为6字节密码，将会解析为MAC地址。</p><h2 id="设计"><a href="#设计" class="headerlink" title="设计"></a>设计</h2><p>设计一个唤醒器，需要实现三个功能</p><ul><li>连上网络</li><li>接受外部指令</li><li>在内网中广播魔法数据包<br>对应的，构思出整体结构：<br><img src="/2021/12/20/how-to-boot-elegantly/WakenerArch-91d8a1420a7c42cfa2f0e353ec3766b8.png" alt="WakenerArch"><br>使用烂大街又好用又实惠的ESP8266作为主控，连上WIFI，订阅MQTT Topic，收到指令后通过wifi向局域网广播魔法唤醒包。</li></ul><h3 id="PCB"><a href="#PCB" class="headerlink" title="PCB"></a>PCB</h3><p>简单做一个USB供电的驱动电路，再加一个拨码开关，用于切换配置模式和正常工作模式。<br>BOM表如下</p><table><thead><tr><th>Comment</th><th>Designator</th><th>Footprint</th><th>Quantity</th></tr></thead><tbody><tr><td>SW_DIP_x01</td><td>SW1,</td><td>SW_SMT_1P</td><td>1</td></tr><tr><td>10uF</td><td>C1,C2,</td><td>C_0603_1608Metric</td><td>2</td></tr><tr><td>10K</td><td>R1,R2,R3,</td><td>R_0603_1608Metric</td><td>3</td></tr><tr><td>RT9013-33GB</td><td>U1,</td><td>SOT-23-5_HandSoldering</td><td>1</td></tr><tr><td>USB_A</td><td>J1,</td><td>USB_A_CNCTech_1001-011-01101_Horizontal</td><td>1</td></tr><tr><td>ESP-12F</td><td>U2,</td><td>ESP-12E</td><td>1</td></tr></tbody></table><p>Schematic:<br><img src="WakenerSchematic-917d054b2f4c414abc2426c3eb190a5e.png" width="600" alt=""></p><p>成品做出来是这样的：<br><img src="WakenerPhysical-30844f584c894543b8f7d71a845a811e.jpg" width="450" alt=""></p><h3 id="软件部分"><a href="#软件部分" class="headerlink" title="软件部分"></a>软件部分</h3><p>给唤醒器设计了两种工作模式，当上电时候MCU检测拨码开关拨到ON，将会进入配置模式。<br>配置模式会开启AP，使用其他设备连接上去可以进行配置</p><p>上电时拨码开关关闭时，将进入工作模式，MCU会连接WiFi、链接MQTT服务器、订阅MQTT topic<br>唤醒指令发下后，唤醒器将会在局域网中广播<br><img src="WakenerPacket-9bfb1b23e31b4c9e8bbe2a31ba529a71.png" width="600" alt=""></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>小小东西鸽了好久，还是太菜了。另外可以加个mos管，引出两个针脚，就可以实现开机棒的功能。<br>本项目的PCB和源码都托管在GitHub上：<br><a href="https://github.com/ZHLHZHU/ESPWakener">https://github.com/ZHLHZHU/ESPWakener</a></p>]]>
    </content>
    <id>https://www.zhlhzhu.com/2021/12/20/how-to-boot-elegantly/</id>
    <link href="https://www.zhlhzhu.com/2021/12/20/how-to-boot-elegantly/"/>
    <published>2021-12-20T08:26:00.000Z</published>
    <summary>
      <![CDATA[<p>当你不在家，却想要给家里的电脑开机，你有以下几个方案：</p>
<h3 id="让家里人帮忙"><a href="#让家里人帮忙" class="headerlink" title="让家里人帮忙"></a>让家里人帮忙</h3><p>优点：可靠，有即时的反馈告诉你电脑状态<br>缺点：你得确保你家里有人，独居的朋友忽略这条</p>
<h3 id="智能插座-上电自启"><a href="#智能插座-上电自启" class="headerlink" title="智能插座+上电自启"></a>智能插座+上电自启</h3><p>在bios里面设置好上电启动，当智能插座打开的时候电脑就自动开机了。不需要靠别人，自己随时能控制<br>不足之处是无法直接唤醒系统S3睡眠。另外还得额外用个智能插座来实现</p>
<h3 id="开机棒"><a href="#开机棒" class="headerlink" title="开机棒"></a>开机棒</h3><p>开机棒就是用一个MCU去控制你电脑的开机跳线，给MCU发送指令后导通主板跳线，机器开机。相当于帮你按了开机键<br><img src="/2021/12/20/how-to-boot-elegantly/Wakener_taobao-f7913ed00d404a2f80ca56a0aff59684.png" alt="Wakener_taobao"><br>缺点就是对电脑有侵入修改，如果你有多台电脑就要准备多个开机棒</p>
<h3 id="局域网唤醒（Wake-on-LAN-WOL）"><a href="#局域网唤醒（Wake-on-LAN-WOL）" class="headerlink" title="局域网唤醒（Wake-on-LAN&#x2F;WOL）"></a>局域网唤醒（Wake-on-LAN&#x2F;WOL）</h3><p>优点：可以自己控制，可以直接唤醒S3状态下的电脑，设备数量不限，只要在同一个广播域，都能唤醒<br>缺点：得在目标电脑广播域中有一个可以发唤醒包的设备，可以是路由器，旧手机，树莓派等等。。。</p>
<p>综合起来看，WOL的方案比较合适。因此某天跟某位不愿透露姓名的<a href="http://www.swingfrog.com/">SwingFrog</a>聊天的时候突发奇想，不如做一个小模块来实现WOL</p>]]>
    </summary>
    <title>如何优雅地开机</title>
    <updated>2026-06-01T08:34:38.040Z</updated>
  </entry>
  <entry>
    <author>
      <name>ZHLHZHU</name>
    </author>
    <category term="网络" scheme="https://www.zhlhzhu.com/categories/%E7%BD%91%E7%BB%9C/"/>
    <category term="PPPoE" scheme="https://www.zhlhzhu.com/tags/PPPoE/"/>
    <category term="宽带" scheme="https://www.zhlhzhu.com/tags/%E5%AE%BD%E5%B8%A6/"/>
    <category term="路由器" scheme="https://www.zhlhzhu.com/tags/%E8%B7%AF%E7%94%B1%E5%99%A8/"/>
    <category term="抓包" scheme="https://www.zhlhzhu.com/tags/%E6%8A%93%E5%8C%85/"/>
    <content>
      <![CDATA[<p>现在某些路由器有从旧路由器自动学习宽带账户密码功能，<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/RoutePPPoeExample-598850f7aa1547d38a584cc7e57c9788.jpeg" alt="哇为路由截图.jpeg"></p><p>目前大部分宽带拨号使用的PPP认证类型还是基于明文的PAP验证，只要伪装成PPPoE服务器，完成握手过程，就能获得路由器上的宽带账户与密码。</p><span id="more"></span><h2 id="PPPoE"><a href="#PPPoE" class="headerlink" title="PPPoE"></a>PPPoE</h2><p>PPPoE是在以太网中实现PPP的数据链路层协议，数据帧结构如图<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/PPPoEFrame-2380be13aea34d3fb24e9e736614cab7.jpg" alt="PPPoE帧.jpg"></p><ul><li>Len&#x2F;Type字段标识PPPoE的连接阶段</li><li>Ver字段恒为0x01</li><li>Type字段恒为0x01</li><li>Code字段表明帧的类型</li><li>SessionID字段标识当前会话，由服务端在PADS阶段生成</li><li>Length字段表明接下来Payload的长度</li><li>Payload在发现阶段携带额外数据，比如服务器名；在PPP会话携带PPP内容</li></ul><h2 id="PPPoE发现阶段"><a href="#PPPoE发现阶段" class="headerlink" title="PPPoE发现阶段"></a>PPPoE发现阶段</h2><h3 id="PADI"><a href="#PADI" class="headerlink" title="PADI"></a>PADI</h3><p>当路由器上电后，路由器会以一定的间隔广播PADI包<br>code为0x09,Session ID为0x00<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/PADI-034dccddeafc4cc89eac1e5d976510d6.png" alt="PADI.png"></p><h3 id="PADO"><a href="#PADO" class="headerlink" title="PADO"></a>PADO</h3><p>服务器接受到广播包后，获得路由器MAC地址，并向路由器发送PADO包<br>code为0x07,Session ID为0x00<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/PADO-0c24ea925afd4d18acc8f099a1639f9a.png" alt="PADO.png"></p><h3 id="PADR"><a href="#PADR" class="headerlink" title="PADR"></a>PADR</h3><p>路由器接受到来自服务器的PADO后，获得服务器MAC地址，并向服务器发送PADR包<br>code为0x19,Session ID为0x00<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/PADR-a7e505aa97c84a919d4ad089b5e91ac8.png" alt="PADR.png"></p><h3 id="PADS"><a href="#PADS" class="headerlink" title="PADS"></a>PADS</h3><p>服务器收到PADR后，随机生成一个Session ID,放入PADS包发给路由器<br>code为0x65,Session ID为随机生成数字<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/PADS-1448f115ffef4df1a6771e09e56cc04b.png" alt="PADS.png"></p><p><strong>到此PPPoE发现阶段结束</strong></p><h2 id="PPPoE会话阶段"><a href="#PPPoE会话阶段" class="headerlink" title="PPPoE会话阶段"></a>PPPoE会话阶段</h2><h2 id="LCP-Configuration-Request"><a href="#LCP-Configuration-Request" class="headerlink" title="LCP Configuration Request"></a>LCP Configuration Request</h2><p>告知对方最大接收单元（MRU）,认证协议，一个标识连接的MagicNumber<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/LCPConfReq-abd9600f5751406eb4f170711b10c0f0.png" alt="LCPCR.png"></p><h2 id="LCP-Configuration-Ack"><a href="#LCP-Configuration-Ack" class="headerlink" title="LCP Configuration Ack"></a>LCP Configuration Ack</h2><p>表示支持对方的认证协议，返回的Options应该与对方发过来的一致<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/LCPConfAck-018ea2a731d84456b46c0e3d417ecb6e.png" alt="LCPACK.png"></p><h2 id="PAP-Authentication-Protocol"><a href="#PAP-Authentication-Protocol" class="headerlink" title="PAP Authentication Protocol"></a>PAP Authentication Protocol</h2><h3 id="Authentication-Request"><a href="#Authentication-Request" class="headerlink" title="Authentication-Request"></a>Authentication-Request</h3><p>此报文将会明文携带拨号账户与密码，在Peer-ID和Password字段中提取即可<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/AuthReq-249aa1155c2a41e3bd9f2d860f1f7d95.png" alt="PAPRequest.png"></p><h2 id="结束会话"><a href="#结束会话" class="headerlink" title="结束会话"></a>结束会话</h2><p>由于我们已经拿到账户密码，后续会话保持就不需要了<br>我们直接发送PAP Authentication-NAK告知对方密码错误<del>（得了便宜还卖乖</del><br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/AuthNAK-6e9b95cf7b1b42a9aca215d004d41c52.png" alt="Authentication-NAK.png"><br>然后发送LCP Termination Request结束LCP会话<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/LCPEnd-1c9c804f17a943b99cfa235515db39e0.png" alt="Termination-Request.png"></p><p>##相关工具<br>我用Golang写了一个工具实现以上过程以获取账户密码，请合法使用:<br><a href="https://github.com/ZHLHZHU/PPPoE_Account">https://github.com/ZHLHZHU/PPPoE_Account</a><br><img src="https://github.com/ZHLHZHU/PPPoE_Account/workflows/PPPoE_Account/badge.svg" alt="PPPoE_Account"></p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://blog.csdn.net/windeal3203/article/details/51066430">PPPoE协议-轮子学长-CSDN</a></li><li><a href="https://tools.ietf.org/pdf/rfc2516.pdf">RFC2516</a></li></ul>]]>
    </content>
    <id>https://www.zhlhzhu.com/2020/04/03/get-pppoe-password-from-dialup-device/</id>
    <link href="https://www.zhlhzhu.com/2020/04/03/get-pppoe-password-from-dialup-device/"/>
    <published>2020-04-03T23:45:00.000Z</published>
    <summary>
      <![CDATA[<p>现在某些路由器有从旧路由器自动学习宽带账户密码功能，<br><img src="/2020/04/03/get-pppoe-password-from-dialup-device/RoutePPPoeExample-598850f7aa1547d38a584cc7e57c9788.jpeg" alt="哇为路由截图.jpeg"></p>
<p>目前大部分宽带拨号使用的PPP认证类型还是基于明文的PAP验证，只要伪装成PPPoE服务器，完成握手过程，就能获得路由器上的宽带账户与密码。</p>]]>
    </summary>
    <title>从拨号设备获取PPPoE密码</title>
    <updated>2026-06-01T08:34:38.037Z</updated>
  </entry>
  <entry>
    <author>
      <name>ZHLHZHU</name>
    </author>
    <category term="网络" scheme="https://www.zhlhzhu.com/categories/%E7%BD%91%E7%BB%9C/"/>
    <category term="NTP" scheme="https://www.zhlhzhu.com/tags/NTP/"/>
    <category term="Stratum-1" scheme="https://www.zhlhzhu.com/tags/Stratum-1/"/>
    <category term="GPS" scheme="https://www.zhlhzhu.com/tags/GPS/"/>
    <category term="x86" scheme="https://www.zhlhzhu.com/tags/x86/"/>
    <content>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>　　国内ntp服务器的资源严重不足，在pool.ntp.org池中的每台服务器负载都很重，之前尝试过把一台1C1G1M服务器加入ntp池中，大量包直接把服务器给搞宕，然后分数直掉，被踢出ntp池，大家如果有空闲的服务器资源可以贡献出来分担一下：<a href="https://www.ntppool.org/zh/">ntp pool</a></p><h2 id="那我们自己做个ntp服务器吧"><a href="#那我们自己做个ntp服务器吧" class="headerlink" title="那我们自己做个ntp服务器吧"></a>那我们自己做个ntp服务器吧</h2><p>　　ntp服务器采用分层结构，stratum-0是参考时钟源，参考时钟常用的是GPS信号；因为我们无法直接通过GPS信号在网络中同步时间，所以就需要stratum-1服务器作为转接，stratum-1是直接与参考时钟源相连接的。<br>　　在网上很多教程都是用树莓派+GPS模块来搭建stratum-1服务器的，之前尝试过，但是由于树莓派处理能力相对较低、易损坏的 SD卡、缺乏电池备份，因此我把目光投向了x86平台，本次教程使用的是一张INTEL ATOM N570工控主板。</p><span id="more"></span><h2 id="材料准备"><a href="#材料准备" class="headerlink" title="材料准备"></a>材料准备</h2><p>　　首先我们需要一个带PPS输出的GPS模块:<br><img src="/2019/06/11/configuring-stratum-1-ntp-server-with-x86-board/GPSMOD.jpg" alt="GPSMOD"><br>　　利用GPS模块配套的软件把PPS脉冲改为周期为一秒，高电平100ms，把波特率改为115200，顺便只保留串口输出GPS的NMEA数据,因为北斗和伽利略的数据对我们无用。<br>　　然后通过usb线将GPS模块连接到工控板上，另外用一根杜邦线把GPS模块的PPS输出连接到工控板RS232接口的第一脚（数据载波检测DCD）上。</p><h2 id="配置GPS"><a href="#配置GPS" class="headerlink" title="配置GPS"></a>配置GPS</h2><p>　　当我们连接正确之后,执行<code>ls /dev/tty*</code>就会看到一个新的设备，我这里显示的是<code>/dev/ttyACM0</code>。然后安装minicom来查看GPS模块输出是否正常</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> apt install minicom</span><br><span class="line"><span class="built_in">sudo</span> monicom -s</span><br></pre></td></tr></table></figure><p>选择<code>*Serial port setup</code>把串口设备改成<code>/dev/ttyACM0</code>，然后把波特率改成115200，回车保存，选择exit就可以看到有数据输出了（<code>/dev/ttyACM0</code>根据每个人电脑的情况自行修改）<br><img src="/2019/06/11/configuring-stratum-1-ntp-server-with-x86-board/GPSSerialPort-034c9e11c8544088804a913f9c5f4013.png" alt="GPSSerialPort"><br><code>ctrl+A Z X</code>退出minicom（比VIM退出还要丧心病狂）</p><h2 id="配置PPS"><a href="#配置PPS" class="headerlink" title="配置PPS"></a>配置PPS</h2><p>　　GPS的PPS引脚会在产生频率为1HZ的稳定方波，可以提供给工控板一个精准的走时。x86工控板不同于树莓派，没有引出GPIO口，因此我们的PPS信号要通过RS232的第一脚进行输入，并且通过<code>ldattach</code>把pps功能附加到RS232接口上。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> apt install pps-tools</span><br><span class="line">modprobe pps_ldisc</span><br><span class="line">lsmod | grep pps_ldisc</span><br><span class="line"><span class="built_in">sudo</span> ldattach pps /dev/ttyS0 <span class="comment">#后面的tty设备取决于pps信号接在哪个com口上</span></span><br><span class="line"><span class="built_in">sudo</span> ppstest /dev/pps0</span><br></pre></td></tr></table></figure><p>如果输出如图，pps就配置完成了：<br><img src="/2019/06/11/configuring-stratum-1-ntp-server-with-x86-board/PPSDevice-953ed75b626d46a1a71e373b3a318666.png" alt="PPSDevice"></p><p><img src="/2019/06/11/configuring-stratum-1-ntp-server-with-x86-board/PPSOutput-481b9e7873204c8491f9eea3b2f02360.png" alt="PPSOutput"></p><h2 id="获取ntpd"><a href="#获取ntpd" class="headerlink" title="获取ntpd"></a>获取ntpd</h2><p>Ubuntu18.04 Server没有自带ntp套件，因此需要我们自己安装：<br>从官网下载最新版ntp:<a href="http://www.ntp.org/downloads.html">http://www.ntp.org/downloads.html</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">解压…</span><br><span class="line">./configure</span><br><span class="line">make -j4</span><br><span class="line"><span class="built_in">sudo</span> make install</span><br></pre></td></tr></table></figure><h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><h3 id="首先完成以下项目："><a href="#首先完成以下项目：" class="headerlink" title="首先完成以下项目："></a>首先完成以下项目：</h3><ul><li>GPS模块能正常搜星定位</li><li>GPS模块设置PPS占空比为10%（看对应的GPS模块手册）</li><li>GPS设置为动态（车载）模式（看GPS模块手册）</li></ul><h3 id="配置ntpd"><a href="#配置ntpd" class="headerlink" title="配置ntpd"></a>配置ntpd</h3><p>在&#x2F;etc&#x2F;下创建ntp.conf并写入如下内容：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># gps: /dev/gps0-&gt;/dev/ttyACM0</span></span><br><span class="line">server 127.127.20.0 mode 88 minpoll 4 iburst prefer <span class="literal">true</span></span><br><span class="line">fudge 127.127.20.0 flag1 1 flag2 0 flag3 0 flag4 0 time1 0.1 refid GPS</span><br><span class="line"><span class="comment"># pps: /dev/pps0</span></span><br><span class="line">server 127.127.22.0 minpoll 4 maxpoll 4 iburst <span class="literal">true</span></span><br><span class="line">fudge 127.127.22.0 flag2 0 flag3 0 flag4 1 time1 0.1 refid PPS</span><br></pre></td></tr></table></figure><p>ntpd配置server中的127.127.X.X并不是真实的ip地址(127开头的根本不是一个网络地址)，而是参考时钟源<br>127.127.22.0表示把&#x2F;dev&#x2F;pps0作为PPS参考源<br>127.127.20.0表示从&#x2F;dev&#x2F;gps0作为GPS参考源<br><strong>注意！我们在之前配置的时候串行输出口是&#x2F;dev&#x2F;ttyACM0，但是ntpd只会把&#x2F;dev&#x2F;gps*中作为参考源</strong><br><strong>因此！我们需要做一个软连接：</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> <span class="built_in">ln</span> -s /dev/ttyACM0 /dev/gps0 <span class="comment">#根据具体情况自行修改</span></span><br></pre></td></tr></table></figure><p>127.127.20.0 mode 88中的mode用于配置波特率和选择NMEA字段<br>更多的配置信息可以参考ntpd官方文档：<a href="https://www.eecis.udel.edu/~mills/ntp/html/drivers/driver20.html">GPS</a>  &#x2F; <a href="https://www.eecis.udel.edu/~mills/ntp/html/drivers/driver22.html">PPS</a></p><h2 id="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h2><p>配置完成后我们来做一下测试：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> ntpd -c /etc/ntp.conf <span class="comment">#启动ntpd</span></span><br><span class="line">ntpq -crv -p</span><br></pre></td></tr></table></figure><p>ntpq输出结果如图：<br><img src="/2019/06/11/configuring-stratum-1-ntp-server-with-x86-board/NTPData-a52965cf146c4235a7bdfcd94d916b32.png" alt="NTPData"><br>ntpq 各个参数详解：<a href="https://linux.cn/article-4664-1.html">网络时间的那些事及 ntpq 详解</a><br>拿windows测试一下：<br><img src="/2019/06/11/configuring-stratum-1-ntp-server-with-x86-board/NTPWindows-bfb3fcf5449f460d9fdf85cc34a699c6.png" alt="NTPWindows"></p><p><strong>至此就完成ntpd的基础配置啦</strong></p>]]>
    </content>
    <id>https://www.zhlhzhu.com/2019/06/11/configuring-stratum-1-ntp-server-with-x86-board/</id>
    <link href="https://www.zhlhzhu.com/2019/06/11/configuring-stratum-1-ntp-server-with-x86-board/"/>
    <published>2019-06-11T00:44:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>　　国内ntp服务器的资源严重不足，在pool.ntp.org池中的每台服务器负载都很重，之前尝试过把一台1C1G1M服务器加入ntp池中，大量包直接把服务器给搞宕，然后分数直掉，被踢出ntp池，大家如果有空闲的服务器资源可以贡献出来分担一下：<a href="https://www.ntppool.org/zh/">ntp pool</a></p>
<h2 id="那我们自己做个ntp服务器吧"><a href="#那我们自己做个ntp服务器吧" class="headerlink" title="那我们自己做个ntp服务器吧"></a>那我们自己做个ntp服务器吧</h2><p>　　ntp服务器采用分层结构，stratum-0是参考时钟源，参考时钟常用的是GPS信号；因为我们无法直接通过GPS信号在网络中同步时间，所以就需要stratum-1服务器作为转接，stratum-1是直接与参考时钟源相连接的。<br>　　在网上很多教程都是用树莓派+GPS模块来搭建stratum-1服务器的，之前尝试过，但是由于树莓派处理能力相对较低、易损坏的 SD卡、缺乏电池备份，因此我把目光投向了x86平台，本次教程使用的是一张INTEL ATOM N570工控主板。</p>]]>
    </summary>
    <title>用x86工控板配置一个stratum-1 ntp服务器</title>
    <updated>2026-06-01T08:34:37.972Z</updated>
  </entry>
</feed>
