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/下有相应驱动文件,所以没有复制。
复制之前记得更新原来的文件,也无所谓,不行重新刷系统固件呗。