RK3588使用笔记:系统联网配置

server/2025/4/2 7:28:26/

一、前言

话不多说,这里会介绍不同系统多种上网方式,有的是通过USB WIFI模块连接wifi信号进行网络通信,有的是通过调试电脑的网络共享,为什么要联网呢,就是为了在线更新驱动,因为离线安装会有很多依赖的问题,一环套一环,很难实现驱动的安装,尤其是复杂需求的工作环境,如用到python,或者复杂一些的系统工具等等

几个方式分别是:

纯linux系统联网配置(安装USB WIFI模块驱动)

debian/ubuntu/麒麟系统联网配置(安装USB WIFI模块驱动)

debian/ubuntu/麒麟系统联网配置(网络共享方式)


二、环境

RK3588(linux5.10.66+debian/ubuntu/麒麟是桌面文件系统)

调试笔记本window10,安装常用工具winscp,xshell,finalshell,secureRTP等等

VMware17+Ubuntu20.04源码开发环境(这里就依赖于各个硬件平台的厂家提供资料了)

三、正文

很多系统中源码并没有开放相关驱动,说白了就是需要手动去打开驱动,根据自己的设备去编译出来目标机器能够识别的驱动文件,然后通过手动加载或者自动加载的方式加载驱动,在调用驱动使用就可以了

纯linux系统联网配置(安装USB WIFI模块驱动)

我使用的是一款RTL8723BU无线WIFI模块,配置其连接wifi信号就可以让系统上网了,首先说明一下模块的驱动匹配并不是有源码就可以,还要看系统版本与源码的匹配性,这点确实不太好评估,大概率就是尝试调试,然后发现问题,查找问题,排查解决问题,最后调试使用,过程很麻烦,我一开始使用系统源码包中自带的一个驱动,一直报错,后来在网上下载了一个新版本的驱动文件,就成功编译过最终实现了。具体方式如下:

以我是用的RTL8723BU模块为例,其他模块都可以参考相识

在网上下载一个新的驱动文件,解压替换原来的rtl8723bu文件夹,需要修改一下里面的Kconfig文件,linux版本问题不识别---help---,需要把“-”去掉

之后就是在文件外边主目录下配置makefile编译了,如下

对应驱动文件的makefile文件如下图,linux大部分都是有现成源码的,只需要添加配置编译即可,如果没有就下载源码,在一步一步添加编译路径

修改makefile文件

修改Kconfig文件,添加source "drivers/net/wireless/rockchip_wlan/rtl8723bu/Kconfig"

之后在进入到rtl8723bu文件夹中

没有编译的文件内容如下

必要时再去配置一下.config文件,也是和系统开发方式有关

执行make menuconfig ARCH=arm64弹出配置界面

进入到wireless LAN目录下

配置信息如下

保存配置,之后gedit .config 查看配置文件就会有8723BU的配置

之后将.config文件复制替换系统配置

cp .config /root/workspace/aRackChip/RK3588J/OK3588_Linux_fs/kernel/arch/arm64/configs/OK3588-Linux_defconfig

这样配置就完事了

执行编译sudo ./build.sh kernel(这个是系统单独编译内核,具体执行编译系统内核的方式参考不同厂家设备提供的开源资料,应该是大差不差的,到了linux系统层都是那些东西,无非就是操作有些区别)

等待编译完毕之后查看文件夹rtl8723bu内容

有了我们期待的ko文件

网上说速度慢,要改rtl8723bu文件内的makefile文件配置,我改了如下图(这里不改也行)

之后将ko文件拷贝到开发板中运行,加载insmod /root/workspace/8723bu.ko

查看节点,可以用ifconfig -a命令,或者iwlist scan

开启节点ifconfig wlan0 up

然后可以用iwlist wlan0 scan查看一下周围的网络,会依次展示周围的网络信息

下面这个是我开启的热点网络,热点要在2.4G频段

配置wifi信息vi /etc/wpa_supplicant.conf

内容:

