【正点原子Linux连载】第四十一章 Linux wifi驱动实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1)实验平台:正点原子ATK-DLRK3568开发板
2)平台购买地址:https://detail.tmall.com/item.htm?id=731866264428
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban

第四十一章 Linux wifi驱动实验

WIFI的使用已经很常见了,手机、平板、汽车等等,虽然可以使用有线网络,但是有时候很多设备存在布线困难的情况,此时WIFI就是一个不错的选择。正点原子ATK-DLRK3568开发板支持SDIO接口的WIFI,本章我们就来学习一下如何在ATK-DLRK3568开发板上使用SDIO接口WIFI。

41.1 硬件原理图分析
正点原子的ATK-DLRK3568开发板板载了SDIO WIFI使用芯片是RTL8852BS 芯片,原理图如下所示:
在这里插入图片描述

图41.1 RTL8852BS原理图
从图41.1.1中可以看出,板载的WIFI为SDIO接口,D0~4所对应的硬件引脚为:GPIO3_C6、GPIO3_C7、GPIO3_D0和GPIO3_D1,CMD对应的硬件引脚为GPIO3_D2,CLK所对应的硬件引脚为GPIO3_D3。
41.2 WIFI驱动添加与编译
正点原子的ATK-DLRK3568开发板目前支持SDIO接口的WIFI。WIFI驱动不需要我们编写,因为realtek公司提供了WIFI驱动源码,因此我们只需要将WIFI驱动源码添加到Linux内核中,然后通过图形界面配置,选择将其编译成模块即可。
正点原子的ATK-DLRK3568开发板上有一个板载RTL8852BS WIFI,接口为SDIO。RTL8852BS芯片是WIFI和蓝牙二合一,这一章只讲解WIFI。正点原子ATK-DLRK3568开发板上的RTL8852BS模组的封装形式的,如下图图41.2.1 RTL8852BS板载SDIO WIFI所示:
在这里插入图片描述

图41.2.1 RTL8852BS板载SDIO WIFI
41.2.1向Linux内核添加WIFI驱动
在正点原子提供rk3568 linux sdk源码里,就有这个RTL8852BS驱动,不用我们去添加这个驱动,现在我们来看看这个驱动在哪个位置。
RTL8852BS源码不在kernel目录下,而是在SDK顶层目录下的external/rkwifibt/realtek/RTL8852BS,我们可以看到除了RTL8852BS这个驱动还有其他型号的WIFI驱动。详细如下图图41.2.1所示。
在这里插入图片描述

图41.2.1.1 RTL8852BS源码目录
那么它不在kernel目录下,我们如何编译它呢?答案就是buildroot。使能环境变量,选择开发板配置后,输入make menuconfig,配置buildroot编译项,默认正点原子已经选上RTL8852BS驱动。Buildroot配置项为Target packages → Rockchip BSP packages → rkwifibt。如下图图41.2.1.2所示。
在这里插入图片描述

图41.2.1.2选中RTL8852BS驱动编译
我们知道内核驱动模块编译是依赖内核的,所以配置Buildroot编译项后,需要编译内核,后再编译buildroot才会编译内核驱动模块。默认我们执行build.sh就已经全部编译。并且内核驱动模块已经安装在Builroot根文件系统的/system/lib/modules/8852bs.ko下。开机通过/etc/init.d/S36load_wifi_modules脚本自动加载。
41.2.2设置树配置
1、pinctrl的配置
首先肯定是sdmmc2引脚配置信息,打开rk3568-pinctrl.dtsi,找到如下所示内容:
示例代码41.2.2.1 sdmmc2引脚配置

1 sdmmc2 {
2         /omit-if-no-ref/
3         sdmmc2m0_bus4: sdmmc2m0-bus4 {
4                 rockchip,pins =
5                         /* sdmmc2_d0m0 */
6                         <3 RK_PC6 3 &pcfg_pull_up_drv_level_2>,
7                         /* sdmmc2_d1m0 */
8                         <3 RK_PC7 3 &pcfg_pull_up_drv_level_2>,
9                         /* sdmmc2_d2m0 */
10                        <3 RK_PD0 3 &pcfg_pull_up_drv_level_2>,
11                        /* sdmmc2_d3m0 */
12                        <3 RK_PD1 3 &pcfg_pull_up_drv_level_2>;
13        };
14
15        /omit-if-no-ref/
16        sdmmc2m0_clk: sdmmc2m0-clk {
17                rockchip,pins =
18                        /* sdmmc2_clkm0 */
19                        <3 RK_PD3 3 &pcfg_pull_up_drv_level_2>;
20        };
21
22        /omit-if-no-ref/
23        sdmmc2m0_cmd: sdmmc2m0-cmd {
24                rockchip,pins =
25                        /* sdmmc2_cmdm0 */
26                        <3 RK_PD2 3 &pcfg_pull_up_drv_level_2>;
27        };
28
29        /omit-if-no-ref/
30        sdmmc2m0_det: sdmmc2m0-det {
31                rockchip,pins =
32                        /* sdmmc2_detm0 */
33                        <3 RK_PD4 3 &pcfg_pull_up>;
34        };
35
36        /omit-if-no-ref/
37        sdmmc2m0_pwren: sdmmc2m0-pwren {
38                rockchip,pins =
39                        /* sdmmc2m0_pwren */
40                        <3 RK_PD5 3 &pcfg_pull_none>;
41        };
......
43 }

示例代码42.2.2.1中就是sdmmc2的默认引脚配置,这个是RK官方根据自己的EVK开发板编写的,和正点原子ATK-DLRK3568开发板上的SDMMC2引脚一样,所以不需要修改!
2、sdmmc2控制器节点信息
打开rk3568.dtsi文件,找到名为“sdmmc2”的节点,内容如下:
示例代码41.2.2.2 sdmmc2节点

1   sdmmc2: dwmmc@fe000000 {
2           compatible = "rockchip,rk3568-dw-mshc",
3                        "rockchip,rk3288-dw-mshc";
4           reg = <0x0 0xfe000000 0x0 0x4000>;
5           interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
6           max-frequency = <150000000>;
7           clocks = <&cru HCLK_SDMMC2>, <&cru CLK_SDMMC2>,
8                    <&cru SCLK_SDMMC2_DRV>, <&cru SCLK_SDMMC2_SAMPLE>;
9           clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
10          fifo-depth = <0x100>;
11          resets = <&cru SRST_SDMMC2>;
12          reset-names = "reset";
13          status = "disabled";
14  };

示例代码41.2.2.2中的sdmmc2节点不需要我们修改,这里只是告诉大家sdmmc2完整节点信息。从第13行可以看出,sdmmc2设备默认是关闭的。
3、使能sdmmc2节点
打开rk3568-atk-evb1-ddr4-v10.dtsi文件,用追加代码的方式去使能sdmmc2节点,追加的内容如下所示:
示例代码41.2.2.3 要追加的sdmmc3节点

1 &sdmmc2 {
2         max-frequency = <150000000>;
3         supports-sdio;
4         bus-width = <4>;
5         disable-wp;
6         cap-sd-highspeed;
7         cap-sdio-irq;
8         keep-power-in-suspend;
9         mmc-pwrseq = <&sdio_pwrseq>;
10        non-removable;
11        pinctrl-names = "default";
12        pinctrl-0 = <&sdmmc2m0_bus4 &sdmmc2m0_cmd &sdmmc2m0_clk>;
13        sd-uhs-sdr104;
14        status = "okay";
15};

示例代码41.2.2.3给sdmmc2节点追加了pinctrl配置和使能了sdmmc2。
41.3 WIFI联网测试
41.3.1 buildroot WIFI工具配置
首先要给文件系统添加一些操作WIFI的工具。进入buildroot源码目录里,接着运行“make menuconfig”进入图形配置界面,配置如下:
Target packages
Networking applications
[] wireless tools //选中
[
] Install shared library //选中
[] wpa_supplicant //选中
[
] Enable nl80211 support //选中
[] Enable AP mode //选中
[
] Enable autoscan //选中
[] Enable EAP //选中
[
] Install wpa_cli binary //选中
[] Install wpa_client shared library //选中
[
] Install wpa_passphrase binary //选中
配置完成如图41.3.1.1所示:
在这里插入图片描述

图41.3.1.1 buildroot WIFI工具配置
正点原子提供的出厂固件已经默认勾选,所以读者亲自勾选,这里笔者只是演示我们配置了哪些buildroot编译项目。
41.3.2 RTL8852BS SDIO WIFI联网测试
connmanctl 是一个用于管理网络连接的命令行工具,它通常用于 Linux 操作系统中。它是一个与 ConnMan(Connection Manager)守护进程一起工作的客户端工具。ConnMan 是一个轻量级的网络管理器,旨在提供简单而灵活的方式来管理不同类型的网络连接,如有线、Wi-Fi、蓝牙等。本实验我们就使用这个connmanctl来连接我们的SDIO WIFI。connmanctl底层依赖我们上一小节勾选的wpa_supplicant,其他WIFI工具请自行测试。
使用出厂buildroot linux系统开机查看LOG信息,我们可以看到WIFI驱动已经加载,如下图41.3.2.1所示。
在这里插入图片描述

