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

Linux wifi 驱动移植适配流程详解

基础内容概要

  1. 将tplink wn725n 无线网卡驱动移植到ubuntu
  2. 将tplink wn725n 无线网卡驱动移植到Linux开发板(交叉编译)
  3. 将tplink wn725n 无线网卡驱动移植到Linux开发板,在开发板中编译

为什么还要包涵交叉编译?

  • 目标设备是ARM架构的,而开发者的开发机通常是x86的
  • 资源限制也是一个因素,嵌入式设备通常资源有限,处理能力、内存和存储空间都不如开发机,因此需要在更强大的开发机上进行交叉编译,节省时间和资源

为什么还要分为两个任务进行移植?

  • 对比原cpu架构与跨cpu架构移植等区别

我为什么选择了rtl8188eu,没有选择cu?

在这里插入图片描述

基础概念明确(重要)

  • 常见的硬件架构,比如x86、ARM、MIPS、RISC-V等
  • 交叉编译的核心是在一种平台上生成另一种平台的可执行代码
    差异可能来自两方面:
    跨架构:开发机与目标机的CPU架构不同(如x86 → ARM)。
    跨操作系统:开发机与目标机的操作系统不同(如Linux → Windows)。
  • 交叉编译的典型场景
    仅跨架构
    示例:在x86 Linux电脑上编译ARM Linux程序
    工具链:arm-linux-gnueabi-gcc(针对ARM架构的Linux编译器)
    关键点:架构不同,但操作系统相同(均为Linux),需处理指令集和ABI差异
    仅跨操作系统
    示例:在Linux上编译Windows程序
    工具链:x86_64-w64-mingw32-gcc
    关键点:架构相同(均为x86),但操作系统不同,需适配系统调用和库
    跨架构且跨操作系统
    示例:在x86 macOS上编译ARM Android程序
    工具链:Android NDK中的aarch64-linux-android-gcc
    关键点:需同时处理ARM指令集和Android系统库

详细点说,我们现在的交叉编译移植的是跨架构的驱动移植

正文

将驱动移植到Ubuntu

  1. 需要确认RTL8188EU是否已经ubuntu内核支持。如果默认支持,用户可能需要禁用现有的驱动或者更换其他未被支持的硬件。
    要移植,当然是不支持
  2. 使用已适配新内核的驱动分支
    驱动代码拉取:
    git clone https://github.com/aircrack-ng/rtl8188eus
    在这里插入图片描述
    在这里插入图片描述
    切换分支
    在这里插入图片描述
  3. 驱动编译
    在这里插入图片描述
    编译后的文件:
    在这里插入图片描述
  4. cfg80211驱动加载:
    在这里插入图片描述
  5. 无线驱动拷贝
    sudo cp 8188eu.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/
    解决依赖:
    sudo depmod -a
    驱动加载
    sudo modprobe 8188eu
  6. 查看驱动:
    在这里插入图片描述
  7. 驱动日志(dmesg -w):
    在这里插入图片描述
    成功加载

