作者:ISEKU
最近在家升级2.5G局域网,买了个螃蟹的r8156b 2.5G USB网卡,最便宜的那种
测试的时候发现没有TS-212P3的驱动,网上翻遍了也没找到,只好自己动手丰衣足食了…
这里把过程简单记录一下,顺便也供值友们参考。
环境准备:
1、安装Ubuntu16 虚拟机并安装编译工具(以下操作在非root账号下进行)
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential libelf-dev bc
mkdir ~/work
2、交叉编译环境
TS-212P已升级至QTS5.1, 查看内核版本:
发现原厂使用的编译工具是Linaro GCC, 我们也使用相同的工具进行编译。
GCC下载地址:
https://releases.linaro.org/components/toolchain/binaries/5.3-2016.02/aarch64-linux-gnu/gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu.tar.xz
内核和驱动源码下载地址:
QTS kernel : https://sourceforge.net/projects/qosgpl/ (选择QTS5.1)
r8156b linux驱动:
https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-usb-3-0-software (当前版本为2.17.1)
下载的QTS内核压缩包是分片的,需要自己合并后再解压:
cat QTS_Kernel_5.1.0.20230808.tar.gz.0 QTS_Kernel_5.1.0.20230808.tar.gz.1 >> QTS_Kernel_5.1.0.20230808.tar.gz
tar xvzf QTS_Kernel_5.1.0.20230808.tar.gz -C ~/work
解压网卡驱动源码:
tar xvzf v2.16.3.20221209.tar.gz -C ~/work
解压交叉编译工具:
xz -d gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu.tar.xz
tar xvf gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu.tar -C ~/opt
进行编译:
3、开始进行编译
先给驱动打个补丁,要不编译时会出错:
sed -i -e s/strscpy/strncpy/g ~/work/r8152-2.17.1/r8152.c
然后将r8152-2.17.1下的所有文件复制到 ~/work/GPL_QTS/src/linux-4.2/drivers/net/usb/ 下
进入4.2版内核的源码目录:
cd ~/work/GPL_QTS/src/linux-4.2/
复制目标设备配置文件:
cp ~/work/GPL_QTS/kernel_cfg/TS-X28A/linux-4.2-arm64.config .config
先进行预编译
make ARCH=”arm64″ CROSS_COMPILE=”/opt/gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-” -C ~/work/GPL_QTS/src/linux-4.2/ scripts prepare modules_prepare
没有出错的话就可以编译驱动了:
make ARCH=”arm64″ CROSS_COMPILE=”/opt/gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-” -C ~/work/GPL_QTS/src/linux-4.2/ modules SUBDIRS=drivers/net/usb/
编译成功是这样的:
测试部署:
4、安装测试驱动
将 ~/work/GPL_QTS/src/linux-4.2/drivers/net/usb/r8152.ko 复制到NAS上,然后执行:
modprobe -r r8152
insmod ./r8152.ko
没有错误的话插入usb网卡接上网线,用dmesg | grep 8151查看驱动加载,正常是这样的:
5、进NAS管理界面看看,已经识别新网卡了
6、测试速度
用iperf3单连接进行测速,结果如下:
增加连接数速度也没有变化,应该也就这样了吧。
测试时CPU占用情况
7、驱动的持久化
由于自己编译的驱动不能直接替代原厂驱动(重启后会恢复),我们需要做一个启动时自动加载的脚本。
首先打开启动时运行用户定义的进程选项:
autorun.sh需要存放在flash存储里,按照一下步骤创建:
/etc/init.d/init_disk.sh mount_flash_config (挂载flash分区)
然后手动创建或上传 autorun.sh 文件到 /tmp/nasconfig_tmp/autorun.sh
脚本内容:
#本脚本用于替换原厂驱动并执行加载操作
#!/bin/sh
echo “############ autorun.sh script start ############” >> /dev/kmsg
export PATH=/opt/bin:$PATH
export PATH=/sbin/:$PATH
#下面的源路径根据自己存放ko文件的具体位置进行修改
cp /share/CACHEDEV4_DATA/mod/r8152.ko /lib/modules/4.2.8/
modprobe -r r8152
modprobe r8152
echo “############ autorun.sh script end ############” >> /dev/kmsg
创建完成后执行:
chmod +x /tmp/nasconfig_tmp/autorun.sh (为脚本添加执行权限)
cd && /etc/init.d/init_disk.sh umount_flash_config (卸载flash分区)
最后重启试试能否自动加载, 然后享受2.5Gbps 的速度吧。
BTW:我在github上创建了个项目,编译好的模块已上传,有需要的自己下载,不保证在你的机器上能用…
网址是:https://github.com/iseku/r8156_for_TS-212P3
引用和感谢:
参考资料:
https://neolee.com/2021/03/15/威联通qnap-ts-453bmini自编译usb-2-5g网卡驱动/
https://gist.github.com/RikshaDriver/0388ba3f38f89eb975ebb0b915860ec2
在此感谢两位作者。
如需引用请注明出处。
查看文章精彩评论,请前往什么值得买进行阅读互动