STM32MP157驱动开发——Linux WIFI驱动

news2024/11/17 3:35:32

STM32MP157驱动开发——Linux WIFI驱动

  • 一、简介
  • 二、驱动开发
    • 1.wifi驱动添加与编译
    • 2.配置 USB 支持设备
      • 1)配置 USB 支持设备
      • 2)配置支持的 WIFI 设备
      • 3)配置支持 IEEE 802.11
      • 4)使能 STAGING 配置
    • 3.设备树配置
    • 4.编译 wifi 驱动
      • 1)rtl8723ds 驱动配置
      • 2)rtl8188eus 驱动配置
  • 三、测试
    • 1.固件拷贝
    • 2.RTL8723 SDIO WIFI 驱动测试
    • 3.RTL8188EUS USB WIFI 驱动测试
    • 4.联网测试
        • 连接wifi:
    • 5.USB WIFI模块测试


参考文章:【正点原子】I.MX6U嵌入式Linux驱动开发——Linux WIFI驱动

一、简介

  有线网络在有些场景下会受到网线等因素限制,所以有时候也需要使用 wifi 连接的方式使设备联网。正点原子 STM32MP1 开发板支持 USB 和 SDIO 这两种接口的 WIFI 设备,本节就学习一下如何使用这两种 wifi。

二、驱动开发

原理图:
在这里插入图片描述
正点原子的 STM32MP157 开发板板载了一个 SDIO WIFI,使用的 wifi 芯片为 RTL8723DS。该芯片通过 SDIO 接口进行连接,D0~4 所对应的硬件引脚为:PF0、PF4、PF5 和 PD7,CMD 对应的硬件引脚为 PF1,CLK 所对应的硬件引脚为 PG15。

1.wifi驱动添加与编译

  除了 SDIO 接口的 wifi 设备以外,开发板还支持 USB 接口的 wifi 设备。USB 接口的 wifi 设备使用的控制芯片为 RTL8188EUS,这两个都是 realtek 公司的产品,已经由 realtek 公司提供了 WIFI 驱动源码,所以只需要将 WIFI 驱动源码添加到 Linux 内核中,然后通过图形界面配置,选择将其编译成模块即可。
  正点原子的源码资料中也已经提供了相关的 wifi 驱动,将资料中的 rtl8723ds 目录整个拷贝到 Linux 内核源码目录下的 drivers/net/wireless/realtek/目录中,此目录下存放了所有 realtek 公司的 WIFI 驱动。
在这里插入图片描述
然后修改该目录下的 Kconfig,用于配置图形化界面。在其中加入以下内容:

source "drivers/net/wireless/realtek/rtl8723ds/Kconfig"

在这里插入图片描述
此外,还需要修改该目录下的 Makefile,将驱动文件加入编译。添加以下内容:

obj-$(CONFIG_RTL8723DS) += rtl8723ds/

在这里插入图片描述

2.配置 USB 支持设备

1)配置 USB 支持设备

USB 配置默认已经选中了,在内核源码 menuconfig 的以下路径:
在这里插入图片描述

2)配置支持的 WIFI 设备

在这里插入图片描述

3)配置支持 IEEE 802.11

注:此部分只编译为模块。
在这里插入图片描述

4)使能 STAGING 配置

在这里插入图片描述
配置完以后就可以编译出新的内核镜像 uImage。

3.设备树配置

STM32MP157 开发板的 sdmmc1 用于连接sdcard,sdmmc2用于连接eMMC,sdmmc3则用于连接这里所用到的的WiFi接口。所以还需要添加一个 sdmmc3 节点。
首先配置 sdmmc3 的引脚信息,在 stm32mp15-pinctrl.dtsi 文件中,存在 sdmmc3 的相关引脚配置:
在这里插入图片描述
本节中使用的 RTL8723DS 引脚与官方配置相同,所以不需要修改。

然后还需要配置 sdmmc3 控制器节点信息,在自己的设备树下追加以下节点:

&sdmmc3 {
	pinctrl-names = "default", "opendrain", "sleep";
	pinctrl-0 = <&sdmmc3_b4_pins_a>;
	pinctrl-1 = <&sdmmc3_b4_od_pins_a>;
	pinctrl-2 = <&sdmmc3_b4_sleep_pins_a>;
	non-removable;
	st,neg-edge;
	bus-width = <4>;
	vmmc-supply = <&v3v3>;
	status = "okay";
	keep-power-in-suspend;
};

注:STM32MP157 有三个SDMMC接口,物理地址分别为0x58005000~0x58005FFF、0x58007000~0x58007FFF 和 0x48004000~0x480043FF。它们的初始化顺序是根据物理地址的顺序:SDMMC3→SDMMC1→SDMMC2。如果三个接口都使能,那么在 Linux 里所对应的操作文件为: /dev/mmcblk0(SDMMC3)、/dev/mmcblk1 (SDMMC1)和 /dev/mmcblk2 (SDMMC2)。在出厂系统中,启动 EMMC 上的文件系统使用的是 mmcblk2,但是在原子哥教程前面讲解系统移植的时候说挂载 EMMC 里面文件系统的时候使用 mmcblk1,那是因为那个时候还没有使能 SDMMC3 这个接口,所以 mmcblk1 就是 EMMC。这两处并不矛盾。

4.编译 wifi 驱动

在内核源码目录下,进入 menuconfig 界面,将 rtl8723ds 和 rtl8188eus 驱动编译成模块。

1)rtl8723ds 驱动配置

在这里插入图片描述

2)rtl8188eus 驱动配置

在这里插入图片描述
然后重新编译出设备树、uImage、驱动模块,就可以用于开发板启动。

make dtbs 		  #重新编译设备树
make modules	  #编译驱动模块

本节配置了三个模块,分别是:IEEE 802.11、rtl8723ds 和 rtl8188eus。所对应的模块名为:cfg8011.ko、8723ds.ko 和 r8188eu.ko。将其拷贝到nfs的对应目录下:

sudo cp drivers/staging/rtl8188eu/r8188eu.ko ~/linux/nfs/rootfs/lib/modules/5.4.31/
sudo cp net/wireless/cfg80211.ko ~/linux/nfs/rootfs/lib/modules/5.4.31/
sudo cp drivers/net/wireless/realtek/rtl8723ds/8723ds.ko ~/linux/nfs/rootfs/lib/modules/5.4.31/

将新编译的设备树文件和内核镜像也拷贝到相应目录下,启动开发板。

三、测试

1.固件拷贝

有些模块需要和固件配合使用,比如 cfg80211.ko 驱动模块需要读取 /lib/firmware/regulatory.db 文件。这个文件在原子哥的源码包中也提供了,直接拷贝即可。除此之外,regulatory.db固件和regulatory.db.p7s固件都是cfg80211.ko模块需要加载的。rtl8188wufw.bin固件是 r8188.ko 模块需要加载的。
在开发板的根目录下创建存放固件的文件夹,然后将固件拷贝进去。

sudo mkdir ~/linux/nfs/rootfs/lib/firmware/rtlwifi -p

在这里插入图片描述

2.RTL8723 SDIO WIFI 驱动测试

进入目录 /lib/modules/5.4.31 中,挂载 8723ds.ko 这个驱动模块:

depmod 		#第一次加载驱动的时候需要运行此命令
modprobe cfg80211.ko 	#先加载 cfg80211.ko, IEEE 协议
modprobe 8723ds.ko 	#RTL8723DS 模块加载 8723ds.ko 模块

挂载成功会出现以下提示:
在这里插入图片描述
输入ifconfig -a命令,查看 wlanX(X=0….n)网卡是否存在,一般都是 wlan0,有多个wifi模块的话可能会出现多个设备文件。
在这里插入图片描述

3.RTL8188EUS USB WIFI 驱动测试

将 RTL8188 USB WIFI 接到开发板上,使用以下命令进行挂载:

depmod
modprobe r8188eu.ko

4.联网测试

首先要给文件系统添加一些操作 WIFI 的工具,进入 buildroot 的menuconfig 界面,使能以下配置:
在这里插入图片描述
然后编译出新的根文件系统,用于启动开发板。
接着就可以使用以下命令进行测试:
ifconfig wlan0 up:打开 wifi 网卡
iwlist wlan0 scanning:扫描当前存在的无线网络(记得接天线)
由于 RTL8723 只支持 2.4G 频段 WIFI,因此扫描不出来 5G 频段 WIFI。

连接wifi:

默认情况下,开发板根文件系统/etc 目录下会有一个名为“wpa_supplicant.conf”的配置文件,如果没有就自行创建一个。然后在该文件中添加wifi配置信息:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
	ssid="[wifi_name]"
	psk="[password]"
}

注:该文件中的 '=' 前后不能有空格
修改完成后,在开发板根文件系统下创建一个 /var/run/wpa_supplicant 目录。wpa_supplicant 工具要用到此目录:

mkdir /var/run/wpa_supplicant -p

接着使用 wpa_supplicant 工具让 RTL8723 SDIO WIFI 连接到热点上:

wpa_supplicant -Dnl80211 -c /etc/wpa_supplicant.conf -i wlan0 &

最后设置 wlan0 的 IP 地址,这里使用 udhcpc 命令从路由器动态获取:

udhcpc -i wlan0

测试:

ping -I [wlan0_ip] www.baidu.com

-I 是指定执行 ping 操作的网卡 IP 地址,这里指定为 wlan0 的ip。

5.USB WIFI模块测试

与上述内容相似,这里就略过了。

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

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

相关文章

05SpringCloudAlibaba负载均衡服务调用-Ribbon

目录 推荐与004SpringCloud-Ribbon_gh_xiaohe的博客-CSDN博客 对比观看 Ribbon概述 Ribbon官网https://github.com/Netflix/ribbon/wiki/Getting-Started Ribbon是什么 Ribbon也进入维护模式 Ribbon能干什么 LB&#xff08;负载均衡&#xff09; 一句话&#xff1a;…

冲击港交所:百果园书写水果连锁运营默示录

卖水果是一门古老的生意&#xff0c;但是长期以来并不受资本重视。一是因为产品口味难以标准化、鲜度要求高、流通环节易损耗、质量控制难度大。二是因为交易主体多&#xff0c;进出壁垒小&#xff0c;经济学中往往将其定义为完全竞争市场&#xff0c;难以出现龙头企业和超额利…

AI与艺术——图像生成模型是否能挑战人类艺术?

在2018年末的佳士得纽约拍卖场上&#xff0c;一件名为《爱德蒙贝拉米肖像》拍出了43.25万美元的价格&#xff0c;从绘画艺术风格来看&#xff0c;这是一幅有着很明显的印象派主义痕迹的作品。 印象派是19世纪中叶在法国兴起的一种艺术运动。印象派艺术家们拒绝了艺术(“美术”…

Webpack中的文件指纹

1. 什么是文件指纹&#xff1f; 文件指纹就是打包后输出的文件名的后缀&#xff0c;主要用来对修改后的文件做版本区分。 2. 文件指纹有哪几种&#xff1f; 1. Hash&#xff1a;和整个项目的构建相关&#xff0c;只要项目文件有修改&#xff0c;整个项目构建的 hash 值就会更…

CSRF与XSS攻防知识点总结

本章节将用于详细总结记录&#xff0c;跨站脚本攻击XSS&#xff08;cross site script&#xff09;与 跨站请求伪造CSRF&#xff08;cross site request forgery&#xff09;这两种常见的浏览器安全的攻防手段。本章节会介绍两种攻击的概念&#xff0c;以及相关手段有哪些&…

常见的电动两轮车 BMS 架构

1、摘要 近年来&#xff0c;随着新国标的施行&#xff0c;以及平衡车&#xff0c;滑板车&#xff0c;共享电单车等新应用场景的出现&#xff0c;促使电动两轮车市场迎来了新的发展热潮。 锂电池因为具有能量密度高&#xff0c;循环次数多等优点而逐渐替代铅酸电池&#xff0c…

Spire.XLS for Java 12.12.4 2022-12-30 Version

Spire.XLS for Java 12.12.4 Spire.XLS for Java是一个专业的 Java Excel API&#xff0c;Ω578867473使开发人员无需使用 Microsoft Office 或 Microsoft Excel即可创建、管理、操作、转换和打印 Excel工作表。 Spire.XLS for Java 支持旧的 Excel 97-2003 格式&#xff08;.…

Java中main函数里的String[] args详解

1&#xff09;概念 在开始学习 Java 时都会被要求记住主方法&#xff08;main&#xff09;的写法&#xff0c;就像以下&#xff1a; public static void main(String[] args) { }&#xff1b;public static void main(String args[]) { }&#xff1b; 这里做如下说明&#xff…

什么是 A/B 实验,为什么要开 A/B 实验?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 1、什么是 A/B 实验 A/B 实验也被称为 A/B 测试&#xff0c;实验的基本思路是在线上流量中取出一小部分&#xff08;较低风险&#xff09;&#xff0c;完全随机地分…

【机器学习】minHash最小哈希原理及其应用