将驱动移植到树莓派(交叉编译+移植适配)

  1. 安装交叉编译工具链:
    sudo apt update
    sudo apt install gcc-arm-linux-gnueabihf git bc make
  2. 获取树莓派内核源码下载与开发板当前内核匹配的源码(确保版本一致):
    查看树莓派内核版本
    我下载的版本:git clone --depth=1 --branch rpi-6.6.y https://github.com/raspberrypi/linux
  3. 配置交叉编译环境(相当需要注意
    export ARCH=arm
    export CROSS_COMPILE=arm-linux-gnueabihf-
    export KSRC=~/Desktop/shumeipai_1/linux # 替换为内核源码路径
  4. 查看环境变量
    在这里插入图片描述
  5. 内核源码编译
    make -j4
    在这里插入图片描述
    生成内核默认配置:
    在这里插入图片描述
    继续编译
    在这里插入图片描述
    发现使用的默认内核问题比较多,然后使用了专门用于树莓派的默认配置文件
    生成内核默认配置:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2835_defconfig
    在这里插入图片描述
    再编译:make -j4
    在这里插入图片描述
    内核源码编译成功
  6. 驱动编译
    在这里插入图片描述
    接上图
    在这里插入图片描述
    原因分析
    这个错误是由于RTL8188EU 无线网卡驱动与当前内核版本不兼容导致的
    解决思路
    struct net_device 和 struct iw_handler_def 在内核的新版本中已经发生了变化,移除了 wireless_handlers、private、private_args 字段,导致驱动编译失败。
    解决方案
    直接注释掉这些函数调用(这是所有的报错修改,错误还是比较少的)
    在这里插入图片描述
    在这里插入图片描述
    全部修改
    在这里插入图片描述
    继续编译:
    在这里插入图片描述
    原因分析
    这个错误表明 modpost 阶段发现 iwe_stream_add_event、wireless_send_event 和 iwe_stream_add_point 等符号未定义,说明 RTL8188EU 驱动依赖的无线网络接口(Wireless Extensions)在内核中不存在
    解决思路
    在 menuconfig 中 启用 Wireless Extensions
    解决步骤
    但是我并没有在menuconfig中找到Wireless Extensions,但是在搜索中找到了
    在这里插入图片描述
    我发现,CONFIG_WIRELESS_EXT 未被任何驱动选中(所有 Selected by 项都是 [=n]),导致它默认关闭且无法在 menuconfig 中直接启用
    所以我们可以随便开启一个驱动,我开启了hostap,以启用Wireless Extensions:
    在这里插入图片描述
    再次查看menuconfig
    在这里插入图片描述
    退出保存,再次编译内核源码:make -j4
    在这里插入图片描述
    接上图
    在这里插入图片描述编译成功
  7. 再次编译驱动:make -j4
    在这里插入图片描述
    接上图
    在这里插入图片描述
    编译成功,驱动已生成(8188eu.ko)

我还适配了另外一套的驱动源码(交叉编译),篇幅太多,如果需要,可以留言或者私聊提供

驱动链接:
git clone https://github.com/aircrack-ng/rtl8188eus
在这里插入图片描述
里面包含了按照内核源码api接口修改驱动代码

将tplink wn725n 无线网卡驱动移植到Linux开发板,在开发板中编译

  1. 使用前面已经交叉编译的代码,拷贝到开发板(代码基本上不会再适配了)

  2. 编译(make -j4)
    在这里插入图片描述
    成功编译

  3. 拷贝8188.ko驱动到
    sudo cp 8188eu.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/

  4. 驱动加载与查看驱动加载情况
    在这里插入图片描述
    驱动成功加载

  5. 内核日志打印
    在这里插入图片描述

驱动功能验证

暂无硬件设备,后期分享,谢谢您的耐心阅读

相关文章:

  • Java中如何保证高并发的数据安全
  • 高效定位 Go 应用问题:Go 可观测性功能深度解析
  • JavaScript弹出框的使用:对话框、确认框、提示框、弹窗操作
  • 智能体的核心模式和架构
  • [学术][人工智能] 001_什么是神经网络?
  • mapbox基础,使用geojson加载cluster聚合图层
  • leetcode994.腐烂的橘子
  • 使用 2 端口探头测量 40 uOhm(2000 安培)PDN 的挑战 – 需要多少 CMRR?
  • 航空记录器(黑匣子)未来发展趋势
  • Spring MVC 中<mvc:resources> 的两种配置中,`classpath:/static/`和`/static/`有什么不同
  • Python爬虫教程005:ajax的get请求豆瓣电影排行榜
  • html中img标签直接使用border-radius时会图片进行了遮挡
  • 被誉为开源RTOS的天花板ThreadX
  • 【Linux笔记】系统中的权限管理及优化
  • Linux 编程环境
  • Dify 深度集成 MCP实现灾害应急响应
  • CVP介绍
  • C语言函数
  • ThingsBoard移动应用详细讲解
  • Redis简介
  • 洛阳网站seo/站长工具果冻传媒
  • xml网站地图格式/搜狐财经峰会
  • 厦门 外贸商城网站建设/手机百度云网页版登录
  • 深圳公司网站推广/seo网络优化
  • 推荐做木工的视频网站/深圳seo技术
  • wordpress前端怎么写/优化生育政策