俄罗斯vps(远程开机:一个简单的嵌入式项目开发)
AB资源网 2023-05-04 13:02 144 浏览 0 评论
1. 概述
- 本文介绍了一个简单的嵌入式项目的的开发过程;
- 从需求到实践,本文对整个过程做了全面的介绍,本文所介绍的设备容易获得且价格低廉;
- 本文涉及了 *Linux* 下 C 语言下的网络编程、网络广播、*Magic Packet*、内网穿透、反向代理等概念;
- 本文所涉及的一些技术概念读者可以自行参考其它的文章;
- 本文可能并不适合初学者

2. 需求
- 家里放了一台服务器,差不多我所有的东西都在服务器上,不管在家里还是其它地方,都需要连接这台服务器才能做事情;
- 这台服务器白天开着,晚上就关了(省点电:));每天起床以后要想着按一下服务器的电源开关,每天睡觉前要记得把服务器关了;
- 晚上忘记关服务器,通常不会有什么问题;但有时早上没有打开服务器,可能就要有麻烦了;
- 尴尬的时候就是早上没有打开服务器,然后外出,然后刚好需要登录服务器,这才想起来服务器没开;
- 所以呐,我需要有个机制,可以 **远程打开我的服务器**,这样我就不会再出现尴尬了;
3. 简要解决方案
- 我们把要完成的这个需求当作一个项目来做,可以把这个项目叫做服务器远程开机
- 首先要确保服务器的主板支持网络唤醒,否则不太好办,不过现在的绝大多数主板都是支持的(PCI 2.2 以后的主板一般都支持,而 PCI 2.2 的标准是1998年提出的),有些主板可能需要 BIOS 设置,请自行搜索解决方案;
- 第二是在家里的局域网上要有一个小设备是 24 小时运行的,通过这台设备在局域网上广播 Magic Packet 来唤醒服务器,这台设备应该是一台低功耗设备,越小越简单越好;我们姑且把这个设备叫做 wakener;
- 第三是要在这个 wakener 上编写一个简单的程序,这个程序可以在局域网上广播 Magic Packet,以唤醒服务器,这个程序我们称为 wakeOnLan;
- 第四是要有一个机制可以从互联网上访问到这台 wakener,只有这样才能从互联网上操控 wakener 上的软件,其实这是一个内网穿透的问题,要做到这一点或许需要一台连接到互联网上的轻量级服务器(VPS就可以);
- 这样我不管在哪里,通过终端(笔记本、台式机、手机、平板等)登录家里24小时开机的 wakener,运行 wakeOnLan,就可以打开我的服务器;
- 这台24小时运行的设备(wakener)有可能为你完成更多的事情,比如 NAS、远程开空调等等,但是重要的是完成眼前这个第一步。
4. 技术要点
上面的解决方案显然非常粗糙,但是这个项目本身确实也比较简单,没有必要做非常详尽的设计方案,所以我们下面仅列出一些可能的要点及解决方法
本项目的基本网络架构
下面是一个简单的示意图,表达了这个项目中各个设备是如何连接和互相影响的,其中 Local Server 是我们要远程开机的服务器,Server 是一台连接在互联网上的 VPS,用于内网穿透
图1:wake on lan架构图
Magic Packet
远程唤醒其实是网卡的一个功能,在 PCI 2.2 之后,信号线上多了一个 PME 信号,主机关闭电源后进入休眠状态,可以继续为网卡供电,网卡在收到一个叫做 Magic Packet 的数据包后,检测出该数据包是发给自己的,则会在 PCI 上发出 PME 信号,从而控制电脑启动,这个功能被称为 网络唤醒
网络唤醒其实并不复杂,在局域网中,从一台电脑以广播的形式发送 Magic Packet,那么在 Magic Packet 中指定的 MAC 地址对应的电脑就会被唤醒;
Magic Packet 就是一个指定格式的数据包,其格式为:6 个 0xff,然后 16 组需要被网络唤醒的电脑的 MAC 地址,比如需要被唤醒的电脑的 MAC 为:00:e0:2b:69:00:03,则 Magic Packet 为(16进制表述):
ff ff ff ff ff ff 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03 00 e0 2b 69 00 03
通常 Magic Packet 的广播使用 UDP 发送,端口号可以任意,通常使用 7 或者 9
关于 Magic Packet 的更多的信息请参考
- [wikipidia-网络唤醒](https://zh.wikipedia.org/zh-cn/%E7%B6%B2%E8%B7%AF%E5%96%9A%E9%86%92)
- [wikipedia-Wake-On-Lan](https://en.wikipedia.org/wiki/Wake-on-LAN)
从图1中可以看出,Wakener 通过路由器向局域网内广播 Magic Packet,从而唤醒 Local Server;
要注意的是,Magic Packet 只对有线网卡有效,所以,服务器要使用网线连接到路由器上;
内网穿透
在这个项目里,内网穿透指的是:使用一定的技术手段让我们可以从互联网上直接访问到家里的一台设备上,这台设备通过普通家用宽带连接互联网,家用宽带可能没有公网 IP;
如果家里的宽带有公网 IP,穿透内网并不是一个很困难的事,大致需要三个步骤:
- 在家里路由器上设置一个 NAT 让外网的访问直接转发到局域网内某个指定设备的指定端口上;
- 局域网中的一个设备(或者路由器本身)向某个有权限的公网服务器发送心跳包,使这个服务器可以知道家里宽带的公网 IP;
- 互联网上的终端设备通过服务器获知家里宽带的公网 IP,直接访问即可;
如果家里的宽带没有公网 IP(大多数宽带应该是这样的),穿透内网就要麻烦一些,通常需要使用反向代理来实现,这需要一个公网服务器;
- 公网服务器上安装有支持反向代理的服务器端软件,比如 *sshd*;
- 局域网的设备上装有反向代理的客户端软件,比如 *ssh*,通过向公网服务器发送反向代理的指令可以建立一个反向代理隧道(*tunnel*),*tunnel* 建立起来以后,访问公网服务器的某个指定端口将被映射到访问局域网中某个 IP 地址下的某个端口,从而实现内网穿透;
目前有很多的内网穿透的工具,其原理其实都是反向代理,但通常比直接用 ssh 要好用得多,至少 ssh 在意外断开后不会自动重连,这些工具都会解决这些问题;
本文所使用的嵌入式 Linux 系统将是 openwrt,理论上可以使用向日葵的内网穿透插件,愿意折腾的读者可以尝试折腾一下向日葵插件;
本文在内网穿透上将使用一个叫 frp 的开源项目,后面会给出这个项目的具体网址
其它要面对的麻烦
为硬件烧录或编译一个定制的 *Linux* 操作系统,还好本文的例子并不需要自己编译一个 *Linux*,烧录就好了;
交叉编译环境,这个是做嵌入式开发必须面对的,无法回避。
5. 简单的嵌入式开发步骤
- 需求分析
- 概要设计和详细设计
- 硬件开发及验证
- 编译与硬件相适应的操作系统及所需工具
- 建立在相应硬件上进行软件开发的交叉编译环境;
- 嵌入式软件开发;
- 调试
下面我们会依照这个开发步骤去实现我们的方案
6. 具体实践
需求分析和设计
本项目的开发的需求分析和设计已经在前面完成,鉴于该项目比较简单,就不做更详细设计了
硬件开发和验证
- 要找一个24小时运行的设备
我有一个早就不用的 迅雷一代赚钱宝(以下简称赚钱宝),不知道为何物的自己去百度一下
赚钱宝这个玩意 CPU 用的是 Amlogic S805,ARM Cortex-A5 架构,4核1.5GHz,功耗非常低,记住这个 CPU 的型号,记住这个 CPU 是32位的;
图2:赚钱宝外观
图3:赚钱宝主板
这个玩意有 *256M* 内存,1G 的 *Flash*,*100M* 网口和一个 *USB* 口,足够用了;
以前有一些厂家用这个 *CPU* 做网络机顶盒,现在应该没人用了;
淘宝上查了一下,赚钱宝一代是买不到了,但三代(玩客云)还有二手卖,大概在45 – 55元,用的CPU和一代一样,只是内存大了,如果你想折腾,也可以买一个来玩;
- 硬件验证
这个设备的硬件显然不需要验证,迅雷已经帮我们验证了;
实际上,这个设备可以有多种选择,如果你的路由器是 OEM 的,上面通常运行的都是 openwrt,那么你可以直接使用它;
或者你手头有闲置的机顶盒等,都有可能用得上;但是通常不建议使用平板,一是太耗电,二是把安卓刷成 *Linux* 有难度。
操作系统
赚钱宝上原有的 Linux 应该是迅雷自己编译的,很难知道迅雷在这个系统上做了什么,所以还是不用为好,需要刷个新的系统,CPU 为 S805 的设备通常都是支持 USB 刷机的,所以其实根本不用把它拆开,直接一条 USB 线就可以刷新系统了;
刷个 openwrt 是比较现实的,有现成的教程,而且 openwrt 资料丰富,便于今后折腾;
刷机教程:[废物利用之闲置矿渣迅雷赚钱宝一代刷OpenWrt固件发挥余热_智能设备_什么值得买];
刷机包及相应软件:(https://pan.baidu.com/s/1E4Ls05lPHHHhv0Ou8fb7GA);提取码:ow2l
刷机包提供了 openwrt 18 和 19 两个,建议刷 openwrt 19(因为我刷的是 openwrt 19)
具体刷机过程自己去享受吧;
刷好的机器应该是可以使用 ssh 登录的
- 首先要从你的路由器上找到这台 openwrt 的 IP 地址,比如为:192.168.2.100,然后用 ssh 登录,新刷的 openwrt 没有密码
ssh root@192.168.2.100
- 我这里登录以后的样子,登录以后一定要改一下 root 的密码
图4:ssh登录openwrt
- openwrt 还会有一个 web 界面,直接在浏览器上输入 IP 即可进入
图5:登录openwrt的web界面
图6:openwrt的web界面
- 这台设备最好不要使用 DHCP,而是使用固定 IP,这样便于以后远程登录,有三种方法设置固定 IP
1. 直接修改配置文件
openwrt 的网络配置文件放在 /etc/config/network 文件中,可以直接修改这个文件,改成下面这个样子:
图7:openwrt 改成固定 IP
2. 使用 openwrt 的 web 界面修改
从浏览器登录 openwrt 的 web 页面,其密码与 ssh 的密码一致,选择:Network –> Interfaces –> Edit
图8:通过openwrt的web界面修改固定IP
图9:通过openwrt的web界面修改固定IP
图10:通过openwrt的web界面修改固定IP
3. 在路由器上用 *MAC* 地址绑定 IP
实际上就是在路由器上设置 DHCP 每次分配 IP 时,给指定 MAC 地址的设备分配一个固定的 IP,这样,你的 openwrt 设备就不必设置固定 IP了,每种路由器的设置方法不一样,我的路由器的界面像这个样子
图11:通过路由器设定openwrt的固定IP
建立交叉编译环境
要在赚钱宝上写程序,需要我们在本地电脑完成编程,然后用交叉编译的工具编译成在赚钱宝上可以运行的程序,传到赚钱宝上才可以在赚钱宝上运行;
所以我们需要有一个工具链,对我们编写的程序进行交叉编译;
这个工具链不是放在 wakener 上的,因为 wakener 通常性能比较差,而且为了节省存储空间,上面通常只放一些运行时(runtime)库,不具备开发的能力;所以这个工具链要放在另外一台运行着 Linux 的机器上,也可以运行在虚拟机上,我们把这台电脑叫做 开发机,建议在开发机上运行 ubuntu;
下面是建立这个编译环境的过程
- 首先 *ssh* 登录你刚刷的 *openwrt*,查看你刷的 *openwrt* 的版本号:
图12:查看openwrt的版本号
- 下载适当的 sdk
去 [openwrt官网](https://downloads.openwrt.org) 找到你所需要的版本号下的 sdk,要选择 at91/sama5 目录下的,这个是 cortex-A5 架构(CPU S805 的架构)的工具链
[我的工具链的下载地址](https://downloads.openwrt.org/releases/19.07.7/targets/at91/sama5/openwrt-sdk-19.07.7-at91-sama5_gcc-7.5.0_musl_eabi.Linux-x86_64.tar.xz)
注意这个工具链只能运行在 Linux 下,我是运行在 Ubuntu 下,而且 openwrt-19.07.7 的 SDK 只有 64 位 X86 版本;
先将这个工具链下载到 ~/Downloads/ 目录下
wget https://downloads.openwrt.org/releases/19.07.7/targets/at91/sama5/openwrt-sdk-19.07.7-at91-sama5_gcc-7.5.0_musl_eabi.Linux-x86_64.tar.xz -C ~/Downloads/
再将其解压出来
cd ~/Downloadstar -xvf openwrt-sdk-19.07.7-at91-sama5_gcc-7.5.0_musl_eabi.Linux-x86_64.tar.xz
在 ~/Downloads/ 目录下会建立一个新目录 openwrt-sdk-19.07.7-at91-sama5_gcc-7.5.0_musl_eabi.Linux-x86_64,进入到这个目录,可以看到一个 staging_dir 目录
cd openwrt-sdk-19.07.7-at91-sama5_gcc-7.5.0_musl_eabi.Linux-x86_64/ ls
这个 staging_dir 目录下的所有内容就是一个完整的工具链,我们可以把这个工具链单独拿出来使用;
我把这个目录拷贝到了 ~/tooschain/openwrt-a5/ 下,我们之所以放到 ~/toolschain/ 下,是因为我们还可能有别的设备的工具链,都放到这个目录下便于管理
mkdir -p ~/toolschain/openwrt-a5/cp -fr ~/Downloads/openwrt-sdk-19.07.7-at91-sama5_gcc-7.5.0_musl_eabi.Linux-x86_64/staging_dir/* ~/toolschain/openwrt-a5/
现在我们已经有了一个完整的工具链,但这个工具链基本上是没办法用的,我们需要简单的配置一下,其实就是设置一些环境变量;
在 HOME 目录下编辑一个文件 a5.sh,内容如下:
#!/bin/bash#A5 arm-linux-musl-eabi工具链,用于一代赚钱宝openwrt export PATH=/home/whowin/toolschain/openwrt-a5/toolchain-arm_cortex-a5+vfpv4_gcc-7.5.0_musl_eabi/bin:$PATHexport STAGING_DIR=/home/whowin/toolschain/openwrt-a5
其中 /home/whowin 为我的 HOME 目录,你要更改为你的 HOME 目录;
其实这个文件就是修改了环境变量 PATH,然后增加了一个环境变量 STAGING_DIR,这些设置都是为了能够正常使用这个工具链;
将这个文件设置为可执行,然后把这个文件拷贝到 /bin/ 下:
cd ~vi a5.sh(编辑内容并存盘)chmod 755 a5.shsudo cp a5.sh /bin/
放到 /bin/ 目录下只是为了用起来方便,并没有特别的含义;
下面我们可以试一下这个工具链
source /bin/a5.sharm-openwrt-linux-gcc -v
下面是在我的机器上的输出:
图13:测试工具链
源程序
有了工具链就可以编程了,编程的过程要在开发机上完成,不是在 openwrt 下,但是用这个源程序编译出来的可执行文件是要在 openwrt 下运行的;
下面是这个项目中需要在 openwrt 下运行的程序 wakeOnLan 的源程序
/****************************************************************************** File Name: wakeOnLan.c Description: 向局域网中的计算机发出远程唤醒的指令 该程序将运行在迅雷一代赚钱宝上(已刷openwrt),用于唤醒主机 Compile: source /bin/a5.sh arm-openwrt-linux-gcc -Wall wakeOnLan.c -o wakeOnLan Usage: wakeOnLan [boradcast IP] [MAC] Example: sudo ./wakeOnLan 192.168.2.255 00:e0:2b:68:00:03 Date: 2022-07-26 *******************************************************************************/#include
这个程序本身比较简单,注释比较完整,也没什么好说明的。
交叉编译
交叉编译当然也是在开发机上完成;
假定我们把上面这个源程序放在 ~/wake_on_lan/ 目录下,下面是交叉编译的过程:
cd ~/wake_on_lan source /bin/a5.sh arm-openwrt-linux-gcc -Wall wakeOnLan.c -o wakeOnLan
交叉编译的过程难免出错,请自行排错;
交叉编译完成的程序是不能在开发机上运行的,需要拷贝到 openwrt 上才能运行,仍然假定 openwrt 的 IP 地址为:192.168.2.100,则可以这样将已经编译好的程序拷贝到 openwrt 上,操作在开发机上完成
cd ~/wake_on_lan scp wakeOnLan root@192.168.2.100:/root/
在 openwrt 上运行程序
用 ssh 登录到 openwrt,登录后应该就在 /root/ 目录下,因为 /root/ 是 root 用户的 HOME 目录,然后运行程序
ssh root@192.168.2.100./wakeOnLan 192.168.2.255 00:e0:2b:69:00:03
第一个参数是局域网上的广播 IP,第二个参数是要被远程唤醒的机器的 MAC 地址,请根据你的具体情况进行修改
在我的机器上运行效果是这样的
图14:在openwrt上运行wakeOnLan
软件调试
– 这个程序的调试主要是确保程序能够正确地发出 magic packet,需要在局域网上找另一台机器进行数据包的监听,这台监听的机器既可以运行 windows 也可以运行 Linux,最好是使用准备远程唤醒机器作为监听的机器,我们以一台运行 ubuntu 的机器为例来完成调试
使用 ubuntu 下的工具 tcpdump 来进行数据包的监听,tcpdump 必须在 root 权限下运行;
首先在监听机器上运行 tcpdump
sudo tcpdump -vv -x udp port 7
这行命令的意思就是监听 udp 端口 7 的数据包,-vv 的意思是显示详细的信息,-x 的意思是按照 16 进制显示,这两个参数也可以写成 -vvx
在 openwrt 上运行 wakeOnLan
./wakeOnLan 192.168.2.255 00:e0:2b:69:00:03
其中的广播 IP 和 MAC 地址请按照实际情况填写
正常情况下,在监听机器上可以看到程序发出的 Magic Packet,仔细看一下这个数据包的格式是否正确
在我的环境下,看到的输出如下:
图15:侦听Magic Packet
其中黄线标识的部分是 IP 头,占 20 个字节;绿线标识的部分是 UDP 头,占 8 个字节,剩下的就是 Magic Packet;
如果你正常地侦听到了一个完整且正确的 Magic Packet,那么恭喜你,就快要成功了;
如果你使用 windows 侦听 Magic Packet 数据包,通常使用著名的 Wireshark。
局域网内的网络唤醒测试
– 把需要网络唤醒的机器关机,如果需要设置 BIOS,要先设置好 BIOS 再关机;
– 使用局域网内的另一台电脑 ssh 登录 openwrt,或者使用手机登录 openwrt,如果使用手机登录,需要在手机上安装一个终端 app,我使用安卓手机,安装的 app 叫 ConnetcBot,推荐大家试一下;
在 openwrt 运行你编写的程序 wakeOnLan,如果你运气好,你那台刚刚关机的电脑应该被默默的打开了电源
但是,通常都没有那么好的运气,那么可能的问题如下:
1. 程序里的广播 IP 是不是正确?
2. Magic Packet 中的 MAC 地址是否正确?
3. Magic Packet 的格式是否正确?
4. 被唤醒的机器是否与 openwrt 在同一个网段?
5. 路由器是否限制了 UDP 的端口 7?
6. 如果以上都没有问题,恐怕只能怀疑你那台要被唤醒的机器不支持网络唤醒,或者 BIOS 设置的不正确
内网穿透
做到现在这样,我们已经完成了大部分工作,下面唯一要做的是如何从外网上访问到这台 openwrt 的设备,这就是前面说过的 内网穿透;
搞内网穿透是需要在互联网上有一台服务器(VPS)的,可以是那种很便宜性能很弱的VPS,因为我们不干别的事,就是转发一下数据而已;
我自己使用的是一台俄罗斯的 VPS,价格只有 US$13.04/年,512M内存,5G的SSD,运行 ubuntu 20.04,虽然配置低,但是用起来感觉还是不错的,我很乐意推荐给大家:
- [俄罗斯VPS](https://justhost.ru/?ref=149230)
前面说过我使用的内网穿透的工具是一个开源项目,叫做 frp,项目地址如下:
- [frp内网穿透项目](https://github.com/fatedier/frp)
- 该项目有中文文档,大家可以按照文档下载适当的 release,其服务器软件 frps 运行在服务器(VPS)上,客户端 frpc 运行在 openwrt 上;
- 通常服务器端软件都是 64 位的 X86 架构,比较容易搞定;
- 要注意的是,要看清楚运行 openwrt 的设备是什么架构,是 32 位的还是 64 位的,比如本文中的设备 CPU 为 S805,就是一个 32 位的 arm 架构,否则你下载的客户端软件可能无法运行;
- 这个软件的设置还是要费一些功夫,请认真阅读该项目的文档,并参考其范例;这里我给出我的实例
服务器端配置文件:frps.ini,其中的 xxx.xxx.xxx.xxx 请按照实际情况设置,frp_log_path 请指向实际存放 frp 日志的目录
[common]bind_addr = xxx.xxx.xxx.xxxbind_port = 57000bind_udp_port = 57001kcp_bind_port = 57000proxy_bind_addr = xxx.xxx.xxx.xxxvhost_http_port = 58080vhost_https_port = 58443log_file = /frp_log_path/frps.loglog_level = infolog_max_days = 3disable_log_color = falsedetailed_errors_to_client = trueauthentication_method = tokenauthenticate_heartbeats = falseauthenticate_new_work_conns = falsetoken = skyline.adminoidc_client_id =oidc_client_secret = oidc_audience = oidc_token_endpoint_url = allow_ports = 58000-59000,50000-53000max_pool_count = 15max_ports_per_client = 0tls_only = falsesubdomain_host = frps.comtcp_mux = true
客户端配置文件:frpc.ini,其中的 xxx.xxx.xxx.xxx 请按照实际情况设置;openwrt.aaa.com 是一个 A 记录指向 VPS 的域名(子域名),也要根据实际情况进行设置
[common]server_addr=xxx.xxx.xxx.xxxserver_port=57000log_file=/tmp/frpc.loglog_level=infolog_max_days=3disable_log_color=falsetoken=skyline.adminpool_count=5tcp_mux=trueuser=whowinlogin_fail_exit=falseprotocol=tcptls_enable=falsetdns_server=8.8.8.8admin_addr=127.0.0.1admin_port=7400admin_user=skylineadmin_pwd=admin[ssh]type=tcplocal_ip=192.168.2.100local_port=22use_encryption=falseuse_compression=falsecustom_domain=openwrt.aaa.comremote_port=52998health_check_type=tcphealth_check_timeout_s=3health_check_max_failed=10health_check_interval_s=30[openwrt_web]type=httplocal_ip=192.168.2.100local_port=80use_encryption=falseuse_compression=truecustom_domains=openwrt.aaa.comheader_X-From-Where=frp health_check_type=http health_check_url=/ health_check_interval_s=90 health_check_max_failed=3health_check_timeout_s=3
启动 VPS 上的 frps,path_to 指向实际路径
/path_to/frps -c /path_to/frps.ini &
启动 openwrt 上的 frpc,path_to 指向实际路径
/path_to/frpc -c /path_to/frpc.ini &
如遇问题,强烈建议认真查看 frps.log 和 frpc.log;
正常情况下,现在你已经可以在互联网上通过 frp 访问你家里的 openwrt 了,像这样:
ssh root@xxx.xxx.xxx.xxx -p 52998
其中:xxx.xxx.xxx.xxx 为 VPS 的 IP 地址,52998 是在 frpc.ini 中设置的端口号,也可以设置一个域名指向 VPS 的 IP,比如设置 vps.aaa.com 的 A 记录指向 VPS,则可以这样登录 openwrt:
ssh root@vps.aaa.com -p 52998
同样,按照上面的设置,如果要访问 openwrt 的 web 界面,在浏览器上输入:openwrt.aaa.com:58080 即可,58080 是在 frps.ini 中设置的一个端口号;
特别要注意的是,要在 VPS 上设置好防火墙,放开可能用到的端口,否则 frp 将无法正常工作。
远程开机测试
测试远程开机使用的电脑、平板或者手机,不能连接到家里的 wifi 上,建议使用手机,关掉 wifi,打开 ConnectBot
设置连接如下:
图16:在ConnectBot上设置连接
通过 *frp* 连接到 *openwrt*
图17:在ConnectBot上连接openwrt
在 openwrt 上运行 wakeOnLan
图18:在openwrt上运行wakeOnLan
正常情况下,MAC 地址指定的机器应该已经开机了;为了运行方便,你可以在 openwrt 上写一个 shell 脚本,免得每次都要输入 IP 地址和 MAC 地址,像下面这样,注意,openwrt 下的 shell 是 ash
$ cat wakeOnLan.sh #!/bin/ash/home/whowin/wakeOnLan 192.168.2.255 00:e0:2b:68:00:03 $
7. 后记
前面提过,Magic Packet 可以在任意端口发送,通常使用端口 7 或 9,我们这个例子使用端口 7 发送,读者可以试一下从其他端口发送,比如端口 1234;
实际上,openwrt 是有现成的网络唤醒模块的,可以在 openwrt 的 web 界面上搜索 luci-app-wol,安装这个软件的同时,还会安装一个 etherwake 的软件,安装好以后,可以使用类似 etherwake -b AA:BB:CC:DD:EE:FF 的命令发送 Magic Packet 唤醒指定的机器,也可以通过 web 界面唤醒指定的电脑
图19:在web界面上发送Magic Packet
至此,我们的这个项目就算做完了,我们基本上经历了一个嵌入式开发的全过程,只是每一个阶段都比较简单而已,嵌入式开发,貌似复杂,其实并没有想象的那么难;
在嵌入式项目的设计阶段,我们需要有足够的知识储备以便为我们的需求提出最合理的方案,在这个项目的设计中,正是由于我们储备了 Magic Packet 和反向代理的知识,才可以为我们的需求提出这样一个软硬件结合的方案;
我们这个项目基本没有硬件开发,但是通常情况下,嵌入式开发的软件工程师是需要参与到硬件开发中去的,包括芯片方案的选择等都要参与意见,以便设计开发的硬件产品在今后的软件开发中可以比较顺利,所以嵌入式软件工程师同样要具备阅读芯片的 datasheet 的能力和看懂硬件原理图的能力,好的嵌入式软件工程师也可以拥有非常不错的焊接技能;
嵌入式开发的最关键的地方还是软件开发,但比普通的软件开发所要了解的知识要多很多,比如在我们这个项目中,我们必须要知道我们所用的硬件的 CPU 是什么,甚至要知道这个 CPU 的架构,否则,我们无法为这个硬件构建正确的操作系统,也无法在开发机上为这个硬件构建正确的交叉编译环境;
如果你喜欢做嵌入式开发,希望这篇文章能给予你帮助。
最后欢迎访问我的博客:https://whowin.gitee.io
whowin – 发表我个人原创作品的技术博客
- 上一篇:linuxssh登录慢(linux登录很慢)
- 下一篇:免备案云服务器,无忧上云!
相关推荐
- 云主机FTP软件:高效传输与安全管理的一站式解决方案
-
在云计算时代,云主机已成为企业和个人用户托管应用和存储数据的首选。为了方便文件传输,FTP(文件传输协议)软件在云主机环境中扮演着重要角色。本文将详细介绍如何在云主机上配置和使用FTP软件...
- 云主机FP:引领未来计算,解锁无限可能
-
云主机FP(FloatingPoint)是指在云计算环境中,针对浮点运算性能进行优化的虚拟机实例。浮点运算在科学计算、工程模拟、金融建模、图形处理等领域中占据重要地位,因此云主机FP的设计和配置...
- 云主机ECS:解锁企业数字化转型的新引擎,高效、安全、灵活的云计算解决方案
-
云主机ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,它允许用户在云端创建和管理虚拟机实例。ECS的核心优势在于其灵活性和可扩展性,能够满足各种规模和类型的业...
- 云主机D盘:解锁无限存储空间,轻松应对大数据挑战!
-
云主机是一种基于云计算技术的虚拟化服务器,它允许用户在云平台上创建、配置和管理虚拟机实例。在云主机中,磁盘分区是存储数据的关键部分,通常包括系统盘和数据盘。系统盘用于安装操作系统和运行应用...
- 云主机DNS解析:提升网站速度与稳定性的关键策略
-
云主机DNS(DomainNameSystem)是云计算环境中至关重要的一部分,它负责将域名转换为IP地址,从而使得用户能够通过易于记忆的域名访问云主机上的服务和应用。本文将深入探讨云主机DNS...
- 云主机C盘爆满?快速解决方法大揭秘,让你的服务器重获新生!
-
云主机C盘满了是一个常见但棘手的问题,尤其对于依赖云服务进行日常运营的企业和个人用户来说,这可能导致系统性能下降、应用程序崩溃,甚至数据丢失。本文将详细探讨云主机C盘满的原因、影响以及解决方法。...
- 云主机CPU选择指南:提升性能与效率的关键决策
-
在选择云主机的CPU时,用户需要考虑多个因素,以确保所选的CPU能够满足其应用的需求,同时优化成本效益。以下是一些关键点,帮助用户在云主机CPU选择过程中做出明智的决策。了解应用的性能需求...
- 云主机CPU性能大比拼:揭秘顶级云服务商的核心竞争力
-
云主机CPU是云计算环境中至关重要的组成部分,它直接影响着云服务的性能、稳定性和用户体验。CPU,即中央处理器,是计算机系统的核心,负责执行指令和处理数据。在云主机中,CPU的性能决定了虚...
- 云主机ASP:高效搭建动态网站,轻松实现业务扩展与性能优化
-
云主机ASP(ActiveServerPages)是一种在云环境中运行ASP应用程序的技术。ASP是一种由微软开发的动态网页技术,允许开发者使用VBScript或JScript等脚本语言编写服务...
- 云主机API:解锁无限可能,引领企业数字化转型新纪元
-
云主机API(ApplicationProgrammingInterface)是云计算服务提供商为用户提供的一种编程接口,允许开发者通过编程方式管理和操作云主机资源。这些API通常基于RESTf...
- 云主机99idc:高效稳定,轻松搭建您的专属云端空间,一键部署,畅享无限可能!
-
云主机99idc是一家专注于提供云计算服务的公司,其核心业务是为企业和个人用户提供高性能、高可靠性的云主机服务。随着数字化转型的加速,云计算已经成为企业IT基础设施的重要组成部分,而云主机99i...
- 云主机80端口:解锁无限可能,开启高效网络新时代!
-
云主机是一种基于云计算技术的虚拟化服务器,它通过互联网提供计算资源和服务。在云主机中,80端口是一个非常重要的端口,通常用于HTTP协议,即网页服务。本文将详细探讨云主机80端口的相关内容...
- 云主机403错误:解锁高效解决方案,提升网站性能与安全
-
云主机403错误是一个常见的网络问题,通常表示用户在尝试访问某个资源时被服务器拒绝。这种错误可能由多种原因引起,包括权限问题、配置错误、防火墙设置等。以下是关于云主机403错误的一些详细信...
- 云主机360:全方位云端解决方案,助力企业数字化转型无忧
-
云主机360是一种基于云计算技术的虚拟化服务器解决方案,它通过将物理服务器资源虚拟化,为用户提供灵活、高效、安全的计算服务。云主机360的核心优势在于其高度的可扩展性和弹性,用户可以根据业务需求...
- 云主机301:引领未来云计算的新纪元,高效稳定,助力企业数字化转型!
-
云主机301是一种常见的网络重定向状态码,通常用于指示用户请求的资源已被永久移动到新的URL。在云计算环境中,云主机301状态码的出现可能涉及到多种技术和管理策略,下面我们将详细探讨这一现象。...
你 发表评论:
欢迎- 一周热门
-
-
HostYun廉价洛杉矶三网回程CN2 GIA云服务器内测13元/月起(美国原生IP,去程10Gbps防御)
-
大网数据:双12秒杀聚惠,湖北100G高防云低至0元/月,湖北独服务器低至210元、200G高防+50Mbps带宽
-
HostYun洛杉矶大硬盘云服务器9折22.5元/月起(240G-500G硬盘/1Gbps/10G防御)
-
樊云香港双程CN2及洛杉矶50G高防三网CN2 GIA云服务器9折22.5元/月起
-
大网数据、湖北高防云服务器低至39元/月起、湖北高防独服务器低至245元起(200G硬防、金盾+傲盾防CC)
-
spinservers圣何塞/达拉斯10Gbps带宽高配服务器月付89美元起
-
tmhhost美国高防云服务器8折_CeRaNetworks机房/三网cn2直连/适合建站
-
高防服务器大网数据湖北独服务器低至210元、200G高防+50Mbps带宽
-
DogYun新上韩国独立服务器,E5/SSD+NVMe优惠后300元/月,自动化上架
-
初忆云 – 2020年中云聚惠全场五折 BGP云服务器低至88/年,抓紧上车
-
- 互动交流
- 标签列表
- 最新评论
-
您的文章条理清晰,论述有据,说服力强。您的文章情感真挚,能够触动人心,引起共鸣。https://www.renhehui.com/renhehui/1479.h
沉醉于月色 评论于:08-09虚拟机部署好后跟物理机一样当服务器的,只是它依赖了本地物理机不要关机为前提。对于外网访问内网场景,本地内网搭建服务器后需要提供到互联网上连接访问的,比较简便的
访客 评论于:03-01刘中宜 评论于:11-01
访客 评论于:06-03
AB资源网 评论于:05-08
AB资源网 评论于:11-22
AB资源网 评论于:11-22
頹廢了悲伤 评论于:11-15
南风知我意 评论于:11-15
心若冰凝 评论于:11-15