目录1 前言2 哈希函数的定义3 miniHash函数4 miniHash的例子5 miniHash数学原理6 miniHash的应用7 参考文献1 前言 在数据结构中学过哈希概念以及哈希在内存中的应用&#xff0c;在实际的应用问题中哈希技术也应用十分广泛如在推荐系统以及图神经网络技术中&#xff0c;所以在此…

Java多线程之死锁问题,wait和notify

文章目录一. synchronnized 的特性1. 互斥性2. 可重入性二. 死锁问题1. 什么是死锁2. 死锁的四个必要条件3. 常见的死锁场景及解决3.1 不可重入造成的死锁3.2 循环等待的场景哲学家就餐问题(多个线程多把锁)两个线程两把锁三. Object类中提供线程等待的方法1. 常用方法2. wait和…

剑指offer----C语言版----第八天

目录 1. 矩阵中的路径 1.1 题目描述 1.2 基础知识 1.3 思路分析 1.4 小试牛刀 1. 矩阵中的路径 原题链接&#xff1a; 剑指 Offer 12. 矩阵中的路径 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/ju-zhen-zhong-de-lu-jing-lcof/submissions/ 1.1 题…

c++11 标准模板(STL)(std::deque)(七)

定义于头文件 <deque> std::deque 修改器 清除内容 std::deque<T,Allocator>::clear void clear(); (C11 前) void clear() noexcept; (C11 起)从容器擦除所有元素。此调用后 size() 返回零。 非法化任何指代所含元素的引用、指针或迭代器。任何尾后迭代器亦被…

静态主机清单

自定义环境 1.操作环境 需要保准三台主机能够互相通信。设置同一种网络模式&#xff08;nat&#xff09;。 2.配置IP地址 server---192.168.90.134 node1---192.168.90.135 node2---192.168.90.133 3.修改主机名 hostnamectl set-hostname server.exmaple.com hostnamec…

【安全硬件】Chap.3 如何插入一个硬件木马到芯片的组合逻辑电路的漏洞里?不影响正常电路的功能的情况下进行硬件的逻辑加密

【安全硬件】Chap.3 如何插入一个硬件木马到芯片的组合逻辑电路的漏洞里&#xff1f;如何进行硬件的逻辑加密在不影响正常电路的功能的情况下1. 组合逻辑电路的漏洞组合逻辑电路中的硬件木马—举例Fault injection attacks士兵巡逻预案系统解决方法——硬件的逻辑加密&#xff…

坦克大战2.0,3.0,4.0版本

1.坦克大战 0.3 在坦克大战游戏(0.2版)基础上添加如下功能:当玩家按一下j键,就发射一颗子弹. 编写Shot类 package com.yt.tankgame03;/*** 射击子弹*/ public class Shot implements Runnable{int x;//子弹的x坐标int y;//子弹的y坐标int direct;//子弹的方向int speed 2;//子…

Python 做了一个 ChatGPT 机器人,表妹玩了一下午

大家好&#xff0c;我是毕加锁。 毫无疑问&#xff0c;ChatGPT 已经是当下编程圈最火的话题之一&#xff0c;它不仅能够回答各类问题&#xff0c;甚至还能执行代码&#xff01; 或者是变成一只猫 因为它实在是太好玩&#xff0c;我使用Python将ChatGPT改造&#xff0c;可以实现…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的知识蒸馏模型/方法/源码

目录给我推荐20个比较流行的知识蒸馏模型给我推荐10个比较流行的知识蒸馏模型源码给我推荐20个比较流行的深度学习知识蒸馏方法给我推荐20个比较流行的深度学习知识蒸馏方法源码给我推荐20个比较流行的深度学习知识蒸馏实现源码给我推荐20个比较流行的知识蒸馏模型 好的&#…

VSCode配置并连接远程服务器 并设置免密登录

文章目录1 前言PyCharm与VSCode2 VSCode配置远程开发环境3 VSCode配置远程免密登录4 推荐插件参考1 前言 PyCharm与VSCode 最近由于许多深度学习的项目需要在服务器上跑&#xff0c;之前一直使用PyCharm进行开发&#xff0c;使用习惯之后觉得还行&#xff0c;配置稍微有点复杂…

(七)Docker上安装常用软件说明(tomcat,mysql)

目录 一、总体步骤 二、安装tomcat 三、安装mysql&#xff08;简易版&#xff09; 四、安装mysql&#xff08;实战版&#xff09; 一、总体步骤 1、搜索镜像 2、拉取镜像 3、查看镜像 4、启动镜像 5、停止容器 6、移除容器 二、安装tomcat 1、dockerhub官网搜索tom…