firefly rk3328-cc+AP6181开发板,刷Ubuntu后,wifi没有了,怎么搞定?

firefly rk3328-cc+AP6181开发板,刷Ubuntu固件后,wifi没有了,怎么搞定?
硬着头皮边学边尝试边记录......

重点关注【】开头的内容。
每两个
###############

###############
之间的内容是官网复制过来的或别处引用的。

【】想直接更新设备树的,看文件的末尾部分===========开始的地方。
【】想学习怎么生成的,继续往下看。

【】安装依赖包,有部分安装失败:有名字不正确的,修正一下就好;有几个也没安装成功;继续下一步吧,编译过程有问题再说。

###############
这里使用Ubuntu18.04进行测试(推荐使用Ubuntu16.04及其以上版本):
sudo apt-get update

sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler
gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools
linaro-image-tools gcc-arm-linux-gnueabihf libssl-dev liblz4-tool genext2fs lib32stdc++6
gcc-aarch64-linux-gnu g+conf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make
binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget
libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client
subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo fakeroot
libparse-yapp-perl default-jre patchutils

注意: Ubuntu17.04 或者更高的系统还需要如下依赖包:
sudo apt-get install lib32gcc-7-dev g++-7 libstdc++-7-dev
###############

【】下载 Firefly_Linux_SDK 分卷压缩包,MD5看个人情况验证吧,得需要一些时间;

【】解压 Firefly_Linux_SDK 分卷压缩包,用sudo或777提升权限。
cat *firefly_split* | tar -xzv

【】进目录
cd rk3328_linux_release_v2.5.1_20210301/
ls -al

打印如下信息:
total 4
drwxr-xr-x 1 owen owen 4096 Jul 29  2021 .
drwxrwxrwx 1 owen owen 4096 Jan 10 23:11 ..
drwxr-xr-x 1 owen owen 4096 Jul 29  2021 .repo
-rw-r--r-- 1 owen owen 3257 Jan  7 17:41 011-fix-sigstksz.patch
lrwxrwxrwx 1 owen owen   24 Jan  6 21:49 Makefile -> buildroot/build/Makefile
drwxrwxrwx 1 owen owen 4096 Jan  6 21:48 app
lrwxrwxrwx 1 owen owen   31 Jan  6 21:51 build.sh -> device/rockchip/common/build.sh
drwxrwxrwx 1 owen owen 4096 Jan  7 15:23 buildroot
drwxrwxrwx 1 owen owen 4096 Jan  6 21:51 debian
drwxrwxrwx 1 owen owen 4096 Jan  6 21:51 device
drwxrwxrwx 1 owen owen 4096 Jan  6 21:51 distro
drwxrwxrwx 1 owen owen 4096 Jan  6 21:51 docs
lrwxrwxrwx 1 owen owen   27 Jan  6 21:49 envsetup.sh -> buildroot/build/envsetup.sh
drwxrwxrwx 1 owen owen 4096 Jan  6 21:55 external
drwxrwxrwx 1 owen owen 4096 Jan 21 01:05 kernel
lrwxrwxrwx 1 owen owen   36 Jan  6 21:51 mkfirmware.sh -> device/rockchip/common/mkfirmware.sh
drwxrwxrwx 1 owen owen 4096 Jan  6 22:02 prebuilts
drwxrwxrwx 1 owen owen 4096 Jan  7 14:15 rkbin
lrwxrwxrwx 1 owen owen   33 Jan  6 21:51 rkflash.sh -> device/rockchip/common/rkflash.sh
drwxr-xr-x 1 owen owen 4096 Jan  7 15:15 rockdev
drwxrwxrwx 1 owen owen 4096 Jan  6 22:03 tools
drwxrwxrwx 1 owen owen 4096 Jan  7 14:15 u-boot
drwxrwxrwx 1 owen owen 4096 Jan  6 22:04 yocto

