华为路由器固件类型-(华为路由器固件类型怎么选)

常见问题 次浏览手机阅读
华为路由器固件类型 (如何选择华为路由器固件类型) 起因

最近考研刚结束,有时间写文章。在复习的时候,我经常忍不住折腾各种各样的东西,所以有一天我看中了华为路由器。什么?华为路由器,你可能会有这样的问题,华为路由器不是自己开发的芯片,就像我手中的华为路由器一样,是华为自己开发的凌霄芯片,不开放,怎么扔?所以有以下的研究过程。

折腾什么

首先,能折腾什么?就像我手里的树莓派一样,刷一下OpenWrt容易举起系统。有些人可能会有一些问题,OpenWrt什么是系统?其实这是一个开源路由器操作系统,很多路由器系统都是在此基础上开发的,可玩性很高。但华为路由器甚至没有打开固件下载,折腾系统的道路也不合适。

路由器插件的开发呢?这似乎是可行的,但在这个时候,我只知道路由器插件只能安装在华为路由器的特殊市场,路由器已经购买了好几年,只有几个插件,主要是IOT家电控制的应用,但这条路理论上是可行的,所以决定开发折腾路由器插件。

申请Debug版本固件

目前,只要华为路由器有插件应用市场,理论上支持路由器插件的开发,许多其他品牌的路由器也支持,但每个路由器的开发方式都不同,您可以参考官方文件。目前我手里只有华为路由器,型号是荣耀路由Pro2.这是几年前的路由器。它已经下市,固件也没有更新。通过华为官方网站的文档,我将路由器序列号发送给华为联系邮箱,等待路由器适应完成并更新固件,然后转移到Debug版本。

了解插件系统

华为路由器运行OpenEE在此基础上开发平台和插件,路由器硬件通过OSGI接口提供调用能力,插件运行JVM上。JVM?是的,就是我们Java程序员喜欢JVM。Debug版本可以直接使用root用户登录到路由器运行的后台,基本上Linux支持命令。然后我在路由器上找到了它JVM研究一下,其实就是研究一下rt.jar源代码,这个JVM这是一个非常简单的版本。许多与路由器操作无关的类别被删除,并添加了许多华为自己写的类别。然而,我们编写程序最常用的类别并没有简化。

插件开发和后端的插件开发JVM开发API接口可直接用于前端调用HTML开发任何前端技术,但需要调用后端API只能使用特定的函数,最后上传开发的应用程序到路由器运行,也可以直接在路由器市场打开运行和卸载。

跑通Demo

您可以根据官方文档进行操作。我不会在这里发布链接。如果您需要开发,您可以直接在华为开发者的官方网站上搜索路由器开发文档或与我讨论。首先,环境开发需要做好准备,JDK1.8、Maven基本上就够了,然后运行官方脚本到Maven几个华为自己的本地仓库被引入华为Jar包即可。

Demo项目是Maven熟悉项目类型Java应该熟悉开发,可以用自己喜欢的软件开发,比如我喜欢用idea进行开发。执行mvn install,生成对应的Jar然后通过官方提供的脚本打包Apk文件,是的,是的Apk文件,但不是安卓上的Apk,相反,华为路由器对应Apk然后官方还提供了上传应用程序的工具,直接上传。

就这样,一个Hello Word应用程序跑到路由器上。只是官方提供的Demo项目没有前端,只能在后台控制台上查看相应的输出。如果需要开发前端,需要通过公网服务器上传相应的前端文件IP进行调用。

在路由器上跑Web服务器

Demo应用跑通了,接下来要做什么?由于路由器运行JVM,那么跑Web应用程序应该没有问题,我的路由器有512M内存,低负载Web应用程序应该没有问题。在此基础上,我们可以做任何我们想做的事情,比如做NAS服务器,当内部博客服务器等,当然,如果你有公共网络条件,也可以用作小型博客服务器,这里只讨论内部网络应用。JDK1.8本来内置了一个简单的内置HttpServer可惜路由器JVM简化了这一类,所以我写了以下类文件。

package ml.minli.tool.util;import javax.activation.MimetypesFileTypeMap;import java.io.*;import java.net.*;public class HttpServer extends Thread{ private final int port; private ServerSocket serverSocket; private static final MimetypesFileTypeMap mimetypesFileTypeMap = new MimetypesFileTypeMap(); public HttpServer(int port){ this.port = port; }@Override public void run(){ try{ serverSocket = new ServerSocket(port); while (true){ Socket socket = serverSocket.accept(); HttpRequestHandler httpRequestHandler = new HttpRequestHandler(socket); httpRequestHandler.handle(); socket.close(); }}catch (Exception e){ e.printStackTrace(); }finally{ if (serverSocket != null && !serverSocket.isClosed()){ try{ serverSocket.close(); }catch (Exception e){ e.printStackTrace(); }}}}private static class HttpRequestHandler{ private final Socket socket; public HttpRequestHandler(Socket socket){ this.socket = socket; }public void handle(){ try{ StringBuilder stringBuilder = new StringBuilder(); InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream()); char[]chars = new char[1024]; int mark; while ((mark = inputStreamReader.read(chars)) != -1){ stringBuilder.append(chars, 0, mark); if (mark < chars.length){ break; }}if (stringBuilder.length() == 0){ return; }//截取每行请求 String[]lines = stringBuilder.toString().split("\\r\ "); if (!lines[0].isEmpty()){ //截取URL String[]infos = lines[0].split(" "); String info = URLDecoder.decode(infos[1], "UTF-8"); File file; if (info.equals("/")){ file = new File(USBInfo.usbPath "/index.html"); }else{ file = new File(USBInfo.usbPath info); }//文件不返回404 if (!file.exists()){ socket.getOutputStream().write(("HTTP/1.1 404 Not Found\\r\ " "Content-Type: text/html; charset=utf-8\\r\ " "\\r\ ").getBytes()); return; }String contentType = mimetypesFileTypeMap.getContentType(file); socket.getOutputStream().write(("HTTP/1.1 200 OK\\r\ " "Content-Type: " contentType "; charset=utf-8\\r\ " "\\r\ ").getBytes()); FileInputStream fileInputStream = new FileInputStream(file); byte[] b

喜欢 ()