测音量不能只看分贝！声音大小的衡量与单位dB、dB(A)、dB(C)的概念
你有没有想过？为什么指甲刮过黑板那微弱的刺啦声，能让你瞬间全身起鸡皮疙瘩。而远处滚滚而来的雷声虽然震得窗户乱颤，你却能安然入睡？ 如果说声音的能量值，肯定是撼动窗户的低沉雷声更强。但刮黑板的高频声音却更让我们人耳难以忍受。由此我们知道了，人耳对不同频率声音的感知能力是不一样的。 声压（Sound Pressure）： 声压表示声音在空气中传播时引起的空气压强变化，这是一个客观的物理量，其单位是帕斯卡 (Pa)。 响度（Loudness）： 响度是人耳对声音强弱的主观感觉，也就是你觉得它“有多响”。基于进化的选择，同样声压下，我们的耳朵对中高频（如人声、婴儿哭声）极为敏感，但对低频（如低音炮的震动、远处的空调外机声）较为钝感。为了衡量人耳的感受，人们引入了响度这一概念。 声压级 (SPL)： 声压级它表示当前声压是基准声压（20uPa）的多少倍。用分贝（dB）表示，它实际不是一个物理单位，更不能称为声音大小的单位，而是一个比例关系。 之所以要把声压转换成声压级的表示方法，是因为耳朵能听到的最小到最大的声压，相差百万倍。人们为了少写点零，引入了对数运算。 声压级 $L_{p}$ 的计算公式如下： $L_{p}=20\log _{10}\left(\frac{p_{rms}}{p_{ref}}\right)\text{\ dB}$ 其中各个字母代表： $p_{rms}$ (待测声压)： 你实际测量到的空气压力波动值（单位：帕斯卡 Pa）。 $p_{ref}$ (基准声压)： 人耳刚能听到的声音压力，是一个固定值：$2\times 10^{-5}$ Pa（即 20微帕）。 $\log _{10}$： 以10为底的对数运算，负责把巨大的倍数关系“压缩”成小的数值。 计权（Weighting）： A 计权 (A-Weighting)：模拟“普通耳朵” dB (A) 是通过 A 计权网络 修正后的声压级，核心是模拟人耳对中高频敏感、对低频不敏感的听觉特性（贴近人类日常环境中对声音的主观感受）。 人耳在较低声压级（约 40 dB）下的听觉反应。在这一曲线中，低频部分的凹陷非常明显，意味着人耳对低频非常迟钝。 “虽然大家都叫它单位，但 dB（A）其实更像是一个带了‘人耳美颜滤镜’的数值评分。” C计权一般用于测量：语音与话音、环境噪声、职业健康。 C 计权 (C-Weighting)：模拟“大声状态” dB (C) 是通过 C 计权网络 修正后的声压级，核心是模拟高声压环境下人类的听觉特性—— 此时人耳对低频的敏感度提升，听觉响应接近线性。 大音量（>85dB）下人耳对低频更敏感（听觉变平坦了），所以 C 计权的曲线也更平直。 C计权一般用于测量：重工业噪声、音响系统、峰值冲击。 A计权与C计权衰减情况对比： 频率 (Hz) A 计权衰减 (dB) C 计权衰减 (dB) 差距（A比C多减） 31.5 -39.4 -3.0 ~36 dB 63 -26.2 -0.8 ~25 dB 125 -16.1 -0.2 ~16 dB 250 -8.6 0 8.6 dB 500 -3.2 0 3.2 dB 1000 0 0 一致 2000 +1.2 -0.2 +1.4 dB 4000 +1.0 -0.8 +1.8 dB 8000 -1.1 -3.0 -1.9 dB 行业测试注意事项： 标准优先原则：某些行业标准中有自己的计权方式选择要求。如自动电话技术标准中明确指出，要使用A计权测量。 数值对比前提：不同加权的声压级不可直接对比，加权不同没有可比性。例如，某个话机振铃最大声音 dB (A)=80dB、dB (C)=85dB，不能说“C计权测到的声音更大”，而是C计权计入了更多低频部分贡献。 测试条件标注：撰写报告时，必须写明测试条件，否则数据没有意义。比如65dB(A)@1m ，表示 “使用A计权方式在1m处测到的声压级数值”（针对计权标注，国际标准（如 ISO 80000-8）建议的严谨写法应该是 $L_{pA}=65\text{\ dB}$） 特殊情况下的灵活变通：有时我们测的产品明显有低频噪声时，我们要测量其具体情况，便可能需要补充测量C计权下的声压级数值，以备参考。 总结： 声压级（SPL）不是声音大小的物理单位，它只是表示声压大小的方法。 dB：反映了声压相对基准的倍数（声压级），是未加权的原始值。 dB(A):模拟人耳常规声压级感受的 “实用指标”，多用于合规性测试、反映实际体验的测试（最常用）； dB(C):模拟人耳高声压下感受，因为低频衰减小，也可以认为是完整能量的测量。用于大功率设备或要关注低频部分的测试中。
事情起因是这样的。公司搬家捡垃圾，捡到了一路由器，看网口四根针，确认是百兆的垃圾路由器。本想丢掉，但后面标签写的制造商不太常见，所以捡回来拆了看什么方案。拆开看了眼板号是BL-RM7620N，布线一眼就知MT7620N，但串口上焊了一枚CC2530模组，看起来与Zigbee有关。那我必须登上管理页面看看。 OpenWrt 安全模式 通过自动获取IP，获得了路由器管理页面地址，登上去看到是运行的OpenWrt 14（Barrier Breaker）。尝试使用常见的弱口令登录，发现都登不上。接下来能做的就是清除掉密码啦。 与常见的消费级路由器相比，OpenWrt不能通过长按Rest恢复默认设置（这种自定义固件恢复默认设置后，它的密码可能我也不知道）。经过一番搜索，了解到OpenWrt内置了安全模式（failsafe mode）用于在忘记密码或配置错误后进行恢复，如果编译时不取消掉，默认该模式是提供的。 进入安全模式的方式有两种：在系统的启动过程中按下物理按键不松手、通过串口在系统提示按 f 和 Enter 进入 failsafe mode时输入按键。一旦进入安全模式，OpenWrt会绕过几乎所有的配置，使用192.168.1.1作为IP地址启动必要的服务。然后手动设置计算机IP为192.168.1.2，即可无需密码使用 telnet 连接并修复某些错误。 第一种方式通过按键进入。这很难把握时机，按键过早会进入Bootloader，按键晚了进不去安全模式。笔者试了几次没成功就放弃啦。 第二种方式通过串口进入。把上面的ZigBee模组拆除，暴露串口。通过USB2TTL线连接到计算机，注意只连接GND、TXD、RXD就好，TXD与RXD要交叉连接呦。波特率57600，打开串口，路由器插电开机，没一会儿，串口开始打印SPI Flash分区布局等启动信息，然后就看到了期望的failsafe mode提示信息： Press the [f] key and hit [enter] to enter failsafe mode Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level 此时，通过键盘输入 f ,然后按 Enter 键，就会看到 - failsafe - 的提示信息，然后显示BusyBox shell界面，成功进入安全模式。 进入安全模式后，我们需要通过 mount_root 命令重新挂载分区才可以写入配置文件，否则就会提示要修改的文件是Read-only file system。 root@(none):/# mount_root jffs2 is ready 然后输入 passwd 根据提示两次输入同一密码即可更改密码。 root@(none):/# passwd Changing password for root New password: Retype password: Password for root changed by root 然后通过 reboot -f 命令重启OpenWrt，即可使用新设置的密码登录。 注：通过 uci get network.lan.ipaddr命令可以获取路由器IP地址配置，通过 mtd -r erase rootfs_data命令可以恢复默认配置。 刷机 登录管理页面后大失所望，Luci的界面干净的很，没有什么好康的。考虑这玩意儿不知道里面有啥东西，打算刷个机丢公司让他继续发热。就用SNR CPE-W4N rev. M的固件，他们PCB、Flash容量一毛一样。 通过密码登录Luci后，直接固件升级新的OpenWrt sysupgrade文件就可以。或者按住RESET键上电在Bootloader里面升级也可以。 # Stable Release 版本下载地址： https://downloads.openwrt.org/releases/ # Development Snapshot 版本下载地址： https://downloads.openwrt.org/snapshots/targets/ SSH登录 刷完机发现打不开管理页面了，不慌，SSH上去看看。然后我丢，SSH怎么也上不去，仔细一看，是本地计算机发现对端的验证信息改变了： C:\Users\Lexsion>ssh root@192.168.1.1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. 那我们就使用 ssh-keygen -R XXX.XXX.XXX.XXX 把之前缓存的验证信息删除,XXX.XXX.XXX.XXX是对端的IP地址。 C:\Users\Lexsion>ssh-keygen -R 192.168.1.1 # Host 192.168.1.1 found: line 5 C:\Users\Lexsion/.ssh/known_hosts updated. Original contents retained as C:\Users\Lexsion/.ssh/known_hosts.old 然后我们就成功使用 ssh USERNAME@HOST_IP命令连接路由器的shell。 C:\Users\Lexsion>ssh root@192.168.1.1 The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxx. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.1.1' (ED25519) to the list of known hosts. BusyBox v1.36.1 (2023-12-15 10:44:38 UTC) built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt SNAPSHOT, r24661-a14240d384 ----------------------------------------------------- === WARNING! ===================================== There is no root password defined on this device! Use the "passwd" command to set up a new password in order to prevent unauthorized SSH logins. -------------------------------------------------- root@OpenWrt:~# 安装LUCI与中文语言包 通过执行 opkg list-installed命令查看已经安装的软件包，发现果然没有Luci，那二话不说，给它WAN口插网线，装一个Luci。 root@OpenWrt:~# opkg update Downloading https://downloads.openwrt.org/snapshots/targets/ramips/mt7620/packages/Packages.gz Updated list of available packages in /var/opkg-lists/openwrt_core Downloading https://downloads.openwrt.org/snapshots/targets/ramips/mt7620/packages/Packages.sig Signature check passed. ······ Downloading https://downloads.openwrt.org/snapshots/packages/mipsel_24kc/telephony/Packages.sig Signature check passed. root@OpenWrt:~# opkg install luci Installing luci (git-23.051.66410-a505bb1) to root... Downloading https://downloads.openwrt.org/snapshots/packages/mipsel_24kc/luci/luci_git-23.051.66410-a505bb1_all.ipk ······ Configuring ······ ······ Configuring luci. 然后网页就有了，登录后发现系统的语言只有英语，那就去system-->Software下搜索zh-cn，下载中文语言包就变成中文啦。
前言： 前置基础： 通过SSH连接： 检查已有的SSH密钥对 生成新的SSH密钥 在 Git for Windows 上自动启动 ssh-agent 添加SSH 公钥到 GitHub 帐户 测试 SSH 连接 将远端仓库的 URL 从 HTTPS 切换到 SSH 参考： 前言： 讲一个笑话：最近给新电脑装Git工具，才意识到自己之前用SSH连接GitHub的方法居然是错的。是这样的，我配置了密钥对后依然在使用之前配置的浏览器登录。这次换新电脑，之前没有登录GitHub，新装的Git工具。跟着官方文档配置完成后，git push -u origin master 居然还弹出登录页面，然后我才意识到之前错了。使用SSH连接仓库和创建仓库时GitHub教你的方法两者协议是不一样的，网页上给的参考命令是用的HTTPS。这些其实在开始使用Git文档中有的，只是不仔细看容易忽略。官方的SSH连接操作文档半中半英可读性也不够好，第一次读的时候没看仔细。以上教训告诉我们，学习不能急于求成，基础要仔细掌握。所以鄙人在此水贴一篇，算是个基础教程吧。（看我不如通读GitHub的文档？） 前置基础： GitHub是一个提供Git服务的网站。Git是一套版本控制工具。所以，使用GitHub除了一些网页上的设置，其主要功能就是使用Git。首次使用Git首先要下载安装，然后便是要配置用户名和邮箱，建议设置成和GitHub上相同的。配置分为全局配置和仓库配置，全局就是没有仓库配置时默认的用户信息；仓库的就是单独某个仓库生效的。下载安装程序运行，一路点击下一步，装完Git后便可以打开Git Bash啦。 # 设置全局配置： git config --global user.name "github's Name" git config --global user.email "github@xx.com" # 设置仓库的配置,要在仓库目录下执行： git config user.name "git's Name" git config user.email "git@xx.com" # 查看的命令，查哪在哪执行： git config --list Git存储内容项目的单元被称为仓库（Repository），作为一个仓库，创建的过程称之为初始化。然后创建文件，需要产生一个历史记录时，就将变更的文件按需添加到暂存区，提交（Commit）一次。有了一次Commit后，便可以为其设置远端仓库地址，将本地的仓库变化推送过去保存。大致这么个流程： # 创建一个以仓库名称命名的目录（或者叫文件夹）,并进入其中。 mkdir XX-Repository cd XX-Repository # 使用初始化命令 git init # 按照实际需要，创建或从其他地方拷贝文件到目录下。惯例要创建一个README.md文件，给人看。 touch README.md cp ../../XXX.XXX ./XXX.XXX # 这个Linux下用的多，Win下不如直接图形界面拖拽。 # 文件写的差不多了，先按需添加到Commit暂存区， git add XXX.XXX XXX.XXX # 添加指定文件 git add -A # 添加所有新增或变更的文件 # 然后执行Commit,一般惯例要带-m参数，备注本次提交的变更。 git commit -m "first commit" # 添加远端仓库地址，地址从仓库主页的绿色Code按钮中能看到： git remote add origin https://github.com/USERNAME/REPOSITORY.git # 设置远端仓库的分支为master，并推送到该分支。 git push -u origin master # 因为上面是HTTPS的连接方式，所以会弹出网页的登录页面。按提示登录即可完成推送。 到此一个Git仓库大致就在GitHub上搞起来了。那如何换用SSH方式连接仓库呢？ 通过SSH连接： 这里我抄一下官方的内容，原文半英半中，写了很多注意事项，很多内容的位置却不合理。在此我缩减了一下，有问题建议看官方文档。 检查已有的SSH密钥对 首先可以检查下您电脑上有没有已经生产的可用的密钥对，他们是成对的一组文件，包含私钥和公钥。 打开Git Bash。 执行 ls -al ~/.ssh ，如果.ssh目录下有密钥对变回在回显的信息中看到文件名类似于： id_rsa.pub id_ecdsa.pub id_ed25519.pub 这里，如果提示目录不存在，那看样子就是啥都没有了。如果有密钥对，就可以用后面的方法检查有没有密码加密，没有密码或者知道密码便可以直接用。否则就按下面的方法新建密钥对。 生成新的SSH密钥 如果您还没有 SSH 密钥，则必须生成新 SSH 密钥用于身份验证。为了安全，需要在生产的密钥对上添加密码保护。如果不想在每次使用 SSH 密钥时重新输入这个密码，您可以将密钥添加到 SSH 代理（即ssh-agent），让它管理您的 SSH 密钥并记住您的密码。 打开Git Bash。 复制下面的文本粘贴到Bash中执行（替换为您自己的 GitHub 电子邮件地址）。 ssh-keygen -t ed25519 -C "your_email@example.com" 注：如果您使用的是不支持 Ed25519 算法的旧系统，请使用以下命令： ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 此时将以邮箱地址为标签生成新的SSH密钥对。 提示您“Enter a file in which to save the key（输入要保存密钥的文件）”时，按 Enter 键。 这密钥会存在默认文件位置。（即~/.ssh ，不存在默认位置没有积极意义且会让后面更繁琐。） 在提示 Enter passphrase 时设置密码，在提示 Enter same passphrase again: 时重复密码。 在 Git for Windows 上自动启动 ssh-agent 您可以在打开 bash 或 Git shell 时自动运行 ssh-agent。并让它自动添加~/.ssh目录下新的 SSH 密钥。 复制以下内容并将其粘贴到 Git shell 的 ~/.profile 文件中保存，没有就创建一个： env=~/.ssh/agent.env agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; } agent_start () { (umask 077; ssh-agent >| "$env") . "$env" >| /dev/null ; } agent_load_env # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?) if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then agent_start ssh-add elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then ssh-add fi unset env ~/ 这个位置是用户的HOME目录，Windows 下就是 C:\Users\<你的用户名> 这个目录。 如果您的私钥没有存储在默认位置之一（如 ~/.ssh/id_rsa），您需要告知 SSH 身份验证代理其所在位置。 要将密钥添加到 ssh-agent，请输入 ssh-add ~/path/to/my_key。 重新开一个Git Bash窗口，ssh-agent首次被启动，自动搜索新增的密钥对，然后提示输入密码，按要求输入密码后密钥对就被加入了ssh-agent。以后运行 Git Bash 时便会自动启动 ssh-agent ，不再需要输入密码。 ssh-agent 进程将继续运行，直到您注销、关闭计算机或终止该进程。 添加SSH 公钥到 GitHub 帐户 前面的操作概括来讲就是将本地的私钥添加到了本地的SSH代理中，下面要将公钥添加到GitHub上。 网页右上角点击头像，然后点击 Settings。在左侧找到 Access 部分，点击 SSH and GPG keys 。 点击右上方的 New SSH key，打开 SSH keys/ Add new 页面。 在 "Title"（标题）文本框中，为新公钥添加描述性标题，要求自己看到就知道是啥。 例如，如果密钥对用于枪神6笔记本上，此公钥名称可以是 "God of Gun 6"。 使用以下命令将 SSH 公钥复制到剪贴板，并粘贴到网页的"Key"（密钥）文本框中。最后点击 Add SSH key（添加 SSH 密钥），按提示输入GitHub的登录密码完成公钥的添加。 clip < ~/.ssh/id_ed25519.pub 提示：注意文件位置，此处是默认位置与文件名，如果前面你的位置不一样，需要灵活改变。如果 clip 命令不可用，可找到隐藏的 .ssh 文件夹，在常用的文本编辑器中打开该.pub文件，并将其内容复制到剪贴板。 这样GitHub那边有对应的公钥，我有对应的私钥，我本地的SSH便能够向GitHub证明我的身份啦。 测试 SSH 连接 测试连接时，您可能需要使用密码（即您之前创建的 SSH 密钥对的密码）验证此操作。如果密钥的密码之前没有缓存到ssh-agent中。如果是按照前面操作过来的，应该无需再次输入密码。 打开 Git Bash。 输入以下内容： ssh -T git@github.com 您可能会看到类似如下的警告： > The authenticity of host 'github.com (IP ADDRESS)' can't be established. > RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. > Are you sure you want to continue connecting (yes/no)? 验证所看到消息中的指纹是否匹配 GitHub 的 RSA 公钥指纹。 如果是，则输入 yes。如果一切正常，会看到GitHub返回了一段包含您的用户名的消息。 > Hi username! You've successfully authenticated, but GitHub does not > provide shell access. 将远端仓库的 URL 从 HTTPS 切换到 SSH 打开 Git Bash。 将当前工作目录切换到为您的本地仓库。 列出现有远程仓库以获取要更改的远程仓库的名称，关注一下USERNAME和REPOSITORY部分。 $ git remote -v > origin https://github.com/USERNAME/REPOSITORY.git (fetch) > origin https://github.com/USERNAME/REPOSITORY.git (push) 使用 git remote set-url 命令更改远端的 URL ，注意将上面获取的名称换到下面命令中。 $ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git 这里也可以使用git config 命令直接调整配置处理。 git config -l # 查看配置 git config remote.origin.url git@github.com:USERNAME/REPOSITORY.git git config -l # 再次执行，检查修改结果 参考： 使用 SSH 连接到 GitHub 将远程 URL 从 HTTPS 切换到 SSH
J-Link V9 使用7.x工具包提示 Probe 为 Clone 产品的处理
前言： 今天找出了以前低价拍到的 STM32_F4VE 开发板，又找到了网友处以散件形式低价购得的 J-Link V9 ，去 SEGGER 官网下载了 JLink 工具包并进行了安装。到了测试连接时却出现了问题，J-Flash 弹出以下警告： The connected probe appears to be a J-Link clone.Using the J-Link software with a clone is forbidden and illegal.Proper operation cannot be guaranteed. 翻译成中文大致如此：当前连接的探针（调试器）看起来是一个 J-Link 复制品（盗版）。在复制品上使用 J-Link 软件不被允许也不合法。我们无法保证它能正常工作。 看了一下固件版本，固件应该是还是16年的魔改版本，也没有像原版一样的自动更新功能。这样肯定不行，于是我搜索了一下该如何处理。通过一番搜索，发现出现此问题的原因貌似是因为SEGGER升级了盗版识别机制，加入了对 SN 和扩展功能方面的验证，从而导致被检测为 Clone品，具体参考该贴 。 注意：本文所述方法仅针对使用 STM32F205RC/RE 主控的 J-Link V9 复制品，随着厂商更新，无法保证方法一直有效。刷写固件存在设备报废的风险，请自行斟酌，谨慎操作！ 处理办法： 通过网友们的帖子了解到，解决此问题的方法，无非就是刷固件、改序列号、清除掉魔改添加的功能。经过一番尝试，发现最简单的方法就是刷入某不具名大佬提供的 Bootloader ，连接电脑打开 J-Link Configurator ，等待其自动升级最新固件即可。这样的结果是 SN 值会变成 -1，当然也有办法自定义 SN ，但神奇的是，SN 值为 -1 并不影响其功能。 相关文件已存储于IPFS网络，链接在此。 具体过程： 相信您已经安装了 J-Link 软件包，对此这里不再赘述。使用一个可以正常工作的 J-Link 连接此异常 J-Link 的 SWD 调试接口，J-Link V9 标准克隆版通常会在靠近 PCB 边缘有四到五个预留焊盘，一般从靠近 F205 一端开始，依次为 VCC、GND、SWDIO、SWCLK 。没有大鸡也可以用 J-Link OB ,只是需要用 OB 的 SN 在 Segger J-Link keygen 中生成一个 J-Flash 许可添加到 J-Link License Manager 中，因为 J-Link OB 默认是不具有 J-Flash 使用许可的 。注意：视情况，目标板可能需要单独供电。 保证 SWD 接口稳固连接，打开 J-Flash 。在欢迎页选择 Create new project --> Start J-Flash 。Target device 中点击 ··· 按钮，根据实际情况搜索并选择 STM32F205R* ，Target interface 选择 SWD，Speed 选择1000kHz，如果后面无法建立连接，建议减小速率。最后点击 OK。 将解压后的 bootloader.bin 文件拖入 J-Flash，设置起始地址为 0x8000000 ，点击 OK。点击 Target --> Connect 建立连接，点击 Manual Programming --> Erase Chip 擦除原始固件，点击 Manual Programming --> Program&Verify 刷入 Bootloader 并校验。 如果您希望自定义 J-Link 的 SN，此时可以关闭 Bootloader 数据窗口，点击 Manual Programming --> Read back --> Entire chip 回读整个芯片数据，然后回读的数据会显示在数据窗口中。通过Go To： 功能快速跳转到地址 0x800BF00 ,通过修改0x800BF00 到 0x800BF03 四个字节可以定义 J-Link V9 的 SN 。例如：0x800BF00 到 0x800BF03 依次是 7D、C3、C0、01，则 SN 为 01C9C37D = 29999997。按自己意愿修改后参考上面步骤重新全片擦除并写入即完成 SN 的自定义。如果不需要自定义 SN，可跳过本段。 拆除固件烧录的相关连接，将刷好 Bootloader 的 J-Link V9 通过 USB 连接到计算机，打开 J-Link Configurator ，会自动弹出固件修复窗口，等待其完成最新版本固件的刷入，然后拔下 USB 重新连接，J-Link V9 即可正常使用了。如果没有自定义SN，会看到硬件SN是-1，如果有自定义SN，则会显示自定义的SN。 参考： 人人都可以拯救正版硬件受害者(Jlink提示Clone)——曾半仙，看雪论坛 Jlink V9刷入自动升级固件——云中虾，博客园
前言： 简介： 技术信息： 开发资料： 开发环境部署： 点灯： 参考： 前言： 笔者最近参与了 DigiKey 在B站的Arduino盘点抽奖活动，有幸获得了一块Arduino MKR ZERO开发板。与复制品很常见的UNO和Mega2560不同，MKR ZERO使用的是 Microchip 的 SAMD21处理器 ，内核为32位的ARM Cortex-M0+ ，而前两者是8位的 AVR内核。这种原版的开发板我是万万买不起的，这次既然有幸得到，自然要点灯为敬。 Arduino MKR Zero——DigiKey零件页面 以上得捷页面提供了部分信息，话说看其价格也许比某宝便宜一些？（但不知道加上运费怎么样？ 简介： Arduino MKR ZERO 开发板在较小的尺寸上提供了不错的性能。MCU采用 32 位 ARM Cortex® M0+ 内核，且内有DAC。开发板提供了Micro USB & 电池双供电以及电池充电电路，且板载使用SPI接口的MicroSD连接器和一枚ECC508加密IC。如此，该开发板可以在不添加其他硬件的情况下播放音频文件。 警告：与大多数Arduino和Genuino板不同，MKRZero的运行电压为3.3V。I/O引脚可以承受的最大电压为3.3V。对任何 I/O 引脚施加高于 3.3V 的电压可能会损坏电路板。 技术信息： 技术信息 值 微控制器 SAMD21 Cortex‐M0+ 32bit low power ARM MCU 开发板供电电源 5V Max Micro USB 支持的电池 单节 Li-Po，3.7V ，至少700mAh容量 3.3V最大输出 600mA 5V最大输出 600mA IO工作电压 3.3V Max 数字I/O数量 22 PWM引脚 12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 10, A2 - or 18-, A4 - or 19) 串口数量 1 SPI数量 1 I2C数量 1 模拟输入引脚数量 7 (ADC 8/10/12 bit) 模拟输出引脚数量 1 (DAC 10 bit) 外部中断引脚 8 (0, 1, 4, 5, 6, 7, 8, A1 ‐or 16‐, A2 ‐ or 17) 单个 I/O 最大电流 7 mA 容量 256K Flash (8K Bootloader)，32K SRAM，NO EEPROM 时钟频率 48MHz （Main），32.768kHz（RTC） 板载LED引脚 32 （PB08） LED_BUILTIN suggested 开发资料： 原理图.PDF 引脚排列图.PDF MKR Zero 在线文档 ArduinoECCX08-Atmel ECC508仓库 开发环境部署： Arduino MKR Zero 是Arduino官方出品的开发板，其使用的开发环境自然是Arduino IDE。 首先到 Arduino IDE下载页 下载Arduino最新的Arduino 1.8，并按提示完成安装，安装路径建议不要有空格或中文。 安装完成后打开Arduino IDE，接下来要安装SAMD Core。点击 工具 > 开发板： > 开发板管理器... , 在弹出的窗口中将显示所有可用的开发板。 在搜索框中以 samd 为关键词搜索，在搜索结果中找到Arduino SAMD Boards (32-bits ARM Cortex-M0+) 并点击安装，安装期间若有驱动安装提示请允许，否则无法正常上传固件。若安装有困难，可能需要使用代理。 点击 工具 > 开发板： > Arduino SAMD Boards (32-bits ARM Cortex-M0+ > Arduino MKRZERO 选择开发板型号，点击 工具 > 端口 > COMxx(Arduino MKRZERO) 选定开发板串口。这时点击 工具 > 取得开发板信息 可以读到开发板信息即表示通信正常。 点灯： 点击 文件 > 示例 > 01.Basics > Blink ，打开闪灯示例程序，为了与出厂预置闪灯程序区分，将delay延时函数的参数改为250（代码如下），然后点击 上传 ，此时Arduino IDE会开始编译，编译完成后自动上传。等待其成功上传后观察板载LED闪烁速度，变快了便是成功了。 void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(250); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(250); // wait for a second } 参考： Arduino MKR Zero——DigiKey零件页面 Arduino MKR Zero——产品信息 Arduino MKR ZERO (I2S bus & SD for sound, music & digital audio data) MKR Zero online DOCS
前言： 最近突然想再注册一个Freenom域名，发现遇到一些问题，此处记录，以免日后再注册时候不记得，再次踩坑。另外记一下 Freenom 的自动续期，看到本文的人也能知道还有这种好事儿！ 常见问题： Freenom不显示注册页面 Freenom 只有登录按钮，点进去的登录页面也没有注册按钮。这个情况是因为 Freenom 页面提供了Google和Facebook 登录的选项而没提供直接的邮箱注册页面，不幸的是它们在中国大陆被屏蔽了。这个问题只需要先检查域名就可以了，选好域名最后 Checkout 时是会给出邮箱注册账号的页面的。 注册域名提示无法使用 一般出现在第一次注册时，或者是浏览器IP变化时候，Check Availability 查找域名后点击 Get it now! 时提示域名无法使用（Not available）。这种情况一个可能是没有账号先检查域名的注册流程中，这种情况填写域名时需要将域名后缀一起填入。另一个有账号的情况可能是登录失效了，如果已经注册账号，刷新重新登录即可。没有账号就前面方法注册一个账号。 注册域名提示技术错误 注册域名时遇到提示技术（Tech）错误，此问题是因为你浏览器当前的IP和你账号资料里面填写的区域国家不一致，从而触发了 Freenom 的反欺诈。可考虑修改资料中的国家地区，或更换与注册地相同的IP代理访问。（不建议使用代理注册域名） 点击 完成订单 提示不能确定你是人或没有反应 使用中国大陆网络访问 Freenom 注册域名可能会在最后一部点击 Complete Order 时网页没有反应、或是提示不能确定你是人。这是因为 Freenom 使用了 Google 的 reCAPTCHA 人机验证，而Google因为某些原因被大陆屏蔽。所以，国内无法正常连接位于 www.google.com/recaptcha 的 reCAPTCHA 服务。可以使用浏览器插件 Gooreplacer 拦截重定向到 recaptcha.net/recaptcha 就可以正常使用该服务了。 以Chrome 为例，只需要在浏览器扩展程序中搜索安装 Gooreplacer ，打开其配置页面并新增一条规则，匹配模式为 www.google.com/recaptcha ，目标地址为 recaptcha.net/recaptcha ，匹配类型为 通配符 。最后确定规则启用就可以了。 经过以上设置后，回到 Freenom 的网站，Ctrl + F5 刷新网页，重新登录，应该就可以正常注册域名了。 自动续期： Freenom 域名可以免费注册，但是最多只能注册一年。在到期前的两个星期内为免费续订期，如果错过了这几天，域名可能就需要付费注册抑或是与你无缘了。为了保证域名一直在自己手中，我在Microsoft 日历中添加了相关的提醒事项，并且使用大佬 @luolongfei 的 项目 进行自动续期。 因为考虑腾讯云提供了免费的云函数服务，而自动续期检查使用的资源开销很小，完全不会超出腾讯云的免费额度，所以本人使用了腾讯云的云函数运行了自动续期脚本。只需要去腾讯云注册个账号，然后十分钟左右时间部署一个云函数项目就可以了。相关的使用与部署方法大佬在README中写的非常详细了，此处提供个小建议，不必设置每天检查，一个星期检查两次就可以了。其他具体部署本文不再赘述。 参考： freenom免费域名注册不了，无法完成订单？ Freenom：freenom域名自动续期 Freenom：freenom域名自动续期——备用仓库
前言： 机器配置： 刷入 CoreELEC： 降级、刷入改版固件： 更换启动画面： 方法一：使用DD刷入 方法二：ADB方式： 方法三：使用Amlogic Customizationtool 写 CoreELEC 启动盘： 设置从U盘启动： 基本设置： 将固件刷入EMMC： 配置 CoreELEC 获取、检查 IPTV 源 安装、配置 IPTV 插件 安装字幕插件和影视信息刮削器 安装天气插件 其他： 重启蓝牙遥控器连接失效？ 参考： 前言： 斐讯的挖矿盒子N1质量不错，配置相对不低。可玩性很高，可以刷的系统很多，比如：Android电视盒子、Kodi电视盒子、CoreELEC电视盒子、EmuELEC游戏盒子；也可以刷成Armbian、CentOS7等Linux系统；还可以刷网心云分享宽带赚取收益。考虑缺一个专业的电视盒子看4K影片，于是笔者决定为其刷入CoreELEC系统做一个电视盒子。整个过程中还是踩了不少坑的。 机器配置： 机型： 斐讯（Phicomm）N1 CPU： 晶晨（Amlogic） S905D GPU： Mali-450 MP RAM： 2GB DDR3 ROM： 8GB eMMC 以太网： RTL8211F 1000Mbps 据说，它的 CPU 是 ARM Cortex-A53 四核 1.5G，带有的 ARM Mali™-450 GPU 支持 4K60fps硬件解码，能提供 HDMI 2.0 输出。 注意：目前N1 使用 CoreELEC 19.x 版播放HDR10片源会直接崩溃，然后数秒后复位重启。9.2.7 版本目前无此问题，考虑稳定建议使用9.2.7。刷入方式网上教程很多。 警告：刷写固件是一件危险的操作，它不同于常见的计算机安装系统。操作失误可能会导致无法挽回的损失，甚至因此报废您的硬件，请谨慎操作！ 刷入 CoreELEC： 降级、刷入改版固件： 因为笔者器在以前已经刷过webpad大佬的官改2.2系统了，此处大致讲一下刷Android盒子的方法。首先，插鼠标快速点击四次固件版本以解锁ADB，注意不要再锁上。然后使用大佬提供的降级工具对机器进行降级。完成降级后使用双A口USB线连接靠近HDMI的USB口到电脑，使用晶晨线刷工具对其进行刷机。注意：只有官方和官改等盒子类固件的存储分区结构可以刷 CoreELEC。具体可参考：斐讯N1探索手记#1 – 降级并刷入armbian系统 、 斐讯天天链N1 官改v2.2 、 N1刷完ARMBIAN想恢复EMMC超级简单线刷法，还可救砖. 更换启动画面： 刷写固件后可能有人会对开机启动画面不满意。和安卓系统的手机类似，电视机顶盒也有两个启动画面。最开始通电时显示的叫做第一屏，系统启动中显示的动画叫第二屏。第一屏可以通过Amlogic Customizationtool 修改固件包的方式或通过文件刷入相关分区的方式修改。第二屏则是通过替换文件 /system/media/bootanimation.zip 的方法修改。 此处因后期刷入CoreELEC，第二屏使用CoreELEC的即可。所以此处仅修改第一屏。 方法一：使用DD刷入 将logo.PARTITION文件存储在方便的位置，然后插上键盘，打开终端，执行以下命令。 su cd /XX/XX/ # cd 到 logo.PARTITION文件的目录 dd if=logo.PARTITION of=/dev/block/logo reboot 这样就可以看到第一屏启动画面变更了。笔者用的此方法，比较简单。 方法二：ADB方式： Android系统下打开ADB网络调试，然后PCB端使用ADB工具连接，执行以下命令重启至fastboot。 adb connect 盒子IP #即类似：adb connect 192.168.1.1:5555 adb shell reboot fastboot 然后使用双公头USB线连接电视盒子与计算机，执行以下命令检查设备连接，不行的话可能要检查下驱动。 fastboot device #查看是否连接到设备 设备如果存在，则继续，请注意，logo.PARTITION文件应该提前放置于fastboot相同目录。 fastboot flash logo logo.PARTITION fastboot reboot 方法三：使用Amlogic Customizationtool 此工具可以更换固件的第一屏，重新打包后再刷入即可更换第一屏，但是需要刷机，不太推荐。具体不在本文讨论范围内！ 写 CoreELEC 启动盘： Core ELEC 是一个以启动 Kodi 为主设计的一套方案，它基于一个精简的 Linux 系统。网上能找到大佬编译好的固件，将其下载下来，使用镜像写入工具写入U盘即可。项目在此：RuralHunter/CoreELEC ，文件在Releases中，这次我使用的19.2版本。 设置从U盘启动： 将制作好的启动盘插入靠近HDMI的接口，执行以下命令将重启并从U盘启动，可以在终端模拟器中，也可以远程ADB调试中。 reboot update 注：此命令正常执行后会重启从U盘启动。如若重启后进入 Recovery，则可能是U盘故障、写盘软件异常、Bootloader 异常等。建议使用带有验证功能的软件（如Etcher）写盘，不建议使用 win32_disk_imager 。故障依旧建议更换U盘。 基本设置： 重启后启动U盘中的CoreELEC系统，第一次启动会出现设置向导。第一页的语言设置中没有中文选项保持默认的英语，然后点击 Next ；第二页这里设置主机名称，我没有修改直接点击 Next ；第三页等待网络信息加载完成，网线会自动获取，WIFI需要自行在此页连接一下，然后点击 Next 。第四页是分享和访问控制，需要把SSH打开，这样才能远程连接shell 。点击 Next 会提示配置完成，再次点击 Next 即可进入系统界面。 进入系统后首先修改中文界面。首先需要在 Interface > Skin 下将 Fonts 修改为 Arial based ，否则修改中文语言后会无法正常显示中文字体。接下来需要在 Interface > Regional 下将 Languages 修改为 Chinese(Simple) ，系统会开始在线安装语言包，等待其完成安装后界面就会变成中文。然后回到此界面，将下面的时区国家修改为China，这样时间就正常显示了。 如果分辨率不合适需要修改，可以去 系统 > 显示 下按实际需求修改分辨率和刷新率。 将固件刷入EMMC： 注意：将固件刷入 EMMC 会清空其中原有的系统和用户空间数据，有重要资料请注意提前备份！ 警告：以下操作将清空 EMMC 中原有的系统和用户空间数据！ 此方法来自恩山大佬整理，原帖在此。下载大佬准备好的脚本文件包，将其解压。使用WinSCP或其他SCP工具通过root用户连接N1，密码前面如果没有修改默认应该是 coreelec ，将解压后的文件上传到 root 用户目录。 使用SSH通过 root 用户连接到N1，连接后默认应该位于 root 用户目录，使用 ls 命令检查文件存在，然后执行命令 bash installtoemmc 开始安装。如下所示回显信息可供参考，完成后会自动关机，SSH连接会提示中断。此时拔电拔下U盘，重新上电即可从EMMC引导CoreELEC启动。 CoreELEC (RuralHunter): 19.2 (Amlogic-ng.arm) CoreELEC:~ # ls backup log.sh music screenshots tvshows installtoemmc lost+found pictures scripts videos CoreELEC:~ # bash installtoemmc rootfs: /dev/system, storage: /dev/data, root_part: 11 This script will erase BOOT, SYSTEM, DATA and DTB on your device and install LE that you booted from SD card/USB drive. It will create a backup of device tree and recovery partition on your boot media. The script does not have any safeguards! Formatting SYSTEM partition.../dev/system contains a ext4 file system last mounted on /system on Xxx Xxx xx xx:56:18 2021 done. Copying SYSTEM files...done. Formatting DATA partition...done. Stopping Kodi...done. Copying user data... All done! WARNING: If your internal memory layout is different from standard Amlogic, you have to perform this operation again! Your system will reboot from internal memory. 配置 CoreELEC 获取、检查 IPTV 源 IPTV 源的获取可以去网上搜索一番，恩山能找到专门的板块，也可以去某些论坛或Q群找，一般保存为m3u 或 m3u8格式。使用 IPTV Checker 软件可以快速检查保存为 m3u 格式的 IPTV 源是否有效。经过检查后点击Online筛选出有效的，然后保存到新的文件即可完成检查。 打开某位无名大佬的EPG频道列表服务，将上面保存的 m3u 文件上传到该网站，可以快速为频道列表添加台标。这样导入Core ELEC后就可以看到台标了。最后把文件放到CoreELEC能访问的位置，等待使用。比如，可以通过 U 盘或 SCP 传到N1的存储空间中，也可以放到 NAS 上，然后在 CoreELEC 的文件管理中通过 SMB 协议添加到挂载中。 安装、配置 IPTV 插件 在 CoreELEC 的主界面上点击齿轮状的 设置 图标，选择 插件 。点击 从库安装 > 所有库 > PVR客户端 > PVR IPTV Simple Client ，点击安装。等待其联网安装完毕，点击 设置 ，在常规中设置 IPTV 源列表的位置（上文准备的），在 电子节目单 中配置 EPG 频道列表源，列表源上文中的网站提供了，可以按需求添加。完成配置后点击右侧 确定 即可完成插件配置。 此时回到主界面，将左侧光标移动到电视处，就可以看到添加的节目了。日后就可以在此看电视了。 安装字幕插件和影视信息刮削器 回到插件的所有库中，选择 字幕 ，选择 OpenSubtitles.org 并安装。去电脑上使用浏览器打开 OpenSubtitles 的官网，注册一个账号。然后将账号密码填入插件的设置中保存。然后去 设置 > 播放器 > 语言 处，将 首选字幕语言 改为 用户界面语言 。然后向下滚动找到下载字幕语言，将其原始的 English 取消掉（光标选中按确认），向上滚动选中 Chinese 和 Chinese（Simple），点击右侧 确定 保存设置。最后将默认剧集服务和默认电影服务都选为 OpenSubtitles 完成字幕插件的设置。 同样是在插件的所有库中，选择信息提供者 > 电影信息 ，安装 The Movie Database（默认应该已经安装，注意不要使用Python版本，笔者测试发现其不稳定）。然后进入其设置，将 首选语言 修改为 zh-CN ，点击右侧 确定 保存。然后在信息提供者 > 剧集信息中，同样也是这个插件（默认应该已经安装），设置成zh-CN。 确保N1已经联网且打开SSH，在设置里面看一下IP，在电脑上使用SSH连接。使用 vi /storage/.config/hosts.conf 命令打开host文件，添加如下内容： 13.224.161.117 api.themoviedb.org 13.33.144.120 api.themoviedb.org 13.33.144.2 api.themoviedb.org 65.8.80.24 api.themoviedb.org 13.33.144.88 api.themoviedb.org 13.33.144.74 api.themoviedb.org 13.226.254.58 image.tmdb.org 13.227.73.57 image.tmdb.org 保存退出即完成添加HOST内容。然后就可以去文件管理里面添加视频目录，设置视频类型，分别使用电影和电视剧的刮削器获取信息了。观看过程中，在播放器中可以搜索下载字幕。 安装天气插件 依然是在插件的所有库中，选择天气目录，安装 Gismeteo 插件。然后点击设置，在 Location setup 中设置位置，一般是地名的拼音。如果搜不到，可以手动去网站搜索所在地，搜到当地天气后记住浏览器地址中的数字部分，将其输入到天气插件设置的 Expert 选项中的 Location * ID 中，点击右侧保存按钮进行保存。最后回到上一层菜单，点击 启用 即可完成天气插件的配置。 其他： 重启蓝牙遥控器连接失效？ 看大佬们分析说原因貌似是文件系统权限问题。笔者没有蓝牙遥控器，以下提供帖子参考： 彻底解决CoreELEC系统刷emmc和蓝牙每次配对问题 解决emuelec关机或切换系统后不能重新连上蓝牙手柄问题 参考： 斐讯N1探索手记#1 – 降级并刷入armbian系统 斐讯天天链N1 官改v2.2 城通网盘 Lexsion 共享 N1刷完ARMBIAN想恢复EMMC超级简单线刷法，还可救砖 【2021-10-18更新】N1 可用的CoreELEC 19.2正式版，最新版，可写入emmc！ N1/T1 开机动画分享
Windows系统下载安装 Blackmagic Disk Speed Test
为何会有本文？ 看到很多大佬做评测会用一个名为 Blackmagic Disk Speed Test 的软件对某个“媒体位置”测速。与常见磁盘测速软件相比，它的特点是可以选择某个目录开始测速，于是它便可以很方便对网络位置进行测速。通过使用该工具测试存储媒体，我们可以直接了解到其能录制的视频。该工具可以很方便的在Mac的商店中找到，但笔者百度了一番，没有找到 Windows 下载指导。经过一番研究，发现此软件属于 Blackmagic Design的 Desktop Video 软件包 ，该软件包可以看作是其视频采集卡的驱动程序（上位机）。我们虽然没有购买其硬件，但不影响安装此软件包获取这个测速工具。 如何获取？ 访问 Blackmagic Design 官网，在Support中选择 Capture and Playback。 在左侧的 Latest Downloads 中下载最新版本的 Desktop Video 软件包。 安装下载 Desktop Video 软件包。 在 开始菜单 中找到 Blackmagic Disk Speed Test 应用程序。 运行程序，点击齿轮图标，在弹出的菜单中选择 Select target drive ，选择要进行读写测试的目录。 在主界面点击 SPEED TEST START 即可开始测速。 如果觉得安装这个软件包太大，而且没有相关硬件主程序毫无用处，可以将测速软件的文件夹单独拷贝出来，然后将软件包卸载。 此处提供笔者从 Desktop Video 12.1 中提取的 Blackmagic Disk Speed Test V3.3 版本下载，链接失效不补。
为路由器刷入第三方固件——以ASUS ACRH17刷OpenWrt为例简述其思路
前言 软件和硬件的准备： 步骤 准备固件映像 建立到路由器的shell连接 备份原厂数据 刷入新固件 参考 前言 最近翻出一个之前不知放在哪的ASUS ACRH17路由器，而且K2P、新三之类的路由器已经用了很多年了，是时候换一换了。同时感觉华硕原厂的固件功能太少，于是有了刷OpenWrt系统的想法。很多人都知道给电脑重装系统、给手机刷机，但不一定听说过给路由器刷机。那么给路由器刷第三方固件这项活动是因何而起的呢？ 当Linksys在2002年发布了使用Linux作为系统内核设计的WRT54G路由器，就为后来第三方固件的流行埋下了种子。转眼2003年3月Cisco收购Linksys。同年6月，Linux内核开发组听说WRT54G固件使用了包含GPL开源协议的Linux代码，遂要求Linksys开源相关部分代码，为此FSF还因此起诉Cisco，最终7月Cisco迫于外界压力开源了WRT54G的固件。至此，极客行动了起来，各种定制的固件和给路由器刷机的行为就流行了起来。后来大浪淘沙，其中OpenWrt、DD-WRT、Padavan、Asuswrt-Merlin（梅林）、Tomato、PandoraBox等固件成为了主流第三方固件项目。 注意：本文主要记录路由器刷入第三方固件的思路，以备日后刷其他型号路由器时参考，而刷固件的操作是因机而异的，随着相关项目的更新，某些操作可能会有变化。为路由器刷入第三方的固件的操作是个需要细心的活。您可能因为误操作、意外等情况损坏设备，所以务必小心操作！笔者不承担您的任何相关风险。 软件和硬件的准备： 连接shell的终端软件：用于通过SSH协议或串行口连接到路由器shell，可以使用PuTTY或其他熟悉的工具。 SCP客户端或一个U盘：备份出厂数据或固件时，用于通过网络传输文件到本地，使用scp（Linux），WinSCP （Windows）或其他自己熟悉的软件。或存储到U盘中（需要路由器有USB接口）。 网线、USB TTL转换器：通过网线连接以支持SSH登录、SCP传输文件等。USB TTL线可用于连接路由器主板的TTL调试接口，以访问Shell。 步骤 准备固件映像 建立到路由器的shell连接 备份原厂数据 刷入新固件 准备固件映像 刷机自然是要先把新固件准备好，这一般来源于论坛或Q群，比如恩山、OP大群、OpenWrt官方Wiki；也可以自己从GitHub拉取项目代码编译，这需要Linux系统并且有些难度。 根据不同机型，我们可能需要准备： 最终使用的系统固件（一般为后缀包含squashfs-sysupgrade的固件） 中转固件（一般是类似Linux Live CD那种RAM加载的临时系统固件，后缀为initramfs-kernel.bin；或是专用于从官方固件过渡到OpenWrt的系统固件，后缀包含factory字样） Bootloader固件（某些情况下我们需要刷入新的Bootloader，比如不死Uboot、Breed等） 并非在所有情况都需要准备以上所有固件，具体选择哪些文件，需要视情况而定。 比如，之前接触的Cisco Meraki Z1，其原厂固件非OpenWrt，不支持直接刷入sysupgrade，便有大佬编译了initramfs-kernel固件供大家使用DD指令刷入作为中转，然后通过该固件中提供的sysupgrade指令支持刷入最终的squashfs-sysupgrade固件。 而像ACRH17，虽然该机器保留原厂的Bootloader可以使用原厂提供的救援工具刷回原厂，但网友大多都是要刷第三方的Bootloader以实现通过Bootloader随意刷机的需求。需要注意的是，Bootloader对于路由器这类嵌入式设备是非常重要的 ，所以无论原厂固件还是一般的OpenWrt固件都是不允许重写Bootloader区域的，于是有网友编译了解锁Bootloader的squashfs-flash-factory固件。通过在原厂固件的固件升级页面中直接刷入该固件，便可以在Shell中执行重写Bootloader的命令了，最后便可通过第三方的Bootloader进行刷固件或一些其他的高级功能。 建立到路由器的shell连接 建立到路由器的Shell连接的方法，可以分为免拆机法和拆机法。不同型号能使用的方法不同，因为拆机法对于动手能力和工具有一定要求，所以优先选择免拆机的方法。 路由器的主板在设计时大多会留出四个排在一起的焊盘，这时为硬件调试留出的TTL串口，需要通过一定的电路分析经验找出其GND、TXD、RXD，然后通过USB-TTL转接器连接到电脑，在电脑的设备管理器中确认其串口号，然后使用Putty或SecureCRT等工具通过端口号连接。根据不同机型，有的可能需要提升Root权限，有的可能需要登录。 有些路由器厂商屏蔽了开启SSH远程登录的功能，但它的固件是使用OpenWrt固件定制的，这类便有机会通过浏览器注入等方式打开屏蔽的SSH。然后利用IP地址和端口号（默认22）使用Putty、Xshell等工具建立Shell连接。 而像ACRH17，华硕官方本身提供了打开SSH的设置，我们在系统管理->系统设置中将启用SSH选项设置为是即可打开SSH。然后利用IP地址和端口号（默认22）使用Putty、Xshell等工具建立Shell连接。 备份原厂数据 备份原厂数据也有拆机和免拆机两种方法。 目前路由器存储固件采用的存储器通常是SPI Flash或NAND Flash。SPI Flash一般会是8MB或16MB，容量较小；而NAND Flash容量相对大一些，比如ACRH17的NAND Flash容量为128MB。拆机取下存储器，通过烧录器连接电脑直接读取整个存储器的二进制映像以备份的方法是一种可靠的方法，但其需要的技术和工具也是个麻烦，SPI Flash的烧录器约20元左右即可买到，而NAND Flash的烧录器价格几百上千，这绝不是电子爱好者可以承受的。 ACRH17采用的128M NAND Flash方案，笔者家贫，没有NAND Flash烧录器，上文种已经获建立了SSH的连接，本文主要介绍的便是通过Shell备份。 使用以下命令查看分区结构，从回显的信息我们可以得知有mtd0~8共九个分区，以及其对对应的名字。 admin@RT-ACRH17:/tmp/home/root# cat /proc/mtd dev: size erasesize name mtd0: 00400000 00020000 "Bootloader" mtd1: 07c00000 00020000 "UBI_DEV" mtd2: 0005d000 0001f000 "nvram" mtd3: 0001f000 0001f000 "Factory" mtd4: 0001f000 0001f000 "Factory2" mtd5: 03013000 0001f000 "linux" mtd6: 02e11440 0001f000 "rootfs" mtd7: 03013000 0001f000 "linux2" mtd8: 02e11440 0001f000 "rootfs2" 使用 dd if=/dev/mtd* of=/tmp/mtd*_NAME.bin 命令依次备份各分区，备份文件的名字建议使用分区序号加名称。例如备份Bootloader的命令如下： admin@RT-ACRH17:/tmp/home/root# dd if=/dev/mtd0 of=/tmp/mtd0_Bootloader.bin 8192+0 records in 8192+0 records out WinSCP使用SSH的连接信息登录，然后从 /tmp 目录复制到本地进行妥善保存即可。需要注意的是， /tmp 目录是存在于路由器的RAM中的，断电后会丢失，所以在操作完毕前不要断电或重启路由器。 实践发现因为UBI_DEV分区太大，临时分区的剩余空间不足以存储其备份文件，这时我们可以借助一个U盘来存储备份的文件。插入U盘后可以在 /mnt/ 目录下看到U盘，使用U盘存储空间的路径替换上文命令的 /tmp/ 即可将文件备份到U盘中。此方法便不需要WinSCP来传输备份文件了。 虽然备份的文件大概率我们是不会用到，但是有了备份后我们便可以更放心的为其刷入固件了。 注意：ACRH17较重要的便是Factory区，其称为ART分区。据说其存储了该机器的无线校准数据，此为备份的重点关注对象。将所有分区全部备份后， 我们可以根据其名称和大小分析其具体的功能，有经验的大佬甚至能将其切割拼接做成编程器固件（可使用WinHex工具处理）。 刷入新固件 这次刷的是ACRH17，参考多数大佬的方案，刷不死OpBoot和OpenWrt。因为原厂系统以及默认的OpenWrt固件均不允许修改Bootloader，所以需要先刷入允许写入Bootloader的特殊OpenWrt固件，此功能是在OpenWrt固件编译时配置的。 在ACRH-17原厂固件升级页面上传并刷入解锁Bootloadder的 squashfs-flash-factory 固件并重写启动。 用户名：root 密码：password 使用U盘或WinSCP将opboot文件传输到路由器的 /tmp 目录下，参考使用以下格式命令计算其MD5并核对是否损坏，如有损坏切勿刷入。 md5sum /tmp/rt-acrh17-opboot-XXX.bin 校验无误后参考使用以下命令格式解锁Bootloader并使用OpBoot覆写。 mtd unlock /dev/mtd0 mtd -r write /tmp/rt-acrh17-opboot-XXX.bin Bootloader 按住WPS键接通电源，即可通过浏览器访问OpBoot固件更新页面，按页面提示上传固件即可刷入。 不同机型会有不同的方法。其他机型，有可以在原厂Bootloader中直接通过命令刷入新固件的，这种机型一般可在连接TTL串口时通过特定按键中断以进入Bootloader，也有可通过按键组合进入Web固件更新页面，但大多数的厂商会限制Bootloader只能刷入或引导原厂固件，这类情况一般通过更换第三方的Bootloader解决。具体可以参考Installing OpenWrt。 如何将ACRH17刷回官方固件：本文方案已经将Bootloader和系统都刷写成了第三方，如果只需要将系统刷回第三方可直接在华硕官网下载该路由器的最新固件，然后解压并在OpBoot页面刷入即可。如果需要将Bootloader也刷会原厂，可通过OpBoot的高级功能刷写Boot loader实现，mleaf大佬在此处提供了相关文件。 参考 Image formats-OpenWrt Documentation RT-ACRH17 免拆机刷不死OpBoot教程-恩山 Installing OpenWrt MLEAF-Files
前言： 准备工作： 改装： 1.拆机： 2.验证工作电压范围： 3.查找并改装电压采样： 4.制作充电电路： 5.装配： 参考： 前言： 简而言之，就是切断电池仓正极连接，换成锂电池。为锂电池并联一个充电模块，充电模块供电从MINI USB接口取电。ADC电压采样电阻是R17和R18，把R17 换成 1MΩ 、R18 保持 2MΩ 不变，这样修改后，使用锂电池时电压高于3.85V，应当不会再提示Low Bat。按照这个核心方案干就完了，下面全是废话。 （回忆···） 首先说明，下文讲述的笔者是5年前干的事情的，前端时间看见欠陥電気大佬写的搞机贴，觉得此事我可以水一篇博文。那时我还是在校学生，是校电协成员。记不清是哪位朋友发现这款型号为HP 39gs的计算器在某宝以非常便宜的价格销售，仅27.58元。从来没有接触过图形计算器的我，通过搜索引擎了解到这款计算器属于图形计算器，2006年上市，当时售价千元。里面是一枚SAMSUNG S3C2410A ARM处理器，该处理器最高频率约200MHz,在该计算器中，官方设计为75MHz。据说可使用HP Basic编程语言编写程序以在此计算器上运行，另外其不支持CAS，这些我不懂。我们几位社员一合计，咱们也从来没用过图形计算器，现在有机会必须试试。好家伙，这计算器值！于是大家就入手（Keng）了。注：经简单了解，目前此计算器价格有所上涨；另外因年代久远且其设计理念不佳（S3C2410A上运行的Saturn CPU模拟器，然后模拟器上运行SysRPL），所以在当今看来，功能少，运算慢，据说其根本不适合日常工程计算使用。购（Ru）买（Keng）需谨慎！当然，笔者拿来当普通计算器算个加减乘除感觉还是可以的。算的数多了也慢。 基本规格： * 型号： 惠普 HP 39gs 图形计算器 CPU： Samsung S3C2410A(ARM920T单核) @75MHz （实际最高约200MHz） Memory： 256KB RAM (用户实际可用约200KB) ，1MB Flash 通信接口： USB Mini-B(Kermit 或 XModem协议) ， IrDA ，4PIN 3.3V异步串口 供电： 4×AAA电池作为主电源 ，CR2032纽扣电池用于数据保持 屏幕： 131×64 像素+上方状态条 单色LCD，对比度可调 语言： sRPL ， HP-Basic 其他： 内置蜂鸣器，带有硬质保护壳，不支持CAS 上市时间： 2006年 06月 注：上表信息来自维基百科 准备工作： 实践本文内容需要如下硬件准备： HP 39gs 计算器 合适大小的锂聚合物电池 锂电池充电模块 导线若干（建议线规约22AWG） 螺丝刀（十字 1.0左右） 薄型撬片（或撬棒） 万用表（选配） 需要在技能树中点亮如下技能： 电子产品拆卸技术 基础电路知识 基本锡焊技术 警告：电子DIY需要有一定的相关知识与技能，操作过程有静电损坏元器件风险，使用烙铁焊接有烫伤风险。请谨慎操作，避免受伤或损坏设备。笔者不会对您的改装行为所造成的任何损失负责！ 改装： 我们在使用一周后发现了这一问题，耗电太快了。四枚普通AAA电池，使用一个星期就低电警告了。这对于我们这种穷苦学生怎么承受的了，所以大家想改锂电。原有供电系统为6V，考虑S3C2410A为3.3V IO系统，外围器件也多为3.3V供电，所以考虑单节锂电池供电是可能的。那年正是MPOS火爆推广的时候，1元即可买到一个MPOS还包邮，里面可以拆出拇指电池、4055单节锂电池充电IC、3.3V LDO、高精度运放IC、蓝牙模块、单片机（运气好可能是STM32）。这便给改装提供了思路，杀一只MPOS即可提供电池和锂电池充电IC，如果嫌一节电池容量太小，可以杀两只POS鸡。整个改装过程主要分为以下几步： 拆机 验证实际工作电压范围 查找并改装电压采样 制作充电电路 装配以完成改装 1.拆机： 该机器拆机简单，首先取下硬质塑料保护壳，使用薄撬片小心取下屏幕保护盖，避免划伤。使用螺丝刀拆下两颗螺丝，然后使用撬片沿机身四周撬开并取下底壳。需小心注意底壳上有电源与蜂鸣器的连接线，避免失手扯断连线。必要可使用烙铁拆焊部分连接线。请牢记各连线焊接位置，必要可拍照记录，以确保在装配时能正确复原。 2.验证工作电压范围： 拆下主电源（电池仓）连接线，临时焊接测试线，连接到数控电源，使用数控电源输出模拟锂电池电压变化。经过粗略测试，电压需要保持在3.68V以上计算器才能正常工作。虽然锂电池可以放电到更低的电压，但是计算器不能在那个电压下正常工作。这表示，虽然使用单节锂电池方案不能完全使用电池的电量，但也是可行的。 3.查找并改装电压采样： 首先检查主板上的所有IC，发现没有ADC。猜测低电检测是使用CPU内置的ADC实现的，4枚AAA电池电压高达6V以上，必有分压电路进行电源电压采样后再输入ADC。一般来说，电压采样电路可能更靠近ADC，此处即应靠近S3C2410A。考虑专业设计一般会引出测试点，先对周围测试点进行电压测量，如果能测到一个会随电源电压变化而变化的电压，大概就是电压采样测试点，如果测不到那就该对周围的电阻两端进行测量，找出会随电源电压变化的点。经过测量发现，S3C2410A右上角的测试点明显符合预期。观察PCB走线，发现与R17和R18有连接。测量两颗电阻阻值分别为1.8MΩ和2MΩ，皆在兆欧级别，也符合电压采样分压电阻的规格。至此，便成功的找到了分压电路。 理论上，接下来通过数控电源提供各种电压进行测试，确定ADC输入的电压低于多少时触发低电提醒。测量后我们确认到的是2.4V，实际电池低电电压与ADC触发电压的差与ADC触发电压的比值即为R17和R18的比值。经过估算，R17 = 1.5MΩ 、R18 = 3.9MΩ应当是个不错的组合。但是实际更换后并不能按照预期提示低电，无论电量多低都没有低电提示，直到电压低至无法开机也没有低电提示。鄙人学艺不精，无法理解什么原因，但这是无法接受的。经过多次实际测试，最终我们选择将R17 换成 1MΩ 、R18 保持 2MΩ 不变，这样计算器大约会在低于3.84V提示低电，充电至高于此电压后便不会出现低电提示。 4.制作充电电路： 可充电的锂电池装到计算器里面，当然不能没有充电电路。大家可以某宝购买TP4055、TP4056等充电模块，价格很便宜。笔者当年使用了中指甲盖大小的一片单面洞洞板，将MPOS机中拆出的4055充电IC整到了上面。4055充电IC为SOT23封装，以左下角为起点1脚，逆时针旋转依次为2~5脚。1脚接充电指示LED负极，LED正极过1K电阻上4脚，与其一同连接至输入+；2脚接GND；5脚为充电电流编程脚，过一个电阻接地，阻值大小视电池容量决定；3脚为输出，连接到电池+。 5.装配： 最后我们需要将计算器装起来，前面如果都能搞定，这个并不难。把电池的正负极与充电模块的输出正负极分别连接，然后连接到计算器的主电池输入。从USB口附近或其他方便的地方引出5V电源和GND到充电模块的输入。切断电池仓正极的连接，把电池粘在底壳合适位置以保证能盖好底壳，然后把充电模块粘在电池仓缝隙处，保证能从外面看到充电指示灯。最后把底壳装回去就大功告成了。 参考： HP 39gs --惠普官网 hpcalc.org The HP HOME view 将 HP 39gs 升级为 HP 48gII--欠陥電気 计算器自检/HP-39GS HP39gs 从入门到精通（完全教程）