图41.3.2.1 WIFI驱动打印信息
查看connmanctl指令用法,输入connmanctl -h。如下图41.3.2.2所示。
在这里插入图片描述

图41.3.2.1 WIFI驱动打印信息
我们可以使用下面指令来连接wifi。

connmanctl #进入WIIF操作终端
connmanctl> enable wifi #使能WIFI,默认已经使能
connmanctl> agent on #开启代理
connmanctl> scan wifi #开启WIFI扫描,可以多次扫描
connmanctl> services #列出扫描到的WIFI列表
扫描的WIFI结果如下图。
在这里插入图片描述

图41.3.2.2 扫描出的热点信息
从扫描到WIFI列表中,使用connect XXXX进行连接,再输入密码按回车确认。比如笔者要连接“ALIENTEK-YY”,(注意由于IOS手机热点兼容性问题,可能会连接不上IOS手机发出的热点)运行结果如下命令:
connect wifi_58374488c7b4_414c49454e54454b2d5959_managed_psk #连接
exit #退出终端
在这里插入图片描述

图41.3.2.3 连上热点
查看wlan0获取的ip地址,输入ifconfig。获取的IP地址如下。
在这里插入图片描述

图41.3.2.4 连上热点
可以通过电脑ping一下wlan0的192.168.3.54这个IP地址,如果能ping通就说明RTL8852BS SDIO WIFI 工作正常。也可以直接在开发板上使用 wlan0 来 ping 一下百度网站,输入如下命令:
ping -I 192.168.3.54 www.baidu.com
-I 是指定执行 ping 操作的网卡 IP 地址,我们要使用 wlan0 去 ping 百度网站,因此要通过“-I”指定 wlan0 的 IP 地址。如果 WIFI 工作正常的话就可以 ping 通百度网站,如图 43.3.2.5所示:
在这里插入图片描述

图43.3.2.5 百度网站 ping 成功
至此 RTL8852BS SDIO WIFI 我们就完全驱动起来了,大家就可以使用 WIFI 来进行网络通信了。更多WIFI模式,请查看光盘资料\10、用户手册\01、测试文档\01【正点原子】ATK-DLRK3568_Buildroot系统快速体验手册第3.10小节。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务的war包已经丢在tomcat中但是还是没法访问,如何排查?

问题出现的现象是我已经将 XWiki 的 WAR 包放置在 Tomcat 的 webapps目录下但仍然无法访问&#xff0c;反思之后可以从下面以下几个方面来诊断和解决问题&#xff1a; 1. 确认 Tomcat 正在运行 首先&#xff0c;确保 Tomcat 服务正在正常运行。可以使用以下命令检查 Tomcat 的…

嵌入式科普(16)c语言函数参数的传递方式

目录 一、概述 二、C函数参数 2.1 一张图讲清 2.2 按数据类型分类&#xff1a; 2.2.1 基本数据类型参数&#xff1a; 2.2.2 数组参数&#xff1a; 2.2.3 结构体参数&#xff1a; 2.2.4 指针参数&#xff1a; 2.2.5 函数指针参数&#xff1a; 2.3 按传递方式分类&…

nestjs封装一个响应体

封装一个DTO // response.dto.tsimport {CallHandler,ExecutionContext,Injectable,NestInterceptor, } from "nestjs/common"; import { FastifyReply } from "fastify"; import { Observable } from "rxjs"; import { map } from "rxjs/…

电力系统潮流计算的计算机算法(一)——网络方程、功率方程和节点分类

本篇为本科课程《电力系统稳态分析》的笔记。 本篇为这一章的第一篇笔记。下一篇传送门。 实际中的大规模电力系统包含成百上千个节点、发电机组和负荷&#xff0c;网络是复杂的&#xff0c;需要建立复杂电力系统的同一潮流数学模型&#xff0c;借助计算机进行求解。 简介 …

浅谈音频鉴黄技术

随着互联网的迅猛发展和网络智能化的普及&#xff0c;音视频内容已成为互联网传播的主流形式&#xff0c;各大视频网站、直播平台及短视频应用不断涌现&#xff0c;为亿万用户提供了丰富多样的娱乐和资讯内容。然而&#xff0c;这种繁荣背后也隐藏着不容忽视的问题&#xff1a;…

如何申请免费一年SSL证书

申请免费一年的SSL证书可以通过以下几个步骤进行&#xff0c;这里以JoySSL为例&#xff0c;因为它是目前提供此类服务的流行平台之一&#xff0c;同时也提到了宝塔面板中的TrustAsia SSL证书。请根据您的具体需求选择合适的方式&#xff1a; 申请免费一年SSL证书&#xff1a; …

MIT 6.5840(6.824) Lab1:MapReduce 设计实现

