分类 博客文章 下的文章

BL-RM7620N折腾笔记

事情起因是这样的。公司搬家捡垃圾,捡到了一路由器,看网口四根针,确认是百兆的垃圾路由器。本想丢掉,但后面标签写的制造商不太常见,所以捡回来拆了看什么方案。拆开看了眼板号是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连接GitHub仓库

前言:

讲一个笑话:最近给新电脑装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密钥对

首先可以检查下您电脑上有没有已经生产的可用的密钥对,他们是成对的一组文件,包含私钥和公钥。

  1. 打开Git Bash。
  2. 执行 ls -al ~/.ssh ,如果.ssh目录下有密钥对变回在回显的信息中看到文件名类似于:
    • id_rsa.pub
    • id_ecdsa.pub
    • id_ed25519.pub

这里,如果提示目录不存在,那看样子就是啥都没有了。如果有密钥对,就可以用后面的方法检查有没有密码加密,没有密码或者知道密码便可以直接用。否则就按下面的方法新建密钥对。

生成新的SSH密钥

如果您还没有 SSH 密钥,则必须生成新 SSH 密钥用于身份验证。为了安全,需要在生产的密钥对上添加密码保护。如果不想在每次使用 SSH 密钥时重新输入这个密码,您可以将密钥添加到 SSH 代理(即ssh-agent),让它管理您的 SSH 密钥并记住您的密码。

  1. 打开Git Bash。

  2. 复制下面的文本粘贴到Bash中执行(替换为您自己的 GitHub 电子邮件地址)。

    ssh-keygen -t ed25519 -C "your_email@example.com"

    注:如果您使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. 此时将以邮箱地址为标签生成新的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 密钥。

  1. 复制以下内容并将其粘贴到 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

  2. 重新开一个Git Bash窗口,ssh-agent首次被启动,自动搜索新增的密钥对,然后提示输入密码,按要求输入密码后密钥对就被加入了ssh-agent。以后运行 Git Bash 时便会自动启动 ssh-agent ,不再需要输入密码。

  3. ssh-agent 进程将继续运行,直到您注销、关闭计算机或终止该进程。

添加SSH 公钥到 GitHub 帐户

前面的操作概括来讲就是将本地的私钥添加到了本地的SSH代理中,下面要将公钥添加到GitHub上。

  1. 网页右上角点击头像,然后点击 Settings。在左侧找到 Access 部分,点击 SSH and GPG keys

  2. 点击右上方的 New SSH key,打开 SSH keys/ Add new 页面。

  3. 在 "Title"(标题)文本框中,为新公钥添加描述性标题,要求自己看到就知道是啥。 例如,如果密钥对用于枪神6笔记本上,此公钥名称可以是 "God of Gun 6"。

  4. 使用以下命令将 SSH 公钥复制到剪贴板,并粘贴到网页的"Key"(密钥)文本框中。最后点击 Add SSH key(添加 SSH 密钥),按提示输入GitHub的登录密码完成公钥的添加。

    clip < ~/.ssh/id_ed25519.pub

    提示:注意文件位置,此处是默认位置与文件名,如果前面你的位置不一样,需要灵活改变。如果 clip 命令不可用,可找到隐藏的 .ssh 文件夹,在常用的文本编辑器中打开该.pub文件,并将其内容复制到剪贴板。

这样GitHub那边有对应的公钥,我有对应的私钥,我本地的SSH便能够向GitHub证明我的身份啦。

测试 SSH 连接

测试连接时,您可能需要使用密码(即您之前创建的 SSH 密钥对的密码)验证此操作。如果密钥的密码之前没有缓存到ssh-agent中。如果是按照前面操作过来的,应该无需再次输入密码。

  1. 打开 Git Bash。

  2. 输入以下内容:

    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)?
  3. 验证所看到消息中的指纹是否匹配 GitHub 的 RSA 公钥指纹。 如果是,则输入 yes。如果一切正常,会看到GitHub返回了一段包含您的用户名的消息。

    > Hi username! You've successfully authenticated, but GitHub does not
    > provide shell access.

将远端仓库的 URL 从 HTTPS 切换到 SSH

  1. 打开 Git Bash。

  2. 将当前工作目录切换到为您的本地仓库。

  3. 列出现有远程仓库以获取要更改的远程仓库的名称,关注一下USERNAME和REPOSITORY部分。

    $ git remote -v
    > origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
    > origin  https://github.com/USERNAME/REPOSITORY.git (push)
  4. 使用 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 # 再次执行,检查修改结果

参考:

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 ,通过修改0x800BF000x800BF03 四个字节可以定义 J-Link V9 的 SN 。例如:0x800BF000x800BF03 依次是 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。

参考:

Arduino MKR Zero 上手笔记

前言:

笔者最近参与了 DigiKeyB站的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

开发资料:

开发环境部署:

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
}

参考:

Freenom域名注册的常见问题与自动续期

前言:

最近突然想再注册一个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中写的非常详细了,此处提供个小建议,不必设置每天检查,一个星期检查两次就可以了。其他具体部署本文不再赘述。

参考:

斐讯N1刷CoreELEC实录

前言:

斐讯的挖矿盒子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.2N1刷完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 中,点击右侧保存按钮进行保存。最后回到上一层菜单,点击 启用 即可完成天气插件的配置。

其他:

重启蓝牙遥控器连接失效?

看大佬们分析说原因貌似是文件系统权限问题。笔者没有蓝牙遥控器,以下提供帖子参考:

参考: