书接上会,之前用N100作为软路由。N100一切都挺好,但是功耗有点高,而且机器占地面积也有点大。同时所有功能都集成在N100的话,N100一旦重启,家里整个网络就崩了。还是有一个自己独立的软路由机器比较安全。
挑了一圈淘宝,还是友善家的R5C比较小巧好看。选好机器,接下来就是寻找固件了。可惜R5C的固件有点少,想想还是直接自己编译一个固件算了。
准备工作
- 国内用户最好有梯子环境
- Ubuntu 22.02 LTS
- 推荐配置机器的内存大于等于4GB
这里需要注意Ubuntu一定要是22.02 LTS,否则编译会出错。因为新的固件GCC版本已经到11,老的Ubuntu 18 GCC是9版本,GCC9编译会出现语法不兼容的问题。
其次一个重要的地方是需要有梯子,很多源码下载牵涉到链接github或者openwrt官网,没有梯子的话很容易因为文件下载失败重启。
最后内存大于等于4GB非常重要,编译过程中有一个步骤会使用大概2.7GB内存,内存太小的话,会直接编译失败。用swap内存也没办法解决这个问题。
为了简单的完成环境搭建,我就直接用中国香港的腾讯云配置环境了。腾讯云可以按量计费,配置的机器是SA5 4核16GB内存(AMD Yes)的机器,一个小时的开销大概是1.6元。
编译命令行
Lean大神的Git上,其实已经把编译的步骤写的非常清晰了。推荐不要使用root账号编译,因为腾讯云默认登陆的用户是ubuntu。
我这里就按照R5C的配置过程写一下:
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev \
libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \
libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 \
python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \
uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
拉取代码:
git clone https://github.com/coolsnowwolf/lede
cd lede
默认的插件列表会缺少一些关键内容:
echo 'src-git helloworld https://github.com/fw876/helloworld.git' >> feeds.conf.default
然后就可以开始更新feeds插件信息了:
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
进入menuconfig之后,可以看到以下配置,我是R5C,是有会修改成:
OpenWrt Configuration【OpenWrt配置】Target System (RockChip) ---> 目标系统(瑞芯微)
Subtarget (x86_64) ---> 子目标(RockChip)
Target Profile (Generic) --->目标配置文件(r5c)
Target Images ---> 保存目标镜像的格式
Global build settings ---> 全局构建设置
Advanced configuration options (for developers) ---- 高级配置选项(适用于开发人员)
Build the OpenWrt Image Builder 构建OpenWrt图像生成器
Build the OpenWrt SDK构建OpenWrt SDK
Package the OpenWrt-based Toolchain打包基于OpenWrt的工具链
Image configuration --->图像配置
Base system ---> 基本系统
Administration ---> 管理
Boot Loaders --->引导加载程序
Development ---> 开发
Extra packages ---> 额外包
Firmware --->固件
Fonts --->字体
Kernel modules ---> 内核模块
Languages --->语言
Libraries ---> 图书馆
LuCI ---> LuCI
Mail --->邮件
Multimedia --->多媒体
Network --->网络
Sound ---> 声音
Utilities --->实用程序
Xorg --->Xorg
LuCI可以按照个人想法添加插件,我需要的插件默认都有了,就直接保存退出。然后开始下载 dl 库。因为VM已经在香港了,一般下载不会遇到什么麻烦,如果下载过程中碰到fail或者Error,可以多跑几次下面的命令,直到所有的dl库下载成功。
make download -j8
最后就是编译了,因为用了云服务器,不太希望浪费云服务器的资源,同时我自己也没增加插件,插件产生冲突的概率不大,我就直接用多线程进行编译了:
make V=s -j4
差不多耐心等待1个多小时(4核火力全开的编译速度可以快很多),就可以获取固件了。固件在bin/target目录下。