rtl8188eus Linux驱动移植

news2024/11/26 12:46:04

rtl8188eus Linux驱动移植

rlt8188eus作为无线USB网卡,可以给我们的Linux设备提供无线上网能力,也能配置为AP,给其它无线设备提供上网能力。在使用较低版本的内核时,内核中不含rtl8188eus驱动,因此尝试自己移植,这里记录移植过程和遇到的问题。

1. 下载源码

直接google搜索rtl8188eus github,能够搜索出来非常多的rtl8188eu相关的仓库。找到startfork数量最多的仓库,下载其源码。

也尝试过其它的仓库在这里插入图片描述
,编译出来的驱动在连接Wi-Fi时会报警告,导致连接不上wifi,日志如下:

RTW: <===  rtw_ips_pwr_up.............. in 780ms
RTW: nolinked power save leave
RTW: ==> ips_leave.....LED(0x00028282)...
RTW: SetHwReg8188E:(HW_VAR_CHECK_TXBUF)TXBUF Empty(1) in 0 ms
RTW: survey done event(33) band:0 for wlan0
RTW: rtw_indicate_scan_done(wlan0)
RTW: ==>rtw_ps_processor .fw_state(8)
RTW: ==>ips_enter cnts:19
RTW: nolinked power save enter
RTW: ===> rtw_ips_pwr_down...................
RTW: ====> rtw_ips_dev_unload...
RTW: usb_read_port_cancel
RTW: usb_read_port_complete() RX Warning! bDriverStopped(False) OR bSurpriseRemoved(False)
RTW: usb_read_port_complete() RX Warning! bDriverStopped(False) OR bSurpriseRemoved(False)
RTW: usb_read_port_complete() RX Warning! bDriverStopped(False) OR bSurpriseRemoved(False)
RTW: usb_read_port_complete() RX Warning! bDriverStopped(False) OR bSurpriseRemoved(False)
RTW: usb_read_port_complete() RX Warning! bDriverStopped(False) OR bSurpriseRemoved(False)
RTW: usb_read_port_complete() RX Warning! bDriverStopped(False) OR bSurpriseRemoved(False)
RTW: usb_read_port_complete() RX Warning! bDriverStopped(False) OR bSurpriseRemoved(False)
RTW: usb_read_port_complete() RX Warning! bDriverStopped(False) OR bSurpriseRemoved(False)
RTW: usb_write_port_cancel
RTW: ==> rtl8188eu_hal_deinit
RTW: bkeepfwalive(0)
RTW: SetHwReg: bMacPwrCtrlOn=0
RTW: <=== rtw_ips_pwr_down..................... in 130ms

后面尝试使用截图内容的仓库,就没有问题了。并且这个仓库是带固件的,在使用无限网卡时,需要用到这个固件。

2. 编译驱动

编译驱动前,需要在内核中配置这个驱动依赖的模块,否则会在编译时报警告,一些符号未定义。其中这些符号就是该驱动依赖的内核模块。在不配置相关依赖的情况下,编译好的驱动在装载时,会报和编译时一样的错误,导致装载失败。因此如果编译时报警告了,根据相关符号找到内核中的模块,勾选上,并重新编译内核。

2.1 内核配置

我这里使用的内核版本是3.4 ,默认配置了两个与该模块相关的驱动。这里将它们勾选为编译进内核中。

配置支持WI-FI设备

模块路径:

 │   Location:                                                                           
  │     -> Device Drivers                                                                 
  │       -> Network device support (NETDEVICES [=y])                                     
  │         -> Wireless LAN (WLAN [=y])

配置如下:

在这里插入图片描述

可以看到内核中有 rtl8188cu的驱动,但是没有 rtl8188eus 的。

配置支持IEEE 802.11

模块路径:

│   Location:                                                                            
  │     -> Networking support (NET [=y])                                                 
  │       -> Wireless (WIRELESS [=y])

配置如下:

在这里插入图片描述

这里也是讲这些勾选为编译进内核中。

解决编译问题

完成上述配置后,编译还是会报一个警告:

  LD [M]  /media/data/library/temp/rtl8188eus/8188eu.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "__aeabi_unwind_cpp_pr1" [/media/data/library/temp/rtl8188eus/8188eu.ko] undefined!
WARNING: "__aeabi_unwind_cpp_pr0" [/media/data/library/temp/rtl8188eus/8188eu.ko] undefined!
  CC      /media/data/library/temp/rtl8188eus/8188eu.mod.o
  LD [M]  /media/data/library/temp/rtl8188eus/8188eu.ko
make[1]: Leaving directory '/media/data/workspace/buildroot-2022.02.8/output/build/linux-3.4.y'

