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复制出来,文字格式和图片清晰度有些不匹配,暂时不追求极致,要啥自行车呀,能记录自己的心得,能分享帮助到大家就行呗。

相关推荐
Qwertyuiop20165 小时前
搭建开源笔记平台:outline
笔记·开源
Vic·Tory7 小时前
Go语言学习笔记
笔记·学习·golang
Small踢倒coffee_氕氘氚7 小时前
Python实现3D贴图渲染:解锁数字艺术新维度
经验分享·笔记
吴梓穆7 小时前
UE5学习笔记 FPS游戏制作28 显式玩家子弹数
笔记·学习·ue4
上等猿9 小时前
Elasticsearch笔记
java·笔记·elasticsearch
东京老树根10 小时前
SAP 学习笔记 - 系统移行业务 - MALSY(由Excel 移行到SAP 的收费工具)
笔记·学习
傍晚冰川14 小时前
【STM32】最后一刷-江科大Flash闪存-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习·实时音视频
吴梓穆15 小时前
UE5学习笔记 FPS游戏制作33 游戏保存
笔记·学习·ue5
IT199515 小时前
uniapp笔记-自定义分类组件
前端·笔记·uni-app
·醉挽清风·17 小时前
学习笔记—数据结构—二叉树(链式)
c语言·数据结构·c++·笔记·学习·算法