SFT1200_便携路由器_试用_用SDK编译软件包
转载注明来源: 本文链接 来自osnosn的博客,写于 2022-09-11.
参考
- 【官网.国内】,【官网.国外】
- 【Gl-iNet SFT1200 原版OpenWrt固件编译并添加插件】
- 【GL-iNet SF1200 官方SDK编译固件教程】
- 【gl.inet SF1200 SFT1200自编译openwrt】,把sft1200的sdk单独整理出来,方便用。
官方固件
- SFT1200 CPU: MIPS SF19A28 ,【SF19A28芯片-矽昌通信】,SIFLOWER.
- 【矽昌通信.的文档】
- v3.215 beta3, 估计是 Openwrt-18.06。
- v3.212, 是基于 OpenWrt 18.06 LEDE 。
- v3.206, ??
试用
- 路由器显示,装的 v3.212 固件。已经是官方最新的稳定版。
- 插上手机,打开手机的usb网络共享(在个人热点中)。打开sft1200的ipv6支持,在Tethering中,能获取ipv4地址,无ipv6地址(应该是手机的问题)。能上网。
- Repeater 模式,连上一个5G wifi信号,能正常上网,同时还能提供2.4g和5g的WiFi连入。wan口能获取到一个eui64的ipv6地址。不过lan口就不会往下分发ipv6地址了(这个是上级路由的问题)。
- Repeater 支持连接 EAP 认证的网络。原版web配置页面就支持。
- 插网线,能正常上网。wan口能获取到一个eui64的ipv6地址。不过lan口就不会往下分发ipv6地址了(这个是上级路由的问题)。
- wan插网线dhcp。在原版web上,重新启用一下ipv6。lan口上的设备也能获取到ipv6地址,能访问外部ipv6。
有意思的是,上级路由从运营商获取前缀是/60,这个sft显示获取的前缀是/62,它自己在多出的2bit上,加了1。
sft的wan口获取的ipv6用的是/60的前缀,lan口的ipv6用的是/62的前缀。
从luci界面看到,ipv6启用为relay模式。
连接到 SFT1200 的电脑,获取的ipv6,是上级路由的前缀。(因为是relay模式)。
- wan插网线dhcp。在原版web上,重新启用一下ipv6。lan口上的设备也能获取到ipv6地址,能访问外部ipv6。
- 插网线,PPPOE拨号,没测试。
- Wireless 无线的认证配置中,支持 WPA-EAP 和 WPA2-EAP 认证。即支持radius认证。要在luci页面才有支持。原版web页面没有EAP支持。
- 测速。wan口插网线,dhcp。
- 2.4g,下载有50-80MB/s。
- 5g,下载有260-300MB/s。
- 有线接lan,下载 > 600MB/s。大概是我的电脑太慢。h5的测速网页,就只能测到这个值了。
- lan to lan 的交换机测速,没测,听说能跑满千兆。
/etc/os-release
, 显示LEDE_RELEASE="OpenWrt 18.06 LEDE"
uname -a
, 显示,
Linux GL-SFT1200 4.14.90 #27 SMP Mon May 16 16:06:51 CST 2022 mips GNU/Linux
/proc/version
,显示
Linux version 4.14.90 (deng@ubuntu) (gcc version 7.4.0 (OpenWrt GCC 7.4.0 r0-d5ed025)) #27 SMP Mon May 16 16:06:51 CST 2022
/proc/cpuinfo
, 显示有 4 个核心。system type : MIPS sf19a28 machine : GL-SFT1200 processor : 0 cpu model : MIPS interAptiv (multi) V2.8 FPU V0.0 BogoMIPS : 531.66 wait instruction : yes microsecond timers : yes tlb_entries : 64 extra interrupt vector : yes hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb] isa : mips1 mips2 mips32r1 mips32r2 ASEs implemented : mips16 dsp dsp2 mt eva
/proc/meminfo
, 内存 128MB。MemTotal: 118788 kB MemFree: 40888 kB MemAvailable: 61796 kB Buffers: 7208 kB Cached: 21864 kB SwapCached: 0 kB Active: 22396 kB Inactive: 12484 kB
df -hT
, flash有 128MB。Filesystem Type Size Used Available Use% Mounted on /dev/root squashfs 13.5M 13.5M 0 100% /rom tmpfs tmpfs 58.0M 192.0K 57.8M 0% /tmp /dev/ubi0_1 ubifs 93.5M 728.0K 88.1M 1% /overlay overlayfs:/overlay overlay 93.5M 728.0K 88.1M 1% / tmpfs tmpfs 512.0K 4.0K 508.0K 1% /dev
opkg opkg print-architecture
显示arch mips_siflower 10
。/etc/opkg/distfeeds.conf
指向https://fw.gl-inet.com/releases/v18.06.5/packages-3.6/siflower/
。
这个网站的所有目录都不让浏览。所以不知道sft1200还支持op的哪个版本。opkg instal luci
其实装了19个包.
rpcd liblua luci-lib-ip libubus-lua libiwinfo-lua luci-theme-bootstrap luci-app-firewall lua luci-proto-ppp luci-lib-nixio luci-lib-jsonc liblucihttp liblucihttp-lua luci-base luci-mod-admin-full luci-proto-ipv6 uhttpd rpcd-mod-rrdns luci
。
但系统不认。- 只好用系统提供的界面安装。"MORE SETTING"->"Advanced"。装了21个包。多了两个
luci-lib-json luci-mod-rpc
。
luci-lib-json luci-mod-rpc rpcd liblua luci-lib-ip libubus-lua libiwinfo-lua luci-theme-bootstrap luci-app-firewall lua luci-proto-ppp luci-lib-nixio luci-lib-jsonc liblucihttp liblucihttp-lua luci-base luci-mod-admin-full luci-proto-ipv6 uhttpd rpcd-mod-rrdns luci
。
装完df -h
显示overlayfs:/overlay 93.5M 2.0M 86.8M 2% /
。- 网上有文章说,要先手动安装了 luci,才能在菜单中见到 "Advanced" 项。
- 装luci之前,剩余 88.1MB,装完luci之后剩余86.8MB。
- "APPLICATIONS"->"RemoteAccess" 中打开,Cloud Management,后台有一个进程 gl_mqtt_servic 连接52.193.100.100:18883/tcp。 应该是用来提供远程访问路由器管理页面用的。你自己不需要有公网IP。
关掉它,gl_mqtt_servic就消失了,不影响本地的 ssh,web 登录。 - 设备送了一个 ddns,解析不太稳定,似乎只支持 ipv4,不支持 ipv6。
启用后,可以在后台看到这个域名。形如"xxxx.glddns.com"。xxxx是路由器背面的"设备ID"。
SDK
为官方固件v3.212编译包。
官方固件中,有的库升级了。但官方sdk并没同步升级,需要手工修改。比如openssl。
- 【GL.iNet新品SFT1200大战小米CR6608结果意外 | 原生支持手机热点分享 USB上网模块 轻量NAS| 小巧便携OpenWrt系统】(含第三方包)
- 主要参考这篇:【GL-iNet SF1200 官方SDK编译固件教程】
- 【国产芯片路由器,GL-SF1200,测试与固件编译教程、固件分享】
- 【gl.inet SF1200 SFT1200自编译openwrt】,【zheshifandian/openwrt-sf1200】
- 【官方SDK,gl-inet/gl-infra-builder】
git clone -v https://github.com/gl-inet/gl-infra-builder.git
,大约51MB。cd gl-infra-builder
- 拉取 siflower 源码,(需
apt install python3-yaml
)
python3 setup.py -c configs/config-siflower-18.x.yml
下载 823MB。
这个命令结束后,openwrt-18.06/
目录,最终有2.9GB。 - 再更新一下 siflower 里头的东西。
cd openwrt-18.06/siflower/
git pull
- 生成编译配置文件
cd openwrt-18.06
, (实际进入的是 gl-infra-builder/openwrt-18.06/siflower/openwrt-18.06/ 目录)
./scripts/gen_config.py list
, 列出可用的参数,其中就有target_siflower_gl-sft1200
。
./scripts/gen_config.py target_siflower_gl-sft1200
,- 在 feeds/packages/ 大概要下载47MB.
- 在 feeds/luci/ 大概要下载137MB.
- 其他几个目录,各有3MB.
- 网络不好的话,这个命令要多执行几次。把东西下载完整。
- 添加第三方包的源码,修改配置。
- 我从
https://github.com/kiddin9/openwrt-packages
挑选了几个我有兴趣的包。 - 3proxy 是用的这个
https://github.com/osnosn/3proxy-openwrt
。
- 我从
make menuconfig
make -j1 V=s
编译。- 如果是debian-11,装
apt install gcc-9 gcc-9-multilib g++-9-multilib
。(不知道是不是都有用,先装着吧)
去staging_dir/host/bin/
中,rm gcc; ln -s /usr/bin/gcc-9 gcc
, 把链接替换一下,达到降级的目的。用完再改回来。
记得make clean
再重新编译。 - 有的包编译失败,是因为要求用 golang-1.18 。仔细看输出的信息,就会发现原因。
在staging_dir/host/bin/
中,ln -s /usr/lib/go-1.18/bin/go go
不用去改/usr/bin/go
的链接。 - upx 可以下载一个3.93版的,然后把 upx 在
staging_dir/host/bin/
做个链接。
3.96 版不合适给 mips程序用,压出来的,执行时会卡住。只适合x86程序用。 - 还需要python2.7的支持,
apt install python
。 - 那些golang的程序,生成的包,希望体积小点。
打开对应包的目录中的Makefile
, 找到install
的部分,
在$$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/usr/bin/$(1) $$(1)/usr/bin/
后面加上,
$(STAGING_DIR_HOST)/bin/sstrip $$(1)/usr/bin/$(1)
。
$(STAGING_DIR_HOST)/bin/upx --lzma --best $$(1)/usr/bin/$(1) || true
。- 代码不一定一样。总之就是,copy 到 bin 目录后,先 sstrip,再 upx 压缩,就行了。
- 使用了upx压缩,运行时使用的内存就多一点。SFT1200内存太小, 才128M, 不建议用upx压缩。如果有256M就没问题。
交叉编译一个golang可执行程序到SFT1200上,不用upx压缩是18MB,使用upx压缩约5MB多。
先启动一个进程作为服务运行,18MB的版本执行后,内存free值约10MB。5MB的版本执行后,内存free约9MB多。
这个时候,再次手工执行这个程序,18MB的版本能够正常启动(加载偏慢,约3秒),有正常的输出。5MB的版本加载约3秒后,被内核杀掉,启动失败,无任何输出。
没有upx压缩的程序,执行多个副本进程,代码部分是可以在内存中共享的。upx压缩的,只共享了解压部分的代码,解压后的代码不能共享,导致内存使用过大,OOM被杀。如果内存够大,就没这问题。
- ipk 文件,应该在
bin/
目录中。实际目录是gl-infra-builder/openwrt-18.06/siflower/openwrt-18.06/bin/
。- 第三方包,在
bin/packages/
里头。 - 内核包,在
bin/targets/
里头。
- 第三方包,在
其他
hostapd-openssl
和wpad-openssl
好像是互斥的,同时选择,就编译不出来了。
menuconfig 中每次单独选择一个,然后,
make package/network/services/hostapd/compile V=s -j2
单独编译它,就行了。- 官方sdk中 openssl 的版本比较低,是 1.0.2p。要手动改为 1.1.1i。因为官方固件v3.212用的是1.1.1i。
打开 package/libs/openssl/Makefile , 改版本号,bug号,hash值。 不行,patches都不对。git clone -v https://git.openwrt.org/openwrt/openwrt.git openwrt-base
拉op官方的,下载约180MB, 占用405MB。
去openssl包中,checkout 1.1.1i 出来。然后把 openssl 整个目录copy到 sft1200的对应位置,替换原来的。
再重新编译。
否则 wpad,hostapd 编译出来的运行不了。
- 修改一下
hostapd/Makefile
中的PKG_RELEASE:=5
版本号要变一下。
否则,老是自己去官网下载,不装你编译的。用--force-reinstall --force-depend
也不行。
改变版本号之后,就能顺利装上,显示这个包 upgrade 成功。
或者,不改也行,安装包时,不要opkg update
并且rm -f /var/opkg-list/*
就可以安装。
还有个办法,强制装本地 ipk文件,opkg -f /dev/null install xxxxx.ipk
- 好不容易,编译成功几个包。备份在【这里】。
- WiFi 的 WPA2-EAP 认证配置,看【CentOS7用hostapd做radius服务器为WiFi提供802.1X企业认证】。
- 3proxy 安装后的配置,参考【Danted/Socks5 代理服务_多IP_多出口的配置_3proxy】,
【创建编译环境_编译OPENWRT固件_用SDK为官方固件编译第三方软件3proxy】 - 最终,编译完。sft1200 的 sdk 占用硬盘 13GB。
gl-inet SDK
- 这个似乎是个新的sdk,不知道是不是好用。
【gl-inet/sdk】
imageBuilder
- 【使用GL-iNet的image builder生成固件教程】
- 【Gl-iNet SFT1200 原版OpenWrt固件编译并添加插件】
git clone -v https://github.com/gl-inet/imagebuilder.git gl_imagebuilder
,大约192KB。- 还没动手实操。以后再说。
第三方固件
- 【openwrt 原生固件(openwrt 19.07.8)】,没有sft1200的。
- 【GL.iNet SFT1200 怕死我固件】
- 【gl.inet SF1200 SFT1200自编译openwrt】
第三方包
- 【SFT1200原厂系统安装第三方包】
wget https://cdn.jsdelivr.net/gh/ericwang2006/sft1200_buddha/install.sh
然后,执行/bin/sh install.sh xx
,
xx可以有两个选择。程序不长,看一下就懂了。install.sh
会把中文也装了。如果不想要中文,看看脚本,跳开中文包,手动安装。- 【github.com/ericwang2006/sft1200_buddha】
- openWRT 中
ln -s /root/5config_files/xray_conf /usr/share/xray
补上这个存放 geoip.dat 的路径。
- 这个服务比较依赖系统时间的准确度。
----end----
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/16686059.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/ .