Cubieboard2(六)RTL8188ETV 驱动

简介: Cubieboard2(六)RTL8188ETV 驱动

合集 - cubieboard(6)
1.
Cubieboard2(
二) 系统构建 —— 基于 linux-sunxi
09-16
2.
Cubieboard2(
三) 系统构建 —— WSL Ubuntu 中挂载 U 盘(SDCard)
09-16
3.
Cubieboard2(
四) 系统构建 —— 基于 mainline
09-16
4.
Cubieboard2(
五) 安装无线网卡驱动
09-16
5.
Cubieboard2(
六)RTL8188ETV 驱动
09-24
6.
Cubieboard2(
一) 官方镜像使用与配置
09-16
收起
目录
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 support Wireless cfg80211 - wireless configuration API
Networking support Wireless cfg80211 wireless extensions compatibility
Networking support Wireless Generic IEEE 802.11 Networking Stack (mac80211)
Networking support Wireless Enable mac80211 mesh networking (pre-802.11s)s support

Networking support RF switch subsystem support GPIO RFKILL driver

Device Drivers Serial ATA and Parallel ATA drivers Allwinner sunxi AHCI SATA support SATA,默认已选中
Device Drivers Network device support Universal TUN/TAP device driver support Tun/Tap
Device Drivers Network device support Wireless LAN AIC wireless Support AIC8800 wlan Support
AIC8800 Load Firmware Support USB 无线网卡

Device Drivers Network device support Wireless LAN IEEE 802.11 for Host AP 以及其下方两项 USB 无线网卡

Device Drivers USB support USB Wireless Device Mangement support
Device Drivers USB support USB Mass Storage support 勾选其所有展开的菜单项(16) USB 转 stat、USB 读卡器等支持

Device Drivers USB support USB Serial Converter support USB Prolific 2303 Single Port Serial Driver USB 转串口

Kernel hacking Kernel debugging
Kernel hacking arm Debugging Kernel low-level debugging functions Kernel low-level debugging port Kernel low-level debugging messages via sunxi UART0
Kernel hacking arm Debugging Early 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/zImage
Kernel: arch/arm/boot/zImage is ready

(3)模块编译

make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOCALVERSION= modules

......
LD [M] crypto/echainiv.ko
LD [M] drivers/net/wireless/aic8800/aic_load_fw/aic_load_fw.ko
LD [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 来编译:
{spa.wuten888.com]
{spa.uoyoshi-kitakaido.com]
{spa.talkingaboutphotography.com]
{spa.xayhyk.com]
{spa.clqcgsw.com]

cd rtl8188eus_quickreflex

编译驱动

make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KSRC=~/mainline/linux LOCALVERSION= all

......
Building modules, stage 2.
MODPOST 1 modules
CC /root/driver/rtl8188etv/rtl8188eus_quickreflex/8188eu.mod.o
LD [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 modules
CC /root/driver/rtl8188etv/rtl8188eu_lwfinger/8188eu.mod.o
LD [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
{spa.rrhcai.com]
{spa.simplenote-hamamatsukita.com]
{spa.legalsonar.com]
{spa.yzwzw.com]
[ 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月前
|
传感器 芯片
PCF8574芯片介绍及驱动方法
PCF8574芯片介绍及驱动方法
369 0
|
6月前
|
传感器 开发工具 芯片
【ZYNQ】ZYNQ7000 XADC 及其驱动示例
【ZYNQ】ZYNQ7000 XADC 及其驱动示例
154 0
|
Linux Android开发
Linux misc子系统框架驱动4412蜂鸣器
Linux misc子系统框架驱动4412蜂鸣器
93 0
Linux misc子系统框架驱动4412蜂鸣器
|
Linux
使用Linux内核里的spi屏驱动-fbtft
使用Linux内核里的spi屏驱动-fbtft
772 0
|
Linux API
Linux驱动分析之LCD驱动架构
在Linux设备中,LCD显示采用了帧缓冲(framebuffer)技术,所以LCD驱动也叫Framebuffer驱动,所以LCD驱动框架就是围绕帧缓冲展开工作。帧缓冲(framebuffer)是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象出来,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。对于帧缓冲设备而言,只要在显示缓冲区中与显示点对应的区域写入颜色值,对应的颜色会自动在屏幕上显示。帧缓冲为标准字符设备, 主设备号为29,对应于/dev/fbn。
|
Linux Android开发 芯片
Linux驱动分析之Framebuffer驱动
前面我们了解了LCD的基本架构《Linux驱动分析之LCD驱动架构》,接下来我们拿个具体的实例来分析分析。这样可以了解其大概是如何使用和工作的。
|
Linux 开发工具 git
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十二)LED模板驱动程序的改造:设备树
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十二)LED模板驱动程序的改造:设备树
338 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十二)LED模板驱动程序的改造:设备树
|
Linux 开发工具 git
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
229 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
|
异构计算