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

一、前言

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

几个方式分别是:

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

[debian/ubuntu/麒麟系统联网配置(安装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

内容:

bash 复制代码
#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脚本内容

bash 复制代码
#!/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; do
        case "$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 ;;
        esac
    done
}

if [ $# != 6 ]
then
    usage;
    exit 1;
fi

parse_args $@

#自动创建保存wpa_supplicant.conf文件
if [ -e /etc/wpa_supplicant.conf ]
then
	echo "kkkkkkkbq note:remove /etc/wpa_supplicant.conf! and creat later."
    rm /etc/wpa_supplicant.conf
fi
    echo \#PSK/TKIP >> /etc/wpa_supplicant.conf
        echo ctrl_interface=/var/run/wpa_supplicant >>/etc/wpa_supplicant.conf
        echo network={ >>/etc/wpa_supplicant.conf
    echo ssid=\"$ssid\" >>/etc/wpa_supplicant.conf
        echo scan_ssid=1 >>/etc/wpa_supplicant.conf
    if [ $pasw == NONE ]
        then
                echo key_mgmt=NONE >>/etc/wpa_supplicant.conf
        else
                echo psk=\"$pasw\" >>/etc/wpa_supplicant.conf
                echo key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE >>/etc/wpa_supplicant.conf
                echo group=CCMP TKIP WEP104 WEP40 >>/etc/wpa_supplicant.conf
        fi
    echo } >>/etc/wpa_supplicant.conf

ifconfig -a|grep wlan0 |grep -v grep > /dev/null
if [ $? -eq 0 ]
then
		echo "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 ]
then
		echo "kkkkkkkbq note:rmmod 8723bu!"
        rmmod 8723bu
fi
#加载8723驱动
if [ $wifi == 8723bu ]
then
		echo "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 ]
then
		echo "kkkkkkkbq note:remove /var/run/wpa_supplicant!and creat later."
        kill -9 $(pidof wpa_supplicant) > /dev/null
        rm /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复制出来,文字格式和图片清晰度有些不匹配,暂时不追求极致,要啥自行车呀,能记录自己的心得,能分享帮助到大家就行呗。

相关推荐
Yawesh_best14 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
Ccjf酷儿16 小时前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y17 小时前
python笔记梳理以及一些题目整理
开发语言·笔记·python
在逃热干面17 小时前
(笔记)自定义 systemd 服务
笔记
DKPT18 小时前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
QT 小鲜肉20 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇
笔记·读书·孙子兵法
星轨初途21 小时前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
QT 小鲜肉21 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇深度解析与现代应用
笔记·读书·孙子兵法
love530love1 天前
【笔记】ComfUI RIFEInterpolation 节点缺失问题(cupy CUDA 安装)解决方案
人工智能·windows·笔记·python·插件·comfyui
愚戏师1 天前
MySQL 数据导出
数据库·笔记·mysql