如果不解决这个警告,在insmod模块时,就会因为找到不到这两个符号导致报错。位置在Kernel hacking 下面:

在这里插入图片描述

2.2 交叉编译环境配置

由于是要运行在我的Hisi板子上,因此需要交叉编译。我这里使用交叉编译工具链是Buildroot下载生成的,内核使用的时候Hi SDK中的 3.4 内核。

为什么前面要在内核中配置驱动呢?如果完成所有必须驱动的配置,那么编译过程将不会有任何警告。猜测,这里的Makefile其实会去读内核中的配置。

因为要反复的测试编译,我这里写了一个脚本set_env.sh来配置交叉编译环境,主要就是配置环境变量。

#!/bin/bash 

export USER_EXTRA_CFLAGS=-fno-exceptions
export ARCH=arm
export CROSS_COMPILE=/media/data/workspace/buildroot-2022.02.8/output/host/opt/ext-toolchain/bin/arm-none-linux-gnueabi-
export KVER=3.4.35
export KSRC="/media/data/workspace/buildroot-2022.02.8/output/build/linux-3.4.y"

cd $(pwd)

sed -i 's\KSRC := /lib/modules/$(KVER)/build\KSRC ?= /lib/modules/$(KVER)/build\g' Makefile

注意这里需要修改Makefile中SRC变量配置,因为有默认配置,自己设置的参数会被覆盖不起作用,因此将Makefile中的都改成?=,防止KSRC参数被覆盖。因为我开始设置了这个参数,在编译时,怎么都不生效,在Makefile中的最后面的位置加入这个参数才生效,后来就发现是被默认配置给覆盖了。

进入到源码目录执行这个脚本,一定要用source 执行,否则全局变量不会生效。

source ../set_env.sh

2.3 编译

执行:

make -j12

编译成功:

make ARCH=arm CROSS_COMPILE=/media/data/workspace/buildroot-2022.02.8/output/host/opt/ext-toolchain/bin/arm-none-linux-gnueabi- -C /media/data/workspace/buildroot-2022.02.8/output/build/linux-3.4.y M=/media/data/library/temp/rtl8188eu  modules
make[1]: Entering directory '/media/data/workspace/buildroot-2022.02.8/output/build/linux-3.4.y'
  CC [M]  /media/data/library/temp/rtl8188eu/core/rtw_ioctl_set.o
  CC [M]  /media/data/library/temp/rtl8188eu/core/rtw_iol.o
  CC [M]  /media/data/library/temp/rtl8188eu/core/rtw_led.o
  CC [M]  /media/data/library/temp/rtl8188eu/core/rtw_mlme.o
  
.......................

  CC [M]  /media/data/library/temp/rtl8188eu/os_dep/usb_ops_linux.o
  CC [M]  /media/data/library/temp/rtl8188eu/os_dep/xmit_linux.o
  LD [M]  /media/data/library/temp/rtl8188eu/8188eu.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /media/data/library/temp/rtl8188eu/8188eu.mod.o
  LD [M]  /media/data/library/temp/rtl8188eu/8188eu.ko
make[1]: Leaving directory '/media/data/workspace/buildroot-2022.02.8/output/build/linux-3.4.y'

3. 测试

烧录重新编译的内核。将8188eu.kortl8188eufw.bin复制到开发板上。

8188eu.ko存放路径:

/lib/module/$(uname -r)

rtl8188eufw.bin存放路径:

/lib/firmware/rtlwifi

装载驱动:

# modprobe 8188eu
Chip Version Info: CHIP_8188E_Normal_Chip_TSMC_D_CUT_1T1R_RomVer(0)
EEPROM ID = 0x8129
usbcore: registered new interface driver r8188eu
# R8188EU: Firmware Version 11, SubVersion 1, Signature 0x88e1
MAC Address = e0:e1:a9:97:49:90
ioctl[SIOCSIWAP]: Operation not permitted
wlan0: Trying to associate with 80:ea:07:0e:2f:7d (SSID='Duapple_AP' freq=2437 MHz)
wlan0: Association request to the driver failed
R8188EU: INFO assoc success
wlan0: Associated with 80:ea:07:0e:2f:7d
wlan0: WPA: Key negotiation completed with 80:ea:07:0e:2f:7d [PTK=CCMP GTK=CCMP]
wlan0: CTRL-EVENT-CONNECTED - Connection to 80:ea:07:0e:2f:7d completed [id=0 id_str=]

出现最前面的4行日志,说明驱动已经加载成功,并且识别到USB无线网卡。后面是我提前配置好了wpa_supplicant,因此,只要wlan0出来了,就能够自动连接上Wi-Fi。

