【嵌入式】瑞芯微RK3566芯片移植主线linux并适配wifi蓝牙驱动

宿主机:MacBook Pro M3 Max

虚拟机:Orbstack Ubuntu 24.04 LTS ARM64版本

设备:rockchip rk3566(泰山派)

WIFI蓝牙:AP6212(泰山派板载)

uboot: rockchip官方SDK

kernel: 主线linux(torvalds/linux)

rootfs:ubuntu24.04.4 base

视频教程:B站

一、环境配置(虚拟机操作)

执行以下命令安装依赖,确保编译环境正常:

bash 复制代码
sudo apt update
sudo apt upgrade -y
sudo apt install -y git build-essential bc bison flex libssl-dev libncurses5-dev device-tree-compiler checkinstall libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev swig lz4 wget

wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
tar -xvf Python-2.7.18.tgz
cd Python-2.7.18
./configure --enable-optimizations CFLAGS=-fPIC
sudo make altinstall
cd ..
sudo rm -rf Python-2.7.18
# 建立python2软链接,解决部分工具依赖问题
sudo ln -s /usr/local/bin/python2.7 /usr/bin/python
sudo ln -s /usr/local/bin/python2.7 /usr/bin/python2

二、制作U-Boot(虚拟机操作)

bash 复制代码
cd ~
git clone https://github.com/rockchip-linux/rkbin.git
git clone https://github.com/rockchip-linux/u-boot.git
cd ~/u-boot
vim include/command.h
// 原代码
int cmd_process(int flag, int argc, char * const argv[],
// 修改后
enum command_ret_t cmd_process(int flag, int argc, char * const argv[],

vim common/edid.c
// 原代码
u8 dbl, hdmi_len, video_len = 0;
// 修改后
u8 dbl, hdmi_len = 0, video_len = 0;

./make.sh rk3566 CROSS_COMPILE=aarch64-linux-gnu-
ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make u-boot.itb -j32

三、制作Kernel(虚拟机操作)

bash 复制代码
cd ~
git clone https://github.com/Kindavid0415/Shares.git
#具体内核版本可自选
git clone https://github.com/torvalds/linux.git --depth 1 --branch v6.19 
cd ~/linux
#追加代码,支持镜像制作
printf 'MAKE_MODULES ?= y
%%.img:
ifeq ("$(CONFIG_MODULES)$(MAKE_MODULES)$(srctree)","yy$(objtree)")
\t$(Q)$(MAKE) rockchip/$*.dtb Image.lz4 modules
else
\t$(Q)$(MAKE) rockchip/$*.dtb Image.lz4
endif
\t$(Q)$(srctree)/scripts/mkimg --dtb $*.dtb
CLEAN_DIRS  += out
CLEAN_FILES += boot.img kernel.img resource.img zboot.img
' >> ~/linux/arch/arm64/Makefile
#拷贝boot.img镜像制作工具
cp ~/Shares/rockchip_kernel_support/* ~/linux/scripts/
cd ~/linux/scripts/
chmod +x mkbootimg mkimg resource_tool

cd ~/linux/
#修改设备树,MMC顺序、启动参数、波特率、蓝牙芯片型号
vim ~/linux/arch/arm64/boot/dts/rockchip/rk3566-lckfb-tspi.dts
// 原代码
        aliases {
                mmc0 = &sdmmc0;
                mmc1 = &sdhci;
                mmc2 = &sdmmc1;
        };

        chosen: chosen {
                stdout-path = "serial2:1500000n8";
        };
// 修改后
        aliases {
                mmc1 = &sdmmc0;
                mmc0 = &sdhci;
                mmc2 = &sdmmc1;
        };

        chosen: chosen {
                bootargs = "console=ttyS2,115200 root=PARTUUID=614e0000-0000 rw rootwait";
                stdout-path = "serial2:115200n8";
        }; 

// 原代码
        bluetooth: bluetooth {
                compatible = "brcm,bcm43438-bt";
                ...
        };
// 修改后
        bluetooth: bluetooth {
                compatible = "brcm,bcm4345c5";
                ...
        };   

ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make defconfig
ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make rk3566-lckfb-tspi.img -j32

四、配置Rootfs---基础配置(虚拟机操作)

bash 复制代码
cd ~
sudo wget https://cdimage.ubuntu.com/ubuntu-base/releases/24.04/release/ubuntu-base-24.04.4-base-armhf.tar.gz

sudo mkdir ubuntu2404-rootfs
sudo tar -xvpf ubuntu-base-24.04.4-base-armhf.tar.gz -C ubuntu2404-rootfs

sudo cp /etc/resolv.conf ./ubuntu2404-rootfs/etc/resolv.conf

sudo mount -o bind /dev ./ubuntu2404-rootfs/dev
sudo mount -o bind /proc ./ubuntu2404-rootfs/proc
sudo mount -o bind /sys ./ubuntu2404-rootfs/sys
sudo mount -o bind /run ./ubuntu2404-rootfs/run
sudo chroot ./ubuntu2404-rootfs /bin/bash

apt update
apt upgrade -y
apt install -y sudo udev vim wget net-tools ethtool ifupdown iputils-ping openssh-server git network-manager kmod
passwd root
exit

sudo umount -l ./ubuntu2404-rootfs/run
sudo umount -l ./ubuntu2404-rootfs/sys
sudo umount -l ./ubuntu2404-rootfs/proc
sudo umount -l ./ubuntu2404-rootfs/dev

五、配置Rootfs---驱动固件移植(虚拟机操作)

bash 复制代码
cd ~/linux
make modules -j32
sudo make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- modules_install INSTALL_MOD_PATH=~/ubuntu2404-rootfs

cd ~
sudo mkdir ~/ubuntu2404-rootfs/lib/firmware/brcm/
sudo cp ~/Shares/firmware_ap6212/* ~/ubuntu2404-rootfs/lib/firmware/brcm/
sudo cp ~/ubuntu2404-rootfs/lib/firmware/brcm/brcmfmac43430-sdio.bin ~/ubuntu2404-rootfs/lib/firmware/brcm/brcmfmac43430-sdio.lckfb,tspi-rk3566.bin

六、制作Rootfs(虚拟机操作)

bash 复制代码
sudo dd if=/dev/zero of=ubuntu2404_base.img bs=1M count=4096
sudo mkfs.ext4 -F -L rootfs ubuntu2404_base.img # 修正原命令卷标错误
mkdir -p mnt 
sudo mount -o loop ubuntu2404_base.img mnt/
sudo cp -rfp ./ubuntu2404-rootfs/* mnt/
sudo umount mnt/
rm -rf mnt/
sudo e2fsck -p -f ubuntu2404_base.img
sudo resize2fs -M ubuntu2404_base.img

七、烧录前准备(宿主机操作)

bash 复制代码
# 说明:将以下文件拷贝到同一目录(建议通过Orbstack共享文件夹传递)
cp rk356x_spl_loader_v1.23.114.bin .
cp u-boot.itb .
cp boot.img .
cp ubuntu2404_base.img .
vim parameter.txt

将以下内容写入parameter.txt(直接复制粘贴):

bash 复制代码
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3566
MACHINE_ID: 007
MANUFACTURER: KINDAVID
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00020000@0x00008000(boot),0x00c00000@0x00040000(rootfs)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

八、设备烧录(宿主机操作)

说明:Mac需提前通过brew安装rkdeveloptool(brew install rkdevelop),设备进入maskrom模式后连接Mac。

bash 复制代码
rkdeveloptool ld
# 说明:执行后确认设备已识别

rkdeveloptool db rk356x_spl_loader_v1.23.114.bin

rkdeveloptool ef

rkdeveloptool gpt parameter.txt
rkdeveloptool ppt

rkdeveloptool ul rk356x_spl_loader_v1.23.114.bin
rkdeveloptool wl 0x4000 u-boot.itb
rkdeveloptool wl 0x8000 boot.img
rkdeveloptool wl 0x40000 ubuntu2404_base.img
rkdeveloptool rd
# 说明:rd命令执行后设备重启,烧录完成

九、wifi蓝牙测试(串口操作)

bash 复制代码
ifconfig
nmcli device wifi list
nmcli device wifi connect "你的WiFi名" password "密码"

apt install -y bluez

hciconfig
hcitool scan
l2ping xx:xx:xx:xx:xx:xx
相关推荐
yashuk2 小时前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
认真的薛薛2 小时前
解决openclaw下载OMM问题
linux·编辑器·vim
知无不研2 小时前
共享内存(Shared Memory)深度全解:Linux高性能IPC的核心机制与实战
linux·运维·c++·共享内存·共享内存与互斥锁
炸膛坦客2 小时前
Linux - Ubuntu - PC端:(一)安装虚拟机和 Ubuntu(只言片语,仅供作者自己使用)
linux·ubuntu
JiMoKuangXiangQu2 小时前
Linux hrtimer 数据结构
linux·hrtimer
河码匠2 小时前
Linux sar 命令
linux·运维·网络
偷懒下载原神2 小时前
【linux操作系统】进程间通信--管道
linux·运维·服务器
异步的告白3 小时前
嵌入式Linux学习-Makefile基本语法:目标、依赖、命令、伪目标.PHONY
linux
!沧海@一粟!3 小时前
VMware升级操作指南与常见问题
linux·运维·服务器