本帖最后由 lcsuper 于 2019-4-3 13:31 编辑
一、前言 1、自己改了一个aria2的源码编译后在openwrt上跑了1年多还算稳定。但是7621的性能还是捉急,文件多了就崩,速度10M也崩。N1算的上最有性价比的arm机器了,性能肯定高过7621。灯大出了小钢炮固件后,立马入了一个专门跑下载解放路由器。固件自带aria2,ssh上去aria2c -v看到这个版本是由aarch64-buildroot-gnu编译的。放狗得知,aarch64是ARM CPU ARMv8架构64位的执行状态。buildroot是个自动化工具,可以根据自己的需要定制Linux系统。下了个buildroot,跟着教程menuconfig后发现很像openwrt编译固件,先选CPU,文件系统,内核,第三方软件.......然而,作为从来没有编译过固件的小白来说一脸懵逼。我的经验也仅限于使用openwrtSDK编译软件的基础上。其次,发现buildroot里面第三方软件库没有aria2,要自行添加到库里面再编译。看了下教程,要自己写makefile,这超出小白能力范围,GG。其次,发现buildroot在交叉编译其他平台软件的时候,可以使用自己生成的交叉编译工具或者使用第三方交叉编译工具。又aria2c -v看了一下,发现灯大好像是用的第三方交叉编译工具gcc-linaro-aarch64-linux-gnu编译的固件。于是,想尝试一下使用第三方交叉编译工具来编译一下aria2。 2、交叉编译是个神马鬼 我们写的源码在linux系统下经过编译器gcc、g++编译成二进制代码后才能在机器上运行。make命令就是这个过程。但是这样编译出的软件只能在当前本机所使用的平台类型使用,你复制到硬件和系统都和这一样的平台才能使用。就是说同一个源码,在X86架构CPU Ubuntu64位系统下编译的软件,不能在X86CPU windows系统上运行,不能在mips架构 CPU上跑,不能在arm架构cpu上跑。 为了解决这个问题,就有了交叉编译。我在X86 CPU Linux系统下使用目标平台的专用交叉编译器,就可以将代码编译成目标平台能使用的软件。比如gcc-linaro-aarch64-linux-gnu编译器就是专门在X86 CPU Linux平台下面,编译ARM ARMv8架构 64位CPU平台下软件的编译器。 3、一般交叉编译过程 跟平常我们make源码一样。只是我们要指定编译器为专门的交叉编译器。软件所使用的所有库文件,都必须先用交叉编译器提前编译。就像我们编译openwrt的时候需要先安装环境。 4、编译的关键 关键就是makefile文件。他告诉了编译器必须的参数。但是aria2是可以多平台编译的,所以他的makefile不是固定的,是通过autoreconf根据平台架构系统的因素自动化配置出来的。看了下autoreconf的模板configure.ac文件,只有windows平台,Android平台,树莓派平台。 通过研究aria2的交叉编译文档,发现树莓派的配置文件是最可能拿来用的,因为都是arm平台的CPU,但是他是通过docker编译安装的。无奈小白才疏学浅搞不定,还好GitHub上的大神多,发现有现成的脚本。 二、操作(感谢GitHub上的veltlion大神提供的教程)
1、安装aria2的编译环境
- libgnutls-dev (Required for HTTPS, BitTorrent, Checksum support)
- nettle-dev (Required for BitTorrent, Checksum support)
- libgmp-dev (Required for BitTorrent)
- libssh2-1-dev (Required for SFTP support)
- libc-ares-dev (Required for async DNS support)
- libxml2-dev (Required for Metalink support)
- zlib1g-dev (Required for gzip, deflate decoding support in HTTP)
- libsqlite3-dev (Required for Firefox3/Chromium cookie support)
- pkg-config (Required to detect installed libraries)
复制代码2、下载aria2源码解压
3、安装aarch64-linux-gnu交叉编译器,当然你也可以下载使用linaro的编译器
- sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu pkg-config-aarch64-linux-gnu
- sudo chown $UID -R /usr/aarch64-linux-gnu
- sudo mkdir -p /opt/aria2-arm
- sudo chown $UID /opt/aria2-arm
复制代码
4、修改静态编译脚本(感谢GitHub的大神q3aql,他的脚本是针对树莓派的,我们稍加修改)
这个脚本用来交叉编译aria2所要使用到的库
存为aria2lib到aria2文件夹
5、这个脚本是修改confg的,其中打了一个补丁,破解aria2最大128线程
- #!/bin/bash
- # In this configuration, the following dependent libraries are used:
- #
- # * zlib
- # * c-ares
- # * expat
- # * sqlite3
- # * openSSL
- # * libssh2
- ##patch##
- wget https://aur.archlinux.org/cgit/aur.git/plain/aria2-fast.patch?h=aria2-fast -O aria2-fast.patch
- patch -Np1 < aria2-fast.patch
- ## CONFIG ##
- test -z "$HOST" && HOST=aarch64-linux-gnu
- test -z "$PREFIX" && PREFIX=/opt/aria2-arm/build_libs
- ARCH="aarch64"
- HOST="aarch64-linux-gnu"
- PREFIX="/opt/aria2-arm/build_libs"
- LOCAL_DIR="/opt/aria2-arm/build_libs"
- CFLAGS="-march=armv8-a+crypto+crc -mtune=cortex-a53"
- DEST="/usr/aarch64-linux-gnu"
- CC=$HOST-gcc
- CXX=$HOST-g++
- LDFLAGS="-L$DEST/lib"
- CPPFLAGS="-I$DEST/include"
- CXXFLAGS=$CFLAGS
- MAKE="make -j`nproc`"
- CONFIGURE="./configure --prefix=${LOCAL_DIR} --host=$HOST"
- ./configure \
- --host=$HOST \
- --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
- --prefix=$PREFIX \
- --disable-nls \
- --without-gnutls \
- --with-openssl \
- --without-libxml2 \
- --with-libz --with-libz-prefix=${LOCAL_DIR} \
- --with-libexpat --with-libexpat-prefix=${LOCAL_DIR} \
- --with-slite3 --with-sqlite3-prefix=${LOCAL_DIR} \
- --with-libcares --with-libcares-prefix=${LOCAL_DIR} \
- --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt' \
- LDFLAGS="-L$LOCAL_DIR/lib" \
- PKG_CONFIG_PATH="$LOCAL_DIR/lib/pkgconfig" \
- ARIA2_STATIC=yes
复制代码存为aria2config到aria2文件夹
6、填Sphinx索引的坑。使用python的asc码和平台用的utf8不一致,会报错 打开usr/lib/python2.7/posixpath.py
在顶上加上
- reload(sys)
- sys.setdefaultencoding('utf-8')
复制代码
7、进入aria2文件夹,打开终端,一个一个打命令 - sudo ./aria2lib
- autoreconf -i
- sudo ./aria2config
复制代码
以上都不报错就make
在aria2/src下会生成aria2c的文件,因为是静态编译,体积达到了90多兆
8、减小aira2c的体积
- aarch64-linux-gnu-strip src/aria2c
复制代码
变成6M多了 9、ssh上传到小钢炮的/usr/bin,覆盖aria2c即可,改新的aria2c为7777 三、后记 1、Ubuntu要装新一些的版本,老版本没有国内镜像源了。。。。。。。官方的我连不上。 2、这个脚本原来是针对树莓派的,仅仅修改了 ARCH="aarch64" HOST="aarch64-linux-gnu" CFLAGS="-march=armv8-a+crypto+crc-mtune=cortex-a53" 去掉了原来的TOOL_BIN_DIR 和 PATH 把 linux-armv4 改成 linux-aarch64 。
3、小钢炮现在有docker了装软件方便多了 4、论坛贴的代码吃了不少格式符号,如果报错,请自行去GitHub下载原始脚本改吧(https://github.com/q3aql/aria2-static-builds/tree/master/build-scripts)
|