1 介绍 本次实验是实现一个简易版本的MapReduce&#xff0c;你需要实现一个工作程序&#xff08;worker process&#xff09;和一个调度程序&#xff08;coordinator process&#xff09;。工作程序用来调用Map和Reduce函数&#xff0c;并处理文件的读取和写入。调度程序用来协…

游戏数值策划关卡策划文案策划系统策划及游戏运营干货

1.《游戏新手村》免费电子书 我2007年开始做网络游戏&#xff0c;后面又做过网页游戏和手机游戏。当时市面上关于游戏策划和运营的书籍屈指可数&#xff0c;于是我就想着要不我写一本吧&#xff0c;然后2014年10月开始撰写。关于本书的更多信息可查看这篇文章>> 游戏新手…

论Java和C++方向选择

目录 1.难度2.就业压力3.岗位选择4.薪资待遇5.选择建议小结 1.难度 Java &#xff0c;C&#xff0c; 测开&#xff0c;整体来说三个方向难度相当。 1.仅从语法角度来看&#xff0c;c 是掌控一切&#xff0c;知识都要懂一点&#xff0c;而java的特点在于省心&#xff0c;都封装…

Google如何做医疗大模型(Med-Gemini)

1. 前言 开发垂直领域模型的方法有好几种&#xff0c;其中医疗、法律等专业是比较能体现模型垂直行业能力的&#xff0c;因此也深受各大厂商的重视。 五一小长假的第一天&#xff0c;Google在Arxiv上发布了《Capabilities of Gemini Models in Medicine 》 ( https://arxiv.o…

大模型LLM 结合联网搜索增强isou

参考&#xff1a; https://github.com/yokingma/search_with_ai 在线使用网址&#xff1a; https://isou.chat/ 安装github下载&#xff0c;运行docker compose 如果一直报下面错误&#xff1a; 解决方法https://github.com/yokingma/search_with_ai/pull/7 默认打开&a…

nginx 发布静态资源

一. nginx 发布静态资源 在nginx中nginx.conf配置文件中添加内容如下&#xff1a; server {listen 90;server_name localhost;# 配置静态资源文件&#xff0c;就可以访问了location / {root /home/fooie-shop;index index.html;}# 配置音频和图片资源location /imoo…

NSSCTF | [SWPUCTF 2021 新生赛]babyrce

打开题目&#xff0c;显示了一个php脚本 我们来分析一下这个脚本是什么意思 <?php error_reporting(0); header("Content-Type:text/html;charsetutf-8"); highlight_file(__FILE__); if($_COOKIE[admin]1) {include "../next.php"; } elseecho &quo…

Java——多线程

一.多线程 1.什么是多线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程的实际运作单位 简单理解多线程就是应用软件中相互独立&#xff0c;可以同时运行的功能(也可以理解为人体内相互独立&#xff0c;但可以同时运行的器官⌓‿⌓) 我们…

排序-冒泡排序(bubble sort)

冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它重复地遍历待排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成…

[牛客网]——C语言刷题day2

答案&#xff1a;B 解析&#xff1a; char *p[10] 是指针数组,数组里存放了10个指针,在64位系统下指针占8个字节,所以sizeof(p) 10 * 8 80. char (*p1)[10]是数组指针,p1是一个指向存放10个char类型的数组的指针,所以sizeof(p1) 8. 答案&#xff1a;B 解析&#xff1a…

0513student的Maven项目

0513student的Maven项目包-CSDN博客 数据库字段 主页需求 点击休学按钮&#xff0c; 实现对 ‘’是否休学‘’ ‘’休学操作‘’ 的相应修改&#xff1b; 还有对数据库中相应学生休学状态修改。

11 | 如何实现高性能的异步网络传输?

理想的异步网络框架应该是什么样的? 这就是同步网络 IO 的模型。同步网络 IO 模型在处理少量连接的时候,是没有问题的。但是如果要同时处理非常多的连接,同步的网络 IO 模型就有点儿力不从心了。 因为,每个连接都需要阻塞一个线程来等待数据,大量的连接数就会需要相同数量…

vue3+TS或JS, 实现粒子特效 @tsparticles/vue3

在跟着B站视频BV11s4y1a71T学习时&#xff0c;使用到了粒子效果&#xff0c;但是以下这种情况只适用于项目是基于typescript的写法&#xff0c;否则无法实现。 粒子效果 VUE3TStsparticles/vue31、安装2、main.ts 引入3、App.vue4、效果 VUE3JS非最新版1、安装低版本的vue3-pa…

基于Java+SpringBoot+Vue前后端分离幼儿园管理系统设计与实现(有视频讲解)

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…