【】下边这三行,注意中间那行,不要运行。它是更新Firefly_Linux_SDK的,编译各种报错。
我们的目的是搞定wifi模块的设备树和驱动。
.repo/repo/repo sync -l
.repo/repo/repo sync -c --no-tags
.repo/repo/repo start firefly --all

【】运行
.repo/repo/repo sync -l
【】出现
Syncing work tree: 100% (79/79), done.

【】运行
.repo/repo/repo start firefly --all

Linux_SDK 目录介绍
├── linux_sdk
│   ├── app
│   ├── buildroot buildroot                                      根文件系统的编译目录
│   ├── build.sh -> device/rockchip/common/build.sh              全自动编译脚本
│   ├── device                                                   编译相关配置文件
│   ├── distro debian                                            根文件系统生成目录
│   ├── docs                                                     文档
│   ├── envsetup.sh -> buildroot/build/envsetup.sh
│   ├── external
│   ├── kernel                                                   内核
│   ├── Makefile -> buildroot/build/Makefile
│   ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh    rockdev链接更新脚本
│   ├── prebuilts
│   ├── rkbin
│   ├── rkflash.sh -> device/rockchip/common/rkflash.sh          烧写脚本
│   ├── rootfs                                                   debian根文件系统编译目录
│   ├── tools                                                    烧写、打包工具
│   └── u-boot

编译 SDK

编译前配置
【】配置文件 firefly-rk3328-ubuntu.mk:

./build.sh firefly-rk3328-ubuntu.mk

【】文件路径在 `device/rockchip/rk3328/firefly-rk3328-ubuntu.mk`
记得看这个文件(defconfig目录.txt)。

###############
官网说的:
如果配置文件生效会连接到 device/rockchip/.BoardConfig.mk ,检查该文件可以验证是否配置成功
###############

【】但这个文件目前是空的,0kb。不管它,继续。
【】但要在firefly-rk3328-ubuntu.mk文件中注意这三个内容,后面用到:
export RK_KERNEL_DEFCONFIG
export RK_KERNEL_DTS
export RK_PARAMETER

firefly-rk3328-ubuntu.mk文件内容:

CMD=`realpath $BASH_SOURCE`
CUR_DIR=`dirname $CMD`

source $CUR_DIR/BoardConfig.mk

# Uboot defconfig
export RK_UBOOT_DEFCONFIG=firefly-rk3328
# Kernel defconfig
export RK_KERNEL_DEFCONFIG=firefly-rk3328_defconfig
# Kernel dts
export RK_KERNEL_DTS=rk3328-roc-cc
# parameter for GPT table
export RK_PARAMETER=parameter-ubuntu.txt
# packagefile for make update image 
export RK_PACKAGE_FILE=rk3328-ubuntu-package-file

# Set rootfs type, including ext2 ext4 squashfs
export RK_ROOTFS_TYPE=ext4
# rootfs image path
export RK_ROOTFS_IMG=ubuntu_rootfs/rk3328_ubuntu_rootfs.img
# recovery ramdisk
export RK_RECOVERY_RAMDISK=recovery-arm64.cpio.gz
# Set userdata partition type
export RK_USERDATA_FS_TYPE=ext4

# Buildroot config
export RK_CFG_BUILDROOT=
# Recovery config
export RK_CFG_RECOVERY=
#OEM config
export RK_OEM_DIR=
#userdata config
export RK_USERDATA_DIR=
# rootfs_system
export RK_ROOTFS_SYSTEM=ubuntu

###############
官网说的(我们不需要,不用操作):
注意,十分重要!!

默认配置编译 Buildroot 固件,如果想编译其他固件(如 Ubuntu 固件)请执行一下操作:

前往下载页面 下载对应的Ubuntu 根文件系统镜像

把得到的镜像放到 SDK 的指定目录:

#解压
tar -xvf rk3328_ubuntu18.04_LXDE.img.tgz