#PSK/TKIP
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="datongshui"
scan_ssid=1
psk="xxx密码"
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
group=CCMP TKIP WEP104 WEP40
}

配置说明链接

wpa_supplicant 的配置说明文件 wpa_supplicant.conf 译文_ssid1=cmcc-rxqe&wifipwd=246yadga&username=admin&us-CSDN博客

*必须创建连接节点*

创建一个socket文件用于通信mkdir -p /var/run/wpa_supplicant

链接wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan0

 配置动态IP方式udhcpc -i wlan0

查看连接状态wpa_cli -iwlan0 status

最终测试ping网络ping www.baidu.com

最后总结了一下,将上述步骤可以用A40i脚本的方式,打包到了wifi.sh脚本中,调用时执行下面语句即可联网了(可以自动关闭已开启的节点和驱动,并重新开启加载)

bash /root/workspace/wifi.sh -i 8723bu -s datongshui -p xxx密码

wifi.sh脚本内容

#!/bin/bash
function usage()
{echo "Usage: -i <wifi> -s <ssid> -p <password>"echo "eg: ./wifi.sh -i 8189 -s bjforlinx -p 12345678 "echo "eg: ./wifi.sh -i 8723du/bu -s bjforlinx -p NONE "echo " -i : 8189 or 8723bu/du"echo " -s : wifi ssid"echo " -p : wifi password or NONE"
}
#传入参数赋值
function parse_args()
{while true; docase "$1" in-i ) wifi=$2;echo wifi $wifi;shift 2 ;;-s ) ssid=$2;echo ssid $ssid;shift 2 ;;-p ) pasw=$2;echo pasw $pasw;shift 2 ;;-h ) usage; exit 1 ;;* ) break ;;esacdone
}if [ $# != 6 ]
thenusage;exit 1;
fiparse_args $@#自动创建保存wpa_supplicant.conf文件
if [ -e /etc/wpa_supplicant.conf ]
thenecho "kkkkkkkbq note:remove /etc/wpa_supplicant.conf! and creat later."rm /etc/wpa_supplicant.conf
fiecho \#PSK/TKIP >> /etc/wpa_supplicant.confecho ctrl_interface=/var/run/wpa_supplicant >>/etc/wpa_supplicant.confecho network={ >>/etc/wpa_supplicant.confecho ssid=\"$ssid\" >>/etc/wpa_supplicant.confecho scan_ssid=1 >>/etc/wpa_supplicant.confif [ $pasw == NONE ]thenecho key_mgmt=NONE >>/etc/wpa_supplicant.confelseecho psk=\"$pasw\" >>/etc/wpa_supplicant.confecho key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE >>/etc/wpa_supplicant.confecho group=CCMP TKIP WEP104 WEP40 >>/etc/wpa_supplicant.conffiecho } >>/etc/wpa_supplicant.confifconfig -a|grep wlan0 |grep -v grep > /dev/null
if [ $? -eq 0 ]
thenecho "kkkkkkkbq note:down wlan0!"ifconfig wlan0 down > /dev/null
fi#a40i网口0和无线不能一起用,3588这里注释掉
#ifconfig -a|grep eth0 |grep -v grep > /dev/null
#if [ $? -eq 0 ]
#then
#        ifconfig eth0 down > /dev/null
#fi#判断8723驱动开启,关闭驱动
lsmod|grep 8723bu |grep -v grep > /dev/null
if [ $? -eq 0 ]
thenecho "kkkkkkkbq note:rmmod 8723bu!"rmmod 8723bu
fi
#加载8723驱动
if [ $wifi == 8723bu ]
thenecho "kkkkkkkbq note:insmod 8723bu!"insmod /root/workspace/8723bu.ko > /dev/null
#elif [ $wifi == 8723du ]
#then
#        insmod /lib/modules/$(uname -r)/8723du.ko > /dev/null
#elif [ $wifi == 8189 ]
#then
#        insmod /lib/modules/$(uname -r)/8189es.ko > /dev/null
fi#上面步骤是加载驱动,之后下面就是配置WiFi了
#步骤一:挂载wlan0
sleep 3
echo "kkkkkkkbq note:up wlan0!"
ifconfig wlan0 up
sleep 1
#步骤二:查看网络(省略,手动查看)
#iwlist wlan0 scan
#步骤三:创建连接点
#判断存在的话,先删除
ps -fe|grep wpa_supplicant |grep -v grep > /dev/null
if [ $? -eq 0 ]
thenecho "kkkkkkkbq note:remove /var/run/wpa_supplicant!and creat later."kill -9 $(pidof wpa_supplicant) > /dev/nullrm /var/run/wpa_supplicant -r
fi
sleep 1
#创建文件夹
mkdir -p /var/run/wpa_supplicant
sleep 1
#创建软连接
echo "kkkkkkkbq note:ruanjianjie wlan0!"
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan0
#步骤四:配置动态IP
sleep 3
#dhclient wlan0
echo "kkkkkkkbq note:udhcpc wlan0!"
udhcpc -i wlan0
sleep 1
#查看连接状态
echo "kkkkkkkbq note:status wlan0!"
wpa_cli -iwlan0 status
echo "Finshed!"

这里说明一下纯linux系统的硬伤,要是使用网络模块作为无线网络通信,获取网络数据通信应该是可以的,但是如果用此模块去联网,问题就出现了,因为纯linux系统下一般系统资源比较少,缺少很多基础的功能包,没有apt命令等,无法使用在线更新安装包命令,这里也是看实际的设备情况和自己的需求场合去适配使用。

debian/ubuntu/麒麟系统联网配置(安装USB WIFI模块驱动)

在5.10.66环境下,配置wifi模块基本与上述方式一致,这里就介绍一下更新到5.10.209系统后的差异,相信很多小伙伴在使用新系统会遇到此问题

编译系统内核源码时,会遇到如下错误信息

是因为在 Linux 内核中,filp_open 是一个用于打开文件的函数,通常用于内核模块中访问文件系统。它的定义和导出规则可能会随着内核版本的变化而发生变化。以下是 Linux 5.10.66 和 Linux 5.10.209 之间可能存在的差异,以及 filp_open 的变化分析

在5.10.66 的中导出了

在5.10.209中就没有了

在 Linux 5.10.209 中,filp_open 的导出方式发生了变化,使用了 EXPORT_SYMBOL_NS 宏,并且指定了命名空间 ANDROID_GKI_VFS_EXPORT_ONLY。这与 Linux 5.10.66 中的 EXPORT_SYMBOL(filp_open) 不同,导致 8723bu 驱动模块无法使用 filp_open

修改方法1:(推荐)

修改内核中源码文件 fs/open.c

//EXPORT_SYMBOL_NS(filp_open, ANDROID_GKI_VFS_EXPORT_ONLY);

EXPORT_SYMBOL(filp_open);

修改方法2:(初始化函数位于 os_dep/linux/os_intfs.c 文件中,未好使,可能修改的不够全)

在驱动源码的初始化文件中添加命名空间

MODULE_IMPORT_NS(ANDROID_GKI_VFS_EXPORT_ONLY);

grep filp_open /proc/kallsyms

再次执行编译sudo ./build.sh kernel

等待编译完毕之后查看文件夹rtl8723bu内容

之后编译镜像,烧录验证wifi是否自动加载

debian/ubuntu/麒麟系统联网配置(网络共享方式)

进入电脑的网络配置页面

找到WLAN,笔记本的wifi网卡,然后右键设置属性,设置要共享的网络端口

之后网络端口(以太网2会被自动设置IP为192.168.137.1)

然后把在这个网络内的其他设备IP设置成同网段的设备,就可以通过该网口转发WLAN的无线网络功能了,也就可以上网更新依赖包和库了

在ubuntu/银河麒麟下默认建立的IP为192.168.1.101,比如改这个IP,用如下方法

查看网络:nmcli c

(如有需要)修改IP:nmcli c modify net2 ipv4.addr '192.168.137.101/24'

(如有需要)重新配置:nmcli c up net2

(如有需要)重新配置:nmcli d reapply eth1

(如有需要)重新配置:nmcli d connect eth1

最后在系统上查看网络是否可用即可

有的时候笔记本电脑重启后网络会不好使,开机后第一次不好使,尝试下面方式

还是进到网络配置界面,把WLAN的网络共享关闭,保存,在重新配置共享, 保存,就可以了

四、结语

在条件允许的情况下,板载USB WIFI或者其他方式wifi模块最好,如PCIE专wifi等等,条件差些就在更新系统时外挂usb wifi模块,条件在差些就用网络共享,在嵌入式设备中,基本没有不用网络的吧,哈哈

PS:想到啥说啥,这里说明一下写文章的时候发现很多文字行间距变大不协调,还有图片不清晰,是因为内容是我平时积累在word中,平时很忙,基本没有空时常来维护更新,偶尔会闲下来抽出大块时间统一整理查看一下博客,顺便更新几个可以公开分享的文章,内容和图片都是从word复制出来,文字格式和图片清晰度有些不匹配,暂时不追求极致,要啥自行车呀,能记录自己的心得,能分享帮助到大家就行呗。


http://www.ppmy.cn/server/180648.html

相关文章

Python Cookbook-4.15 字典的一键多值

任务 需要一个字典&#xff0c;能够将每个键映射到多个值上。 解决方案 正常情况下&#xff0c;字典是一对一映射的&#xff0c;但要实现一对多映射也不难&#xff0c;换句话说&#xff0c;即一个键对应多个值。你有两个可选方案&#xff0c;但具体要看你怎么看待键的多个对…

第十五章:Python的Pandas库详解及常见用法

在数据分析领域&#xff0c;Python的Pandas库是一个不可或缺的工具。它提供了高效的数据结构和数据分析工具&#xff0c;使得数据处理变得简单而直观。本文将详细介绍Pandas库的基本功能、常见用法&#xff0c;并通过示例代码演示如何使用Pandas进行数据处理。最后&#xff0c;…

QScreen 捕获屏幕(截图)

一、QScreen核心能力解析 硬件信息获取 // 获取主屏幕对象 QScreen* primaryScreen QGuiApplication::primaryScreen();// 输出屏幕参数 qDebug() << "分辨率:" << primaryScreen->size(); qDebug() << "物理尺寸:" << primar…

Linux线程池实现

1.线程池实现 全部代码&#xff1a;whb-helloworld/113 1.唤醒线程 一个是唤醒全部线程&#xff0c;一个是唤醒一个线程。 void WakeUpAllThread(){LockGuard lockguard(_mutex);if (_sleepernum)_cond.Broadcast();LOG(LogLevel::INFO) << "唤醒所有的休眠线程&q…

Azure SDK 使用指南

​Azure SDK&#xff08;软件开发工具包&#xff09;是一组由微软提供的工具和库&#xff0c;旨在帮助开发者以多种编程语言&#xff08;如 .NET、Java、Python、JavaScript 等&#xff09;与 Azure 服务进行交互。 ​通过使用 Azure SDK&#xff0c;开发者可以更高效地构建、部…

VS2022 Qt 项目使用数据库报错问题

一、问题现象&#xff1a;无法解析的外部符号 "__declspec(dllimport) public: __cdecl QSqlDatabase::QSqlDatabase(void)" 定义变量QSqlDatabase db后报错信息为“无法解析的外部符号” 二 、解决步骤&#xff1a; 1、在 Visual Studio 2022 中&#xff1a;右键项…

乐鑫ESP-IDF中查看系统内存的函数大全(1)

0. 序言 项目中难免会遇到系统崩溃、内存分配失败等情况,即使没有这些异常,也要确保程序不会发生内存泄漏。因此,在代码中加入查看当前系统中内存的机制(函数)是开发时必不可少的。 乐鑫ESP-IDF中查看系统内存的接口函数众多,笔者在开发中遇到并使用到了多个。之前一直…

基于Spring Boot的木里风景文化管理平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…