为TS-212P3编译r8156b 2.5G USB网卡驱动

2023-10-02 15:48:29 10点赞 30收藏 22评论

最近在家升级2.5G局域网,买了个螃蟹的r8156b 2.5G USB网卡,最便宜的那种为TS-212P3编译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, 查看内核版本:

为TS-212P3编译r8156b 2.5G USB网卡驱动

发现原厂使用的编译工具是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)

为TS-212P3编译r8156b 2.5G USB网卡驱动

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/

编译成功是这样的:

为TS-212P3编译r8156b 2.5G 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查看驱动加载,正常是这样的:

为TS-212P3编译r8156b 2.5G USB网卡驱动

5、进NAS管理界面看看,已经识别新网卡了

为TS-212P3编译r8156b 2.5G USB网卡驱动

6、测试速度

用iperf3单连接进行测速,结果如下:

为TS-212P3编译r8156b 2.5G USB网卡驱动

增加连接数速度也没有变化,应该也就这样了吧。

测试时CPU占用情况

为TS-212P3编译r8156b 2.5G USB网卡驱动

7、驱动的持久化

由于自己编译的驱动不能直接替代原厂驱动(重启后会恢复),我们需要做一个启动时自动加载的脚本。

首先打开启动时运行用户定义的进程选项:

为TS-212P3编译r8156b 2.5G USB网卡驱动

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

在此感谢两位作者。

如需引用本文请注明出处。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
22评论

  • 精彩
  • 最新
  • 怎么弄最后编译总是出错不知道是不是环境的问题TS416
    make[3]: *** [scripts/Makefile.build:280: drivers/target/iscsi/iscsi_target.o] Error 1
    make[2]: *** [scripts/Makefile.build:497: drivers/target/iscsi] Error 2
    make[1]: *** [scripts/Makefile.build:497: drivers/target] Error 2
    make: *** [Makefile:1822: drivers] Error 2
    make: Leaving directory '/work/GPL_QTS/src/linux-5.10'
    错了无数遍搞不定~~

    校验提示文案

    提交
  • 老大,能说的简单直白一点嘛,你那几个文件如何导入

    校验提示文案

    提交
    那你得先得会开ssh, 导入文件很简单,用nas的文件共享就行,nas里面的对应共享文件夹在 /share 下面

    校验提示文案

    提交
    收起所有回复
  • 谢谢分享,我是TS-453Bmini也是5.1的系统,之前的教程只有4.5的用不了,这个下来试试看

    校验提示文案

    提交
    看来我这门外汉试不了 [黑线]
    参照4.5的那个教程:
    先用winSCP把r8152.ko文件传到NAS上
    再用puTTY进去,最后打驱动显示出错,不知道我哪步没搞好,显示如下
    [~] # /sbin/rmmod r8152
    [~] # /sbin/rmmod usbnet
    [~] # sleep 3
    [~] # /sbin/insmod /share/CACHEDEV1_DATA/r8152.ko
    insmod: can't insert '/share/CACHEDEV1_DATA/r8152.ko': invalid module format

    校验提示文案

    提交
    参考的4.5操作是去看看
    后面的步骤出错了,搞不懂

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • 实践了下,临时替换模块没问题。但是重启后的脚本文件copy不成功,r8152.ko还是老的时间戳,为什么啊 [喜极而泣] 。没玩过,也不知道怎么调试。cat或者tail下/dev/kmsg也没看到打印的日志呀。

    校验提示文案

    提交
    如果只是重启不能自动替换,你仔细看看脚本里的路径有没有写对,要替换的源文件需要存放在存储盘上,就是 /share/底下的共享目录里面

    校验提示文案

    提交
    路径没错的,ls 都能找到。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 正好用的上,又正好完全看不懂

    校验提示文案

    提交
  • 花几十块钱就把NAS升级成2.5G了?赞 [惊喜]

    校验提示文案

    提交
  • 刚在网上下单,x86的威联通应该能直接识别吧

    校验提示文案

    提交
  • 老哥,我在尝试编译ts416、5.1内核的驱动。但按照教程来,编译总要把所有的驱动都跑一遍,且会在编译其他驱动时报错中断,我看你教程里的编译结果图里只有8152.o一项,是否需要额外编辑Kconfig或者.config?

    校验提示文案

    提交
    你的416编译成功了吗

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
相关好价
最新文章 热门文章
30
扫一下,分享更方便,购买更轻松