#sdk根目录下
mkdir ubunturootfs
mv rk3328_ubuntu18.04_LXDE.img ubunturootfs/

#修改firefly-rk3328-ubuntu.mk文件
vim device/rockchip/RK3328/firefly-rk3328-ubuntu.mk

#把RK_ROOTFS_IMG属性改成ubuntu文件系统镜像得路径(也就是rk3328_ubuntu18.04_LXDE.img)
RK_ROOTFS_IMG=ubunturootfs/rk3328_ubuntu18.04_LXDE.img
注意: Ubuntu 根文件系统镜像存放路径不能错。
###############
【】我们不需要编译整个系统镜像,所以这一步跳过。

###############
全自动编译(我们不需要,不要运行./build.sh)
在配置和搭建环境的工作都做好的前提下:

./build.sh
###############

【】我们只需要部分编译即可,而且只要编译kernel即可:

###############
下边这个是官网给出的,其它的到官网参考。
kernel
./build.sh kernel

u-boot
./build.sh uboot

recovery
recovery分区可省略,若有需要,编译recovery:

./build.sh recovery

后面还有固件打包什么的内容,我们不需要,跳过。
###############
【】运行一下kernel,看看是否顺利通过。
./build.sh kernel

打印内容:
processing option: kernel
============Start building kernel============
TARGET_ARCH          =arm64
TARGET_KERNEL_CONFIG =firefly-rk3328_defconfig
TARGET_KERNEL_DTS    =rk3328-roc-cc
TARGET_KERNEL_CONFIG_FRAGMENT =
==========================================
【】提示配置文件和设备树文件。记得看“defconfig目录.txt”和“dts目录.txt”两个文件。

.......
Running build_kernel succeeded.
【】编译成功,代表条件已满足。
过程好像有一些问题,网上找找既能解决。

【】接下来了解一下分区介绍,看看boot分区介绍,设备树在这里:

###############
uboot 分区: 烧写 uboot 编译出来的 uboot.img。
trust 分区: 烧写 uboot 编译出来的 trust.img。
misc 分区: 烧写 misc.img。开机检测进入 recovery 模式。(可省略)
boot 分区: 烧写 kernel 编译出来的 boot.img 包含 kernel 和设备树信息。
recovery 分区: 烧写 recovery.img。(可省略)
backup 分区: 预留,暂时没有用。后续跟 android 一样作为 recovery 的 backup 使用。(可省略)
oem 分区: 给厂家使用,存放厂家的 app 或数据。只读。代替原来音箱的 data 分区。挂载在/oem 目录。(可省略)
rootfs 分区: 存放 buildroot 或者 debian 编出来的 rootfs.img,只读.
userdata 分 区 : 存放 app 临时生成的文件或者是给最终用户使用。可读写,挂载在 /userdata 目录下。(可省略)
###############

【】还记得上面要记的内容吧,分区文件哦,用来烧写boot分区用的。
# parameter for GPT table
export RK_PARAMETER=parameter-ubuntu.txt
【】这个parameter-ubuntu.txt文件里0x00010000@0x0000a000(boot),表示boot分区从0x0000a000开始的,大小为0x00010000:
【】文件在device/rockchip/rk3328在这个目录下。

【】接下来要干正事了:
【】修改设备树。
记得备份原先的设备树文件。
至于修改哪些内容自己对比我提供的文件吧。
把目录下的dts和dtsi结尾的三个文件复制过去,替换
(存放的目录)
k3328_linux_release_v2.5.1_20210301kernelarcharm64ootdts
ockchip
这个目录下的文件。

【】驱动文件。
把目录下rfkill-wlan.c复制到下面目录替换
(存放的目录)
k3328_linux_release_v2.5.1_20210301kernel
et
fkill

###############
参考连接如下:
https://blog.csdn.net/Reasonss/article/details/135069733

https://blog.csdn.net/weixin_44710103/article/details/130614423?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-130614423-blog-127049775.235%5Ev39%5Epc_relevant_anti_t3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-130614423-blog-127049775.235%5Ev39%5Epc_relevant_anti_t3&utm_relevant_index=5
###############

