使用uClibc Toolchain编译LEDE系统,适配迅雷xware远程下载

最近买了MT7621路由,还带sata口,就想适配一个系统,由于:
1.Openwrt官方trunk里面kmod-mt76驱动居然还停留在2016年6月,实测2.4G比较弱,所以不予考虑了,再看LEDE的snapshot,更新到2017年2月了,当然要选择LEDE了。
2.LEDE目前全面切换到了MUSL库,导致迅雷xware mipsel的32位uclibc版本直接不能用了,为了适配,所以必须编译一个基于uClibc库的系统,但是LEDE/OPENWRT的toolchain默认菜单里面都只有musl和glibc了,uclibc被标记为了broken。。。。所以必须自行研究。

折腾了大约1周,终于搞定了,步骤如下:
1.下载LEDE源码,这个很简单:

git clone https://git.lede-project.org/source.git
cd source
./scripts/feeds update -a
./scripts/feeds install -a
--- a/toolchain/Config.in
+++ b/toolchain/Config.in
 
     config LIBC_USE_UCLIBC
         select USE_UCLIBC
-        bool "Use uClibc"
+        bool "Use uClibc-ng"
         depends on !(aarch64 || aarch64_be)
-        depends on BROKEN || !(arm || armeb || i386 || x86_64 || mips || mipsel || mips64 || mips64el || powerpc)


2.修改Toolchain,以便使用uClibc:

(1).修改/toolchain/Config.in

(2).修改/toolchain/uClibc/Makefile

--- a/toolchain/uClibc/Makefile
+++ b/toolchain/uClibc/Makefile
 
 define Host/SetToolchainInfo
     $(SED) 's,^\(LIBC_TYPE\)=.*,\1=$(PKG_NAME),' $(TOOLCHAIN_DIR)/info.mk
-    $(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.uclibc.org/,' $(TOOLCHAIN_DIR)/info.mk
+    $(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.uclibc-ng.org/,' $(TOOLCHAIN_DIR)/info.mk
     $(SED) 's,^\(LIBC_VERSION\)=.*,\1=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk
     $(SED) 's,^\(LIBC_SO_VERSION\)=.*,\1=$(LIBC_SO_VERSION),' $(TOOLCHAIN_DIR)/info.mk
 endef

 

(3).修改toolchain/uClibc/headers/Makefile

--- a/toolchain/uClibc/headers/Makefile
+++ b/toolchain/uClibc/headers/Makefile
 
         CC="$(TARGET_CC)" \
         CPU_CFLAGS="$(TARGET_CFLAGS)" \
         ARCH="$(CONFIG_ARCH)" \
-        pregen \
         install_headers
 endef

 

(4).如果要修改使用的uclibc-ng版本,需要修改toolchain/uClibc/common.mk里面的版本号和对应sha值,默认1.0.22不用修改了。

上述修改完成后,后续make menuconfig里面就可以选择到uclibc-ng了。

3.编译系统

make menuconfig

通过advanced configuration options (for developers) > Toolchain Options > c library > uclibc-ng
其他自己选择。保存.config后,输入:

nohup ./autocompile.sh &

自动编译脚本autocompile.sh 内容为:

if [ "$1" != "-f" ] ; then
        IGNORE_ERRORS=1 make 2>&1| tee errors.txt
 
        rm build_*.txt
fi
 
for i in $(grep "failed to build" errors.txt | sed 's/^.*ERROR:[[:space:]]*\([^[:space:]].*\) failed to build.*$/\1/' ) ; do
        if [ "$i" != "" ] ; then
                echo Compiling: ${i}
                make ${i}-compile V=99 > build_${i##*/}.txt 2>&1 || echo ${i} : Build failed, see build_${i##*/}.txt
        fi
done

等几个小时以后就可以在source/bin目录下找到编译完成的系统了,编译过程中另外一个ssh登录,通过errors.txt和nohup.out查看编译进度,原ssh窗口可以关闭。

4.安装系统,配置调试迅雷
可以通过命令行sysupgrade -v xxxx.bin或者通过luci网页升级系统。
升级完成后,由于uclibc-ng 1.0.18及之后版本将libpthread, libcrypt, libdl, libm, libutil等库合并到了libuClibc中,需要link一些libuClibc,以便迅雷xware可以使用:

cd /lib
ln -s libuClibc-1.0.22.so libdl.so.0
ln -s libuClibc-1.0.22.so  libpthread.so.0

然后将Xware1.0.31_mipsel_32_uclibc上传路由,运行:

oot@LEDE:~/xunlei# ./portaliniting...
try stopping xunlei service first...
killall: ETMDaemon: no process killed
killall: EmbedThunderManager: no process killed
killall: vod_httpserver: no process killed
setting xunlei runtime env...
port: 9000 is usable.
 
YOUR CONTROL PORT IS: 9000
 
starting xunlei service...
etm path: /root/xunlei
execv: /root/xunlei/lib/ETMDaemon.
 
getting xunlei service info...
Connecting to 127.0.0.1:9000 (127.0.0.1:9000)
 
THE ACTIVE CODE IS:

常用软件例如chinadns可使用imagebuilder编译。

 

参考文档:
1.http://lists.infradead.org/pipermail/lede-dev/2016-June/001145.html
2.https://lists.openwrt.org/pipermail/openwrt-devel/2009-June/004411.html
3.https://www.mail-archive.com/lede-dev@lists.infradead.org/msg05838.html

 

weinxin
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。
Igor
  • 版权声明: 发表于 2020-05-2408:16:09
  • 转载注明:http://blog.tsingmac.com/prolions/intelligence/2815/
什么是天线增益? - 知乎 软件无线电

什么是天线增益? – 知乎

我们买路由器时,经常会看到有个天线增益的参数,而商家也会在宣传中告诉大家,这会让你的无线信号更强,但是不是越高越好呢? 我们买路由器时,经常会看到有个天线增益的参数,而商家也会在宣传中告诉大家,这会让...
Openwrt:web中文语言支持,并设置默认中文 Openwrt

Openwrt:web中文语言支持,并设置默认中文

一、概述 openwrt 源码最开始是只支持英文的,所以需要自己配置添加中文显示,有两种方式可以实现web 中文界面显示: ① 直接编译进固件,并设置默认中文; ② 在串口终端在线更新中文包,并在we...
高性价比AC2600路由D-Link DIR-882 Openwrt

高性价比AC2600路由D-Link DIR-882

近年来,面对可连网终端设备的不断暴增以及国内宽带的提速升级,无线路由器迎来了新的更新换代潮。然而对于一般消费者来说,似乎还无法从产品外观上直接感受到路由器产品的迭代与演进。而《拆机实验室》是一档带您深...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: