当前位置: 首页 > news >正文

Cubieboard2(六)RTL8188ETV 驱动

文章目录

    • 1 RTL8188ETV 驱动源码
    • 2 驱动编译
      • 2.1 添加驱动源代码
        • 2.1.1 添加 AIC8800 驱动源代码(可选)
        • 2.1.2 添加 RTL8188ETV 驱动源代码
      • 2.2 编译
        • 2.2.1 linux 内核
        • 2.2.2 编译 RTL8188ETV 模块
    • 3 驱动安装与配置
    • 4 修改网卡名称
    • 5 测速
    • 6 参考

1 RTL8188ETV 驱动源码

  • https://github.com/quickreflex/rtl8188eus.git

该仓库最后一次更新已经是 5 年前(2019 年),支持的最新 Linux 内核版本为 5.1.x

  • https://github.com/lwfinger/rtl8188eu.git

该仓库最后一次更新已经是 2 年前(2022 年),支持的最新 Linux 内核版本为 5.17

2 驱动编译

2.1 添加驱动源代码

2.1.1 添加 AIC8800 驱动源代码(可选)
# 复制内核源码(来自其驱动的 deb 包解压)
cp ~/aic8800/drivers/aic8800/ -r drivers/net/wireless/# 打开 drivers/net/wireless/Makefile 文件,添加:
obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800/# 打开 drivers/net/wireless/Kconfig 文件,添加:
source "drivers/net/wireless/aic8800/Kconfig"
2.1.2 添加 RTL8188ETV 驱动源代码

1)lwfinger 仓库的 rtl8188eu 代码不需要合并到内核中一起编译,只需要在将内核编译一遍后引用内核自行即可。

2)quickreflex 仓库的 rtl8188eus 代码,经测试,如果按照 AIC8800 驱动的方式添加到源码中无法编译出驱动,而在驱动外引用内核编译则可以成功生成。

2.2 编译

2.2.1 linux 内核

首先清理一下编译生成的中间文件:

make mrproper    # Remove all generated files + config + various backup files'
make distclean   # mrproper + remove editor backup and patch files'

1)以 sunxi_defconfig 为基础,生成 .config 配置文件:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig......
#
# configuration written to .config
#

2)编译菜单项配置:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
第一级
第二级第三级第四级第五级
说明
Enable loadable module support
Networking supportWirelesscfg80211 - wireless configuration API
Networking supportWirelesscfg80211 wireless extensions compatibility
Networking supportWirelessGeneric IEEE 802.11 Networking Stack (mac80211)
Networking supportWirelessEnable mac80211 mesh networking (pre-802.11s)s support
Networking supportRF switch subsystem supportGPIO RFKILL driver
------------
Device DriversSerial ATA and Parallel ATA driversAllwinner sunxi AHCI SATA supportSATA,默认已选中
Device DriversNetwork device supportUniversal TUN/TAP device driver supportTun/Tap
Device DriversNetwork device supportWireless LANAIC wireless SupportAIC8800 wlan Support
AIC8800 Load Firmware Support
USB 无线网卡
Device DriversNetwork device supportWireless LANIEEE 802.11 for Host AP 以及其下方两项USB 无线网卡
------------
Device DriversUSB supportUSB Wireless Device Mangement support
Device DriversUSB supportUSB Mass Storage support勾选其所有展开的菜单项(16)USB 转 stat、USB 读卡器等支持
Device DriversUSB supportUSB Serial Converter supportUSB Prolific 2303 Single Port Serial DriverUSB 转串口
------------
Kernel hackingKernel debugging
Kernel hackingarm DebuggingKernel low-level debugging functionsKernel low-level debugging portKernel low-level debugging messages via sunxi UART0
Kernel hackingarm DebuggingEarly printk
  • 3)开始编译:
