type
status
date
slug
summary
tags
category
icon
password
前言
为啥会有这个文章呢?这还得从我把路由器玩坏了说起。
为什么会把路由器玩坏掉呢?这还得从搭建本地开发环境说起。
为什么要....这还得.....
禁止套娃
好吧,为了搭建我的本地开发环境,我尝试使用 ssh 隧道做远程映射,映射的端口只有 localhost 才能访问,这个不符合我的初衷。
我的本意是外网的 ip 可以直接访问到我的本地开发环境。
于是就又选择了
frp
,这个真得好用,golang 开发,全平台支持。还不需要啥子依赖。但是,我的路由器固件不带frp
插件,意味着必须要进入命令行去配置,这就给我这种懒人带来很大的挑战了。为了,偷这个懒,我就想着,luci
可以安装插件,就直接安装一个frp
插件不好吗?说干就干,瞎几把搜索一通后一通操作下来,心想,这就结束了吗?不,不然就没有这篇文章了。
现实情况是,安装上去根本没有鸟用处。包括重启,删除
luci-indexcache
等操作,根本没有用处。这让我很怀疑人生,然后就是又开始了瞎几把折腾。我怀疑有没有出现的原因是有些软件版本过低,于是就开始一波升级操作。就是这波操作把自己的路由器作死了。(直接无法开机了)不过还没死透,毕竟是刷了 opboot 的家伙,还能苟活一波。这里略去我傻逼刷错固件这一波折腾(不然就跑题了)路由器起死回生后,我看到别人都可以编译路由器固件,于是决定自己来尝试一波。(其实这个念头很早就有了,只是我非常清楚编译这个很耗时的)编译固件
编译步骤:
- 准备编译环境
这个环境很是重要,好多环境可以避免踩很多坑
lean 是推荐
Ubuntu 18 LTS x64
不过我用的环境是 wsl2 debian
我的想法是,反正
ubuntu
就是居于 debian
的,用这个应该没有多大区别。- 准备编译工具
由于要进行交叉编译,因此需要很多的编译工具(也就是开发环境,这个很重要的,不然干不了活)
可以感受到在
linux
配置开发环境显然比win
舒服的- 下载固件源码
这里的速度用过都懂得,不用我讲。
编译过程中,会产生大量的中间文件,一度将我的 C 盘占满,不过系统依然无比流畅。如果是
linux
满了,很多命令都无法使用了。- 更新库,配置编译选项
这里的网络环境很重要的,不然就等着排查奇奇怪怪的错误吧。
这里就是我认为的最重要的一环了,毕竟这里我们才有了选择权
这里我们要完成最基本的选择
目标系统
,选择我们的 cpu 架构然后就是要编译的
目标镜像
不过,一些常见的路由器以及有大佬帮我们配置好默认配置了。
我们选上去就可以进行编译了。
真正需要选择的是给路由器编译的插件。
luci -> applications
这里就可以选择我们需要的插件了。上面的插件如果有什么不清楚干什么的可以尽情的百度(你懂的)
不过,我为了体验流程流程,我几乎把每个选项都浏览一下。<br />然后就是瞎几把乱选一通。(给后面留了好多坑)
- 开始编译
到了这里相信,已经非常熟悉该干什么了。
当然是刷机啦(不过我没有,因为刷机需要从新配置路由器)
这里的固件只有
35M
的大小踩坑经历
undefined reference to makedev
这是我遇到的第一个错误,也是我印象最深的一个,第一次有点难。不知所措。<br />当时,真的很想去提交一个
issue
的,不过我觉得把,这个小问题大佬一定不屑于回答,而且也没有时效性。遂放弃搜索了一圈后,发现需要添加头文件。
出错的文件是
mountlist.c
,在这文件里面添加# include <sys/sysmacros.h
即可- 第二则是编译
openssl
的时候出现一点问题,不过我忘记怎么解决的了。
具体的原因就是
sendmail
用到的openssl
库,但是这个库它不兼容旧版本了。出错原因就是一个类型没有具体的定义(不完全类型),解决方法是直接include
对于的实现文件,但是有 dalao 指出这样会使得ABI
不兼容,影响以后的patch
,这还了得,我一看,直接放弃编译这个鬼东西。- 第三个是,编译
v2ray
出现了一点问题。<br />go: finding github.com/v2ray/v2ray-core v4.22.1+incompatible
大概原因就是,编译的时候直接去下载依赖,但是处于鬼畜的原因<br />服务器返回不了正确的结果。变成了这样
server response: not found: github.com/v2ray/v2ray-core@v4.22.1+incompatible: invalid version: +incompatible suffix not allowed: module contains a go.mod file, so semantic import versioning is required
然后没办法下载依赖,不知道编译什么东西,就报错了。最后的解决方法在这里,换一个代理服务器。
- 到了这里,编译总算是没有报错了。不过安装的时候报错!<br />又是搜索引擎走一波,发现,在选择编译选项的时候有些东西选择重复了。把这些去掉就可以了。
到了这里,还是非常感谢
lean大
以及他维护的仓库的。结尾
我对固件还支持这种级别的路由器感到惊讶
虽然市面一定大量存在这样的路由器的。不过这有何妨,使用这样的路由器的显然不会去关心路由器使用什么固件。对于这些人来说,原厂的固件已经足够了,足够稳了。所以,这样的路由器大多数的是一直使用原厂固件知道淘汰。此外,现在的路由器价格也便宜了,配置也高了上来。这点可以看看小米路由器的配置,感谢联发科。
说实话我自己还有一个
16M ROM + 64M RAM
配置的路由器,不过由于性能问题,使用的pandavan
固件,会经常挂,根本无法使用。直接放弃即可,去卖二手,都不够邮费的。而且看看8M ROM + 64M RAM
路由器咸鱼上面的价格就知道了。那些说支持的,可能它家的固件是用汇编语言写的,性能高得一批。
后记
从语雀搬迁到 Notion 博客,格式有不少问题,费了不少功夫调整格式。
现在来看之前写的内容,充满一股稚气,言语之中还是有些偏激;内容和结构也无法很好给读者有实际性的参考价值,仅充当一篇胡言乱语吧(过时的乱语)。
文章得到了语雀的官方认证:「内容因含敏感信息已被系统屏蔽处理,其他人无法查看」…