【】修改kernel配置。
记得备份原先的firefly-rk3328_defconfig。
把目录下的
defconfig
重命名替换
(存放的目录)
k3328_linux_release_v2.5.1_20210301kernelarcharm64configs
目录下的
firefly-rk3328_defconfig

###############
上面的链接的操作,如果自己需要改配置的话:
cd kernel

make ARCH=arm64 menuconfig
菜单中按照上面的链接内容进行配置。
选择:Device Drivers —> Network device support —> Wireless LAN —> Rockchip Wireless LAN support

make savedefconfig

【】这里kernel目录下生成defconfig文件,就是上一步需要替换的文件。
###############

【】替换完成后需要生成boot.img文件。
cd ..
 ./build.sh kernel

kernel目录下生成四个img文件,其中boot.img文件是我们要更新的kernel文件,包含设备树信息。

===============================
想直接更新设备树的从这里开始。
===============================

【】更新kernel文件。
运行AndroidTool_Release_V2.58,软件的下载镜像页只留boot前面的√,看看地址是否与你的系统的地址一样。
点路径那里,选择上一步生成的boot.img,点击执行即可。

【】设备重启应该看到wlan0了。
【】设置wifi。
 cd /etc/NetworkManager/

 cat NetworkManager.conf
查看内容不是下面的话,照着改,重点是那个true。

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=true

[device]
wifi.scan-rand-mac-address=no

保存后,进入目录
cd /etc/NetworkManager/system-connections
ls
弄看到我家里的路由器,好像是我进HDMI图形界面里点wifi图标连接过,好像没连上,又回到命令行尝试。
Xiaomi_E365

查看内容
cat Xiaomi_E365

内容如下,uuid和mac地址不一样以为,其它看着改,ssid和psk是路由器和密码。
[connection]
id=Xiaomi_E365
uuid=c6454092-52c2-4519-b293-40dc08f7a5df
type=wifi
permissions=user:firefly:;

[wifi]
mac-address=6C:21:A2:FC:11:FD
mac-address-blacklist=
mode=infrastructure
ssid=Xiaomi_E365

[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk=ylh810211

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

保存,reboot。

ifconfig

看到ip地址了,
进入HDMI界面也没问题,自动连接wifi。
搞定~_~

出现的问题:
 wl_cfg80211_check_in4way: WPA failed at 13

启动后,有时出现这样的打印内容。
搜了一下,说是wifi天线没接,那就接上,然后就正常了。

~~~~~~~~~~~~~~~~~~~
以下是尝试的另外一直办法,没成功。
【】根据上面链接里的我操作了一遍,第一次可以连上网,但后面就没成功过。
贴出来参考一下。
【】搜索wifi ssid
wpa_cli -i wlan0 scan_result
【】生成配置文件
cd /etc/

wpa_passphrase wifi_ssid wifi_pw > /etc/wpa_supplicant.conf

killall wpa_supplicant

wpa_supplicant -B -Dwext -iwlan0 -c ./etc/wpa_supplicant.conf

打印信息:
Successfully initialized wpa_supplicant
ioctl[SIOCSIWMODE]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument

udhcpc -i wlan0

打印信息:
udhcpc: started, v1.27.2
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 192.168.31.216
udhcpc: sending select for 192.168.31.216
udhcpc: lease of 192.168.31.216 obtained, lease time 43200

ifconfig
看到有IP地址了。
ping 一下网址,搞定。

【】到这一步至少可以联网了,但是重启后再也没连上过。
~~~~~~~~~~~~~~~~~~~

【】关于wifi驱动,网上教程说要复制到xxx文件夹。
但是我看/vender/etc/firmware/下有相应驱动文件,所以没有复制。
复制之前记得更新原来的文件,也无所谓,不行重新刷系统固件呗。