# (1)设置干净的版本号:
vi .config      # 打开 .config 文件# 确定   CONFIG_LOCALVERSION = ""# 注释掉 CONFIG_LOCALVERSION_AUTO# 编译时指定 LOCALVERSION=
# 查看版本号
make LOCALVERSION= kernelversion# (2)内核编译
make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOCALVERSION= zImage dtbs......OBJCOPY arch/arm/boot/zImageKernel: arch/arm/boot/zImage is ready# (3)模块编译
make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOCALVERSION= modules......LD [M]  crypto/echainiv.koLD [M]  drivers/net/wireless/aic8800/aic_load_fw/aic_load_fw.koLD [M]  drivers/net/wireless/aic8800/aic8800_fdrv/aic8800_fdrv.ko# (4)把 zImage 转换为 uImage 
cd ~/mainline/linux
mkimage -A arm -O linux -T kernel -C none -a 0x46000000 -e 0x46000000 -n "Linux kernel uImage" -d arch/arm/boot/zImage ../uImage

问题 1,编译时出现:/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x20): multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here

// 打开 scripts/dtc/dtc-lexer.lex.c 文件,在 YYLTYPE yylloc 前面添加 extern 关键字。
extern YYLTYPE yylloc;
2.2.2 编译 RTL8188ETV 模块

1)使用有最多 star 的仓库 https://github.com/quickreflex/rtl8188eus.git 来编译:

cd rtl8188eus_quickreflex# 编译驱动
make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KSRC=~/mainline/linux LOCALVERSION= all......Building modules, stage 2.MODPOST 1 modulesCC      /root/driver/rtl8188etv/rtl8188eus_quickreflex/8188eu.mod.oLD [M]  /root/driver/rtl8188etv/rtl8188eus_quickreflex/8188eu.ko
make[1]: Leaving directory '/root/mainline/linux'# 生成 8188eu.ko,将 8188eu.ko 上传到开发板,通过 insmod 安装即可

2)使用支持内核较新(v5.17)的 https://github.com/lwfinger/rtl8188eu.git 来编译:

cd rtl8188eu_lwfinger# 编译驱动
make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KSRC=~/mainline/linux LOCALVERSION= all......Building modules, stage 2.MODPOST 1 modulesCC      /root/driver/rtl8188etv/rtl8188eu_lwfinger/8188eu.mod.oLD [M]  /root/driver/rtl8188etv/rtl8188eu_lwfinger/8188eu.ko
make[1]: Leaving directory '/root/mainline/linux'# 生成 8188eu.ko,将 8188eu.ko 上传到开发板,通过 insmod 安装即可

3 驱动安装与配置

1)安装模块:

# 1)安装模块
mound /dev/sdx1 /mnt/h
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/mnt/h/ LOCALVERSION=  modules_install# 2)安装头文件(不太推荐以下方式)
# mound /dev/sdx2 /mnt/h
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_HDR_PATH=/mnt/h/usr/src LOCALVERSION=  headers_install# -------------- 至此,与内核相关的模块(如 AIC8800),头文件安装完成# 3)安装 rtl8188.ko
cp rtl8188.ko /mnt/h/lib/modules/5.1.0/# 4)安装头文件(源码)的另一种方式:
tar -czvf --exclude-vcs linux-5.1.0.tar.gz linux    # 压缩 Linux 源码目录,剔除版本控制目录,v5.1 版本压缩完成大概 300+MB
scp linux-5.1.0.tar.gz root@192.168.1.2:/root       # 上传到开发板
tar-zxvf linux-5.1.0.tar.gz                         # 解压
mv linux /usr/src/kernels/                          # 移动到 /usr/src/kernels 目录(不存在时需要手动创建目录)
ln -sf  /usr/src/kernels/linux-5.1.0/ /lib/modules/5.1.0/build      # 添加源码目录软链接
ln -sf  /usr/src/kernels/linux-5.1.0/ /lib/modules/5.1.0/source     # 添加源码目录软链接

2)配置开机自动加载模块

# 生成模块依赖关系表
depmod -a# 添加 AIC8800 配置
echo "options aic_load_fw  antenna_diversity=1" >> /etc/modprobe.d/aic8800.conf
echo "options aic8800_fdrv antenna_diversity=1" >> /etc/modprobe.d/aic8800.conf# 添加 RTL8188ETV 配置
echo "options 8188eu antenna_diversity=1" >> /etc/modprobe.d/realtek_rtl.conf# 探测模块是否正常
modprobe 8188eu
modprobe aic_load_fw  
modprobe aic8800_fdrv 

4 修改网卡名称

无线网卡成功被识别后,其名称为 wlxe0b2f14aba0d 而不是 wlan0,这里修改一下。

cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/# 打开复制后的 80-net-setup-link.rules 文件:
vi /etc/udev/rules.d/80-net-setup-link.rules# 修改如下内容:
NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}"
# 为:
NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}"

5 测速

1)基于 RTL8188ETV 芯片无线网卡:

# 开发板上运行如下命令:
iperf -s# 局域网其它主机上运行如下命令:
iperf -c  192.168.101.23
------------------------------------------------------------
Client connecting to 192.168.101.23, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  1] local 192.168.101.18 port 60488 connected with 192.168.101.23 port 5001
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-11.9629 sec  23.9 MBytes  16.7 Mbits/sec

2)基于 AIC8800 芯片无线网卡:

# 开发板上运行如下命令:
iperf -s# 测试 AIC8800 芯片,局域网其它主机上运行如下命令:
iperf -c 192.168.101.19
------------------------------------------------------------
Client connecting to 192.168.101.19, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  1] local 192.168.101.18 port 60568 connected with 192.168.101.19 port 5001
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.5543 sec  63.4 MBytes  50.4 Mbits/sec# 测试有线网速:
iperf -c 192.168.1.2
------------------------------------------------------------
Client connecting to 192.168.1.2, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  1] local 192.168.101.18 port 60596 connected with 192.168.1.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.2415 sec   109 MBytes  88.9 Mbits/sec

6 参考

  • https://blog.csdn.net/qq_28877125/article/details/127301761
  • https://www.cnblogs.com/duapple/p/17915563.html
  • https://zhuanlan.zhihu.com/p/358038347
  • https://blog.csdn.net/weixin_42409052/article/details/113065704

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 怎样写论文及论文格式?分享4款ai论文生成软件
  • 面试金典题2.3
  • C++第2课——取余运算符的应用、浮点型和字符型(含视频讲解)
  • 工业数据采集系统
  • 828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter
  • 信息安全工程师(16)密码学概况
  • Vue(16)——Vue3.3新特性
  • 详解 C++中的模板
  • JAVA基本简介(期末)
  • MongoDB解说
  • 9.24工作笔记
  • Spark 任务与 Spark Streaming 任务的差异详解
  • 9.创新与未来:ChatGPT的新功能和趋势【9/10】
  • fastadmin 根据选择数据来传参给selectpage输入框
  • 【算法】模拟:(leetcode)6.Z 字形变换(medium)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • android 一些 utils
  • ES6 学习笔记(一)let,const和解构赋值
  • ES6简单总结(搭配简单的讲解和小案例)
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • HTTP那些事
  • HTTP中GET与POST的区别 99%的错误认识
  • Map集合、散列表、红黑树介绍
  • mysql外键的使用
  • React-flux杂记
  • TCP拥塞控制
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 浮现式设计
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 前端面试总结(at, md)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 强力优化Rancher k8s中国区的使用体验
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 自制字幕遮挡器
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #if 1...#endif
  • #java学习笔记(面向对象)----(未完结)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $$$$GB2312-80区位编码表$$$$
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (c语言+数据结构链表)项目:贪吃蛇
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (一) storm的集群安装与配置
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ./和../以及/和~之间的区别
  • .gitignore文件使用
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net后端程序发布到nignx上,通过nginx访问