在这里插入图片描述

默认是没有dhcp获取IP地址的,这里手动执行dhcp来获取路由器分配的IP:

# udhcpc -i wlan0
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.0.104, server 192.168.0.1
udhcpc: lease of 192.168.0.104 obtained from 192.168.0.1, lease time 7200
deleting routers
adding dns 192.168.1.1
adding dns 192.168.0.1

配置DNS服务器,并测试网络:

# echo "nameserver 8.8.8.8" > /etc/resolv.conf
# ping baidu.com
PING baidu.com (39.156.66.10): 56 data bytes
64 bytes from 39.156.66.10: seq=0 ttl=51 time=100.215 ms
64 bytes from 39.156.66.10: seq=1 ttl=51 time=111.678 ms
64 bytes from 39.156.66.10: seq=2 ttl=51 time=125.347 ms
64 bytes from 39.156.66.10: seq=3 ttl=51 time=140.730 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 100.215/119.492/140.730 ms

如果网络不通,请检查路由表是否设置wlan0为默认路由。没有设置使用ip route完成配置。

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
0.0.0.0         0.0.0.0         0.0.0.0         U     1001002 0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1005   0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

4. 集成到内核

由于每次烧录根文件系统都要重新加入这个驱动,因此考虑将其集成到内核中,直接将其编译进内核或者和打包到Buildroot中。

我这里使用了Buildroot来构建根文件系统,因此也可以直接将上面的驱动和固件放到output/target目录下,对应的位置。这样也能将驱动和固件直接打包到根文件系统中。

未完…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1、常见的存储设备

文章目录较为常见的存储设备机械硬盘简介固态硬盘简介U盘简介固态U盘MMC卡SD卡简介TF卡NM卡MS卡CF卡CFExpress卡磁带光盘较为常见的存储设备 目前较为常见的存储设备&#xff0c;从电脑用的&#xff1a; 机械硬盘固态硬盘U盘固态U盘 到单反相机、运动相机、手机、行车记录仪…

BigDecimal 基本使用和常用方法

背景 涉及到比较大的数字之间的计算&#xff0c;使用float、double这样的浮点数就不那么准确了。因为不论是float 还是double都是浮点数&#xff0c;而计算机是二进制的&#xff0c;浮点数会失去一定的精确度。所以在商业计算中基本要用java.math.BigDecimal 一、初始化使用…

蹭秦霄贤流量,郭德纲凌晨时分转发老秦动态

都知道德云社董事长王慧很忙&#xff0c;每天除了打理公司业务&#xff0c;还要照顾众多徒弟们的衣食住行。王慧作为德云社董事长&#xff0c;她的忙都在情理之中&#xff0c;而郭德纲作为德云社总班主&#xff0c;他的时间就更加弥足珍贵了。 可是谁能想到&#xff0c;就是这样…

VSCode配置C++开发环境:OpenCV

文章目录Linux编译调试配置OpenCVWin10编译调试配置OpenCV参考最近在做深度学习的C部署相关工作&#xff0c;于是写下这篇文档记录环境配置的过程。环境配置是一项非常繁琐的工作&#xff0c;无论从大学做相关作业还是到工作上。做这项工作需要技术的同时&#xff0c;还需要点运…

从0到1完成一个Vue后台管理项目(一、创建项目)

1.创建文件夹 这很简单&#xff0c;自己选一个盘&#xff0c;然后建一个文件夹即可 我选择的是D盘&#xff0c;最后的目录是vue-admin 注意&#xff1a;最后的目录一定要是英文 2.创建项目 初始化 npm init -y 局部安装vue-cli vue-cli的版本一直在更新&#xff0c;所以不推…

品牌舆情总结及品牌修复,品牌舆情监测监控怎么做?

如今互联网大数据时代&#xff0c;信息流通越来越快&#xff0c;影响覆盖面广。品牌一旦出现舆论&#xff0c;很容易引起大范围的热议&#xff0c;对品牌发展造成不利影响&#xff0c;进而影响品牌声誉。接下来TOOM舆情监测小编带您简单了解品牌舆情总结及品牌修复&#xff0c;…

Linux_Study

文章目录1.操作系统概述1.1 操作系统的作用1.2 常见的操作系统2.Linux介绍2.1 诞生2.2 Linux内核3. Linux基础操作3.1 虚拟机快照3.2 Linux 目录结构3.3 命令、命令行3.4 ls命令&#xff08;列表命令&#xff09;3.5 cd/pwd命令&#xff08;目录命令&#xff09;3.6 相对路径、…

OPENCPU学习---开发环境搭建

BC260Y-CN模组移远公司提供了QuecOpen的开发方案&#xff0c;可以通过提供的SDK中相应的接口快速进行应用开发。开发环境的搭建&#xff0c;首先要准备好开发板、SDK包以及下载工具&#xff0c;准备好后进行编译配置即可进行开发。目前移远提供的BC260Y开发SDK版本为&#xff1…

Lambda表达式超详细总结(简单易懂)

文章目录1、什么是Lambda表达式2、为什么使用Lambda表达式3、函数式接口&#xff08;lambda表达式的使用前提&#xff09;4、推导Lambda表达式5、Lambda表达式语法1、什么是Lambda表达式 Lambda表达式&#xff0c;也可称为闭包。其本质属于函数式编程的概念&#xff0c;是Java…

js判断元素是否在可视区域内

基本概念 首先需要搞清楚 clientHeight、scrollTop 的区别&#xff0c;通俗地说&#xff0c;clientHeight 指的是网页可视区域的高度&#xff0c;scrollTop 指的是网页被卷起来的高度&#xff0c;可以参考这篇文章&#xff1a;彻底搞懂clientHeight、offsetHeight、scrollHeig…

SQL -- MySQL 初识

SQL SQL的概述&#xff1a; SQL全称&#xff1a; Structured Query Language&#xff0c;是结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。 SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公司研制的关系数据库系统System上实现美国国家…

入门远程连接技术

目录 1、ssh实验 要求&#xff1a;a.两台机器&#xff1a;第一台机器作为客户端&#xff0c;第二台机器作为服务器&#xff0c;在第一台使用rhce用户免密登录第二台机器。b.禁止root用户远程登录和设置三个用户sshuser1, sshuser2, sshuser3&#xff0c; 只允许sshuser3登录&…

DOM(二):节点操作、事件高级

节点操作节点层级事件高级事件对象节点概述 节点至少拥有nodeType&#xff08;节点类型&#xff09;、nodeName&#xff08;节点名称&#xff09;、nodeValue&#xff08;节点值&#xff09;这三个基本属性。 元素节点 nodeType为1属性节点 nodeType为2文本节点 nodeType为3 &…

字节前端必会vue面试题集锦

Vue3有了解过吗&#xff1f;能说说跟vue2的区别吗&#xff1f; 1. 哪些变化 从上图中&#xff0c;我们可以概览Vue3的新特性&#xff0c;如下&#xff1a; 速度更快体积减少更易维护更接近原生更易使用 1.1 速度更快 vue3相比vue2 重写了虚拟Dom实现编译模板的优化更高效的…

3、数据库中的约束数据库设计

约束 * 概念&#xff1a; 对表中的数据进行限定&#xff0c;保证数据的正确性、有效性和完整性。 * 分类&#xff1a; 1. 主键约束&#xff1a;primary key 2. 非空约束&#xff1a;not null 3. 唯一约束&#xff1a;unique 4. 外键约束&#xff1a;forei…

3.0里程碑:Topomel Box 现已在微软商店可用

猿友好&#xff01; 今天是个大喜的日子 我的程序 Topomel Box 的第三个版本(3.0)正式上架微软商店。通过微软商店这个统一的分发渠道&#xff0c;Topomel Box 有望与更多国家的用户见面并提供服务。 安装方法很简单&#xff0c;只需要打开微软商店&#xff08;Microsoft Sto…

⚡️【数据结构】二叉树的概念和相关知识总结

&#x1f332;目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1概念 2.2满二叉树 2.3完全二叉树 2.4满二叉树和完全二叉树的区别 2.5二叉树的性质 2.6…

linux日志管理总结,rules详解、轮转详解、实例展示。

概述 ​ 1、日志文件记录系统事件&#xff0c;包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等 ​ 2、通过日志来检查错误发生的原因&#xff0c;或者受到攻击时攻击者留下的痕迹。 1. rsyslog系统日志管理 1.1 处理日志的程序&#…

工控安全-Modbus重放攻击

文章目录Modbus-重放攻击Modbus-仿真环境(ModSim)Modbus-协议采集(ModbusScan)抓取Modbus/TCP流量使用青云工具进行重放攻击Modbus-重放攻击 Modbus-仿真环境(ModSim) 首先开启Modbus仿真环境 ip地址是10.10.100.11 ModSim32&#xff0c;这个软件是模拟Modbus协议的一个仿真…

git push错误->Error: src refspec master does not match any

参考文章问题描述&#xff1a;在执行命令 git push origin master 时报错->Error: src refspec master does not match any问题分析&#xff1a;在网上查找解决方法&#xff0c;大部分人说是暂存区没有文件&#xff0c;未执行git add 导致出错。但是此时已经执行了git add 操…