本文主要在arm主板中移植usb网卡驱动,因为内核自带的r8152驱动有问题,因此移植了千兆网卡的usb驱动,在ubuntu下交叉编译内核模块然后在主板系统下安装,下面介绍本人移植的详细过程。
系统版本:Ubuntu 22.04 LTS
主板型号:armv8
总的过程总结
1、 驱动源码解压;
2、 驱动Kconfig和Makefile配置;
3、 .config配置
4、 模块编译及报错处理;
5、 模块安装及测试;
首先解压r8152.53.56-2.15.0.tar.bz2到内核drivers/net下
因为买的RTL 8156的网卡依然使用的是8152的驱动,因此为了区分内核自带的8152驱动,我对解开的tar包的目录重新命名为r8156-2.15.0
root@test:/LINUX/# tar -jxvf r8152.53.56-2.15.0.tar.bz2 –C drivers/net
root@test:/LINUX/# mv drivers/net/r8152-2.15.0 drivers/net/r8156-2.15.0
在drivers/net/下的Kconfig和Makefile加入r8156-2.15.0的配置
root@test:/LINUX/#cd drivers/net/
root@test:/LINUX/drivers/net/ #vim Makefile
1、新建Kconfig
root@test:/LINUX/drivers/net/r8156-2.15.0# vim Kconfig
2、新建Makefile,因为自带的驱动Makefile中是本地编译内核模块的方式,代码如下,所以我们要全部注释掉
只加入内核模块编译的规则即可
驱动目录文件:
50-usb-realtek-net.rules是直接放在linux系统/etc/udev/rules.d/下作为udev规则,方便usb网卡热拔插可以正常识别加载
make ARCH=arm64 menuconfig
1、按 / 进入搜索界面,查看8156的具体位置
2、进入改目录将该模块设置为m,即核外模块
3、usb网卡相关模块打开
因为本块板子是接到我们的usb HBA上的,所以usb相关的模块也一起打开,具体模块如下:
4、usb配置成host模式
5、保存.config
1、直接交叉编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- all
2、问题处理
root@test:/LINUX/# vim include/uapi/linux/mdio.h
3、编译完成
将r8152.ko拷贝到板子上,若有相关依赖模块则一并拷入
[root@test /]# insmod r8152.ko
[root@test /]# lsmod |grep r8152
r8152 204800 0
此时插上usb网卡,查看是不是可以正常识别到,注意要将50-usb-realtek-net.rules文件拷贝到/etc/udev/rules.d/
[root@test /]#ifconfig -a //查看所有的网卡设备