Linux学习第54天:Linux WIFI 驱动:蓝星互联
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长
数字化、现代化的今天,随处的WIFI给与了大众极大的方便,也感受到了科技的力量。万物互联、无线互联越来越成为一个不可逆转的趋势。现在比较火的马斯克的卫星网络一旦组网成功,在地球的每个角落都能畅联,不仅信号强、速度快,将指数级别的催发科技的进一步突飞猛进,各种应用将层出不穷。如果将地球看做是一个局域网,卫星网络将类似WiFi,靠无线通信的互联深化蓝星的交流互通。
本章的思维导图如下:

一、WiFi驱动添加与编译
1、向Linux内核添加WiFi驱动
只需要将 WIFI 驱动源码添加到 Linux 内核中,然后通过图形化界面配置,选择将其编译成模块即可.
1)rtl81xx 驱动文件浏览
2)删除 linux 内核自带的 RTL8192CU 驱动
3)将 rtl81xx 驱动添加到 Linux 内核中
将 realtek 整个目录拷贝到 ubuntu 下 Linux 内核源码中的 drivers/net/wireless 目录下.
4)修改 drivers/net/wireless/Kconfig
打开 drivers/net/wireless/Kconfig,在里面加入下面这一行内容:
source "drivers/net/wireless/realtek/Kconfig"
5)drivers/net/wireless/Makefile
在里面加入下面一行内容:obj-y += realtek/
2.配置Linux内核
1)配置 USB 支持设备
路径如下:
-> Device Drivers
-> <*> USB support
-> <*> Support for Host-side USB
-> <*> EHCI HCD (USB 2.0) support
-> <*> OHCI HCD (USB 1.1) support
-> <*> ChipIdea Highspeed Dual Role Controller
-> [*] ChipIdea device controller
-> [*] ChipIdea host controller
2)配置支持 WIFI 设备
路径如下:
-> Device Drivers
-> [*] Network device support
-> [*] Wireless LAN
-> <*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
-> [*] Support downloading firmware images with Host AP driver
-> [*] Support for non-volatile firmware download
3)配置支持 IEEE 802.11
路径如下:
-> Networking support
-> -*- Wireless
-> [*] cfg80211 wireless extensions compatibility
-> <*> Generic IEEE 802.11 Networking Stack (mac80211)
重新编译一下 Linux 内核,得到新的 zImage。
3.编译WiFi驱动
执行“make menuconfig”命令,打开 Linux 内核配置界面,然后按照如下路径选择将 rtl81xx驱动编译为模块。
-> Devices Drivers
-> Network device support (NETDEVICES [=y])
-> Wireless LAN (WLAN [=y])
-> Realtek wifi (REALTEK_WIFI [=m])
-> rtl8189ftv sdio wifi
-> rtl8188eus usb wifi
-> Realtek 8192C USB WiFi
选中“rtl8189fs/ftv sdio wifi”、“rtl8188eus usb wifi” 和“Realtek 8192C USB WiFi”,将其编译为模块。执行如下命令编译模块:
make modules -j12 //编译驱动模块
编译完成以后就会在 rtl8188EUS、 rtl8189FS 和 rtl8192CU 文件夹下分别生成 8188eu.ko、8189fs.ko 和 8192cu.ko 这三个.ko 文件
8188eu.ko、 8189fs.ko 和 8192cu.ko 就是我们需要的 RTL8188EUS、RTL8189FS 和 RTL8188CUS/8192CU 的 驱 动 模 块 文 件 , 将 这 三 个 文 件 拷 贝 到rootfs/lib/modules/4.1.15 目录中,命令如下:
sudo cp 8189fs.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
sudo cp 8188eu.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
sudo cp 8192cu.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
将新编译出来的zImage镜像文件拷贝到 Ubuntu 中的 tftpboot 目录下,命令如下:
cp arch/arm/boot/zImage /home/zuozhongkai/linux/tftpboot/ -f
然后重启开发板!!!
4.驱动加载测试
1)RTL8188 USB WIFI 驱动测试
加载一下 8188eu.ko、 8189fs.ko 和 8192cu.ko 这三个驱动文件:
depmod //第一次加载驱动的时候需要运行此命令
modprobe 8188eu.ko //RTL8188EUS 模块加载 8188eu.ko 模块
modprobe 8192cu.ko //RTL8188CUS 模块加载 8192cu.ko 模块
输入“ifconfig -a”命令,查看 wlanX(X=0….n)网卡是否存在.
2)RTL8189 SDIO WIFI 驱动测试
输入命令加载 8189fs.ko 这个驱动模块:
depmod //第一次加载驱动的时候需要运行此命令
modprobe 8189eu.ko //加载驱动模块
使用“ifconfig -a”命令查看一下是否有 wlanX(X=0…n)网卡存在。
二、wireless tools工具移植与测试
1.wireless tools移植
wireless tools 是操作 WIFI 的工具集合,最常用的就是 iwlist【扫描】 和 iwconfig 【设置】这两个工具。
进入到 iwlist_for_visteon-master 文件夹里面,打开Makefile 文件,修改 Makefile 中的 CC、 AR 和 RANLIB 这三个变量。
修改完成以后就可以使用如下命令编译:
make clean //先清理一下工程
make //编译
sudo cp iwlist iwconfig iwspy iwpriv ifrename /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
sudo cp libiw.so.29 /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -f
2.wireless tools工具测试
工具:iwlist
将 RTL8188 WIFI 模块插到开发板的 USB HOST 接口上,然后加载 RTL8188
驱动模块 8188eu.ko,驱动加载成功以后在打开 wlan0 网卡,命令如下:
| modprobe 8188eu.ko ifconfig wlan0 up | //加载 RTL8188 驱动模块 //打开 wlan0 网卡 |
wlan0 网卡打开以后就可以使用 iwlist 命令查找当前环境下的 WIFI 热点信息,也就是无线
路由器,输入如下命令:
iwlist wlan0 scan
上述命令就会搜索当前环境下的所有 WIFI 热点,然后将这些热点的信息信息答应出来,
包括 MAC 地址、 ESSID(WIFI 名字)、频率、速率,信号质量等等。
三、wpa_supplicant移植
1.openss移植
要想连接到指定的 WIFI热点上就需要用到 wpa_supplicant 工具。
先移植 openssl。
解压:tar -vxzf openssl-1.1.1d.tar.gz
./Configure linux-armv4 shared no-asm --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/openssl
CROSS_COMPILE=arm-linux-gnueabihf-
配置成功以后会生成 Makefile,输入如下命令进行编译:
make
make install
将 lib 目录下的 libcrypto 和 libssl 库拷贝到开发板根文件系统中的/usr/lib 目录下,命令如下:
sudo cp libcrypto.so* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af
sudo cp libssl.so* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af
2.libnl库移植
在编译 libnl 之前先安装 biosn 和 flex:
sudo apt-get install bison
sudo apt-get install flex
移植libnl库
/configure --host=arm-linux-gnueabihf --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/
--host 用于指定交叉编译器的前缀,这里设置为“arm-linux-gnueabihf”, --prefix 用于指定编
译结果存放目录
对 libnl 库进行编译、安装:
make -j12 //编译
make install //安装
将 lib 目录下的所有文件拷贝到开发板根文件系统的/usr/lib 目录下:
sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -rf
3.wpa_supplicant移植
wpa_supplicant 的配置:
cd wpa_supplicant/
cp defconfig .config
打开.config 文件,在里面指定交叉编译器、 openssl、 libnl 库和头文件路径:
1 CC = arm-linux-gnueabihf-gcc
2 3
#openssl 库和头文件路径
4 CFLAGS += -I/home/zuozhongkai/linux/IMX6ULL/tool/openssl/include
5 LIBS += -L/home/zuozhongkai/linux/IMX6ULL/tool/openssl/lib -lssl
-lcrypto
6 7
#libnl 库和头文件路径
8 CFLAGS += -I/home/zuozhongkai/linux/IMX6ULL/tool/libnl/include/libnl3
9 LIBS += -L/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib
编译 wpa_supplicant:
export PKG_CONFIG_PATH=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib/pkgconfig:
$PKG_CONFIG_PATH //指定 libnl 库 pkgconfig 包位置
make -j12 //编译
wpa_cli 和 wpa_supplicant 这两个文件拷贝到开发板根文件系统的/usr/bin目录中:
sudo cp wpa_cli wpa_supplicant /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
输入“wpa_supplicant -v”命令查看一下 wpa_supplicant 版本号
四、WiFi联网测试
联网步骤:
①、插上 WIFI 模块,如果是板子集成的就不需要这一步。如果是 SDIO WIFI 的话确保 WIFI
所使用的 SDIO 接口没有插其他的模块,比如 SD 卡,防止其他模块对 SDIO WIFI 造成影响。
②、加载 RTL8188 或者 RTL8189 驱动模块。
③、使用 ifconfig 命令打开对应的无线网卡,比如 wlan0 或 wlan1……
④、无线网卡打开以后使用 iwlist 命令扫描一下当前环境下的 WIFI 热点,一来测试一下 WIFI 工作是否正常。二来检查一下自己要连接的 WIFI 热点能不能扫描到,扫描不到的话肯定就没法连接了。
当上述步骤确认无误以后就可以使用 wpa_supplicant 来将 WIFI 连接到指定的热点上,实现
联网功能。
1.RTL8188 USB WIFI联网测试
RTL8188EUS 请使用 8188eu.ko 驱动, RTL8188CUS 请使用 8192cu.ko 驱动!
RTL8188 USB WIFI 联网测试,确保 RTL8188 能扫描出要连接的 WIFI 热点。
在开发板根文件系统的/etc 目录下创建一个名为“wpa_supplicant.conf”的配置文件,此文件用于配置要连接的 WIFI 热点以及 WIFI 秘密。
1 ctrl_interface=/var/run/wpa_supplicant
2 ap_scan=1
3 network={
4 ssid="ZZK"
5 psk="xxxxxxxx"/*wpa_supplicant.conf 文件对于格式要求比较严格,“=”前后一定不能有空格,也不要
用 TAB 键来缩进*/
6 }
创建目录:
mkdir /var/run/wpa_supplicant -p
使用 wpa_supplicant 工具让 RTL8188 USB WIFI 连接到热点上:
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
设置 wlan0 的 IP 地址:
udhcpc -i wlan0 //从路由器获取 IP 地址
2.RTL8189 SDIO WIFI联网测试
本笔记为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,不得用于商业用途。
相关文章:
Linux学习第54天:Linux WIFI 驱动:蓝星互联
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 数字化、现代化的今天,随处的WIFI给与了大众极大的方便,也感受到了科技的力量。万物互联、无线互联越来越成为一个不可逆转的趋势。现在比较火…...
芯片后端之 PT 使用 report_timing 产生报告如何阅读
今天,就PT常用的命令,做一个介绍,希望对大家以后的工作,起到帮助作用。 在PrimeTime中,使用report_timing -delay max命令生成此报告。switch -delay max表示定时报告用于设置(这是默认值)。 首先,我们整…...
基于elastic stack搭建的ELK系统资源占用预估
1、ES 1.1 内存:ES非常消耗内存,不是JVM用到的内存,而是机器的物理内存,ES在运行期间对JVM Heap(堆内存)的需求较小 实践建议: 数据量过百万,建议单台服务器的内存至少要有16GB;数据量过亿,建议单台服务器的内存至少要有64GB 1.2 CPU:ES集…...
LiteDB - 一个单数据文件 .NET NoSQL 文档存储
LiteDB 一个小巧、快速、轻量级的 NoSQL 嵌入式数据库。 Serverless NoSQL 文档存储类似于 MongoDB 的简单 API100% C# 代码,支持 .NET 3.5 / .NET 4.0 / NETStandard 1.3 / NETStandard 2.0,单 DLL (小于 300 kb)支持线程和进程安全支持文档/操作级别的 ACID支持写失败后的数…...
视觉理解与图片问答,学习如何使用 GPT-4o (GPT-4 Omni) 来理解图像
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、引言 OpenAI 最新发布的 GPT-4 Omni 模型,也被称为 GPT-4o,是一个多模态 AI 模型,旨在提供更加自然和全面的人机交互体验。 GPT-4o 与 GPT-4 Turbo 都具备视觉功…...
【LocalAI】(13):LocalAI最新版本支持Stable diffusion 3,20亿参数图像更加细腻了,可以继续研究下
最新版本v2.17.1 https://github.com/mudler/LocalAI/releases Stable diffusion 3 You can use Stable diffusion 3 by installing the model in the gallery (stable-diffusion-3-medium) or by placing this YAML file in the model folder: Stable Diffusion 3 Medium 正…...
云计算【第一阶段(19)】磁盘管理与文件系统 LVM与磁盘配额(二)
目录 一、LVM概述 1.1、LVM机制的基本概念 编辑 1.2、LVM的管理命令 1.3、lvm存储 两种机制 1.4、lvm应用实例 二、磁盘配额概述 2.1、设置磁盘配额 2.2.1、实现磁盘限额的条件 2.2.2、linux磁盘限额的特点 2.2.3、磁盘配额管理 一、LVM概述 1.1、LVM机制的基本概…...
基于C++实现的EventLoop与事件驱动编程
一,概念介绍 事件驱动编程(Event-Driven)是一种编码范式,常被应用在图形用户界面,应用程序,服务器开发等场景。 采用事件驱动编程的代码中,通常要有事件循环,侦听事件,…...
Android高级面试_8_热修补插件化等
Android 高级面试:插件化和热修复相关 1、dex 和 class 文件结构 class 是 JVM 可以执行的文件类型,由 javac 编译生成;dex 是 DVM 执行的文件类型,由 dx 编译生成。 class 文件结构的特点: 是一种 8 位二进制字节…...
显卡GTX与RTX有什么区别?哪一个更适合玩游戏?
游戏发烧友们可能对游戏显卡并不陌生,它直接关系到游戏画面的流畅度、细腻程度和真实感。在众多显卡品牌中,英伟达的GTX和RTX系列显卡因其出色的性能而备受关注。 一、GTX与RTX的区别 架构差异 GTX系列显卡采用的是Pascal架构,这是英伟达在…...
QT自定义信号和槽函数
在QT中最重要也是必须要掌握的机制,就是信号与槽机制,在MFC上也就是类型的机制就是消息与响应函数机制 在QT中我们不仅要学会如何使用信号与槽机制,还要会自定义信号与槽函数,要自定义的原因是系统提供的信号,在一些情…...
Atcoder Beginner Contest 359
传送门 A - Count Takahashi 时间限制:2秒 内存限制:1024MB 分数:100分 问题描述 给定 N 个字符串。 第 i 个字符串 () 要么是 Takahashi 要么是 Aoki。 有多少个 i 使得 等于 Takahashi ? 限制 N 是整数。每个…...
无线通讯几种常规天线类别简介
天线对于无线模块来说至关重要,合适的天线可以优化通信网络,增加其通信的范围和可靠性。天线的选型对最后的模块通信影响很大,不合适的天线会导致通信质量下降。针对不同的市场应用,天线的材质、安置方式、性能也大不一样。下面简…...
最大团问题--回溯法
一、相关定义 给定一个无向图 ,其中 V 是图的顶点集,E图的边集 完全图:如果无向图中的任何一对顶点之间都有边,这种无向图称为完全图 完全子图:给定无向图 ,如果 ,且对应任意 且 ,则…...
MBSE之简单介绍
MBSE之简单介绍 文章目录 MBSE之简单介绍1. What is MBSE?2. MBSE 最佳实践 1. What is MBSE? Model-Based Systems Engineering (MBSE), a.k.a. Model-Based Systems Development (MBSD), is a Systems Engineering process paradigm that emphasizes t…...
基于ODPS解析字段值为JSON的情况
最近在使用ODPS数据库,其中一个字段他是用JSON存储的,但是我是需要JSON字符串中的一个属性值就行,刚好ODPS中有一个函数可以用来使用! 使用案例 select GET_JSON_OBJECT({"id":1,"name":"xiaobai"},$.name);…...
CesiumJS【Basic】- #020 加载glb/gltf文件(Primitive方式)
文章目录 加载glb/gltf文件(Primitive方式)1 目标2 代码实现3 资源文件加载glb/gltf文件(Primitive方式) 1 目标 使用Primitive方式加载glb/gltf文件 2 代码实现 import * as Cesium from "cesium";const viewer = new Cesium.Viewer...
2024黑盾杯复现赛题MISC部分
一、一个logo 一张png图片,查看颜色通道即可发现flag 二、 学会Office 最好用联想自带的excel工具查看,我用WPS打开未解出题目 这里会发现有隐藏信息 隐藏信息为宏加密 。去百度了解宏加密后,发现有俩个宏,一个加密一个解密 执…...
Linux0.12内核源码解读(5)-head.s
大家好,我是呼噜噜,好久没有更新old linux了,本文接着上一篇文章图解CPU的实模式与保护模式,继续向着操作系统内核的世界前进,一起来看看heads.s as86 与GNU as 首先我们得了解一个事实,在Linux0.12内核源…...
刷代码随想录有感(119):动态规划——打家劫舍III(树形dp)
题干: 代码: class Solution { public:vector<int>dp(TreeNode* cur){if(cur NULL)return vector<int>{0, 0};vector<int> left dp(cur -> left);vector<int> right dp(cur -> right);//偷int val1 cur -> val l…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...
Selenium 查找页面元素的方式
Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式: 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...
