【rk3588】环境搭建及系统编译

news2024/11/25 15:27:16

开发板:ROC-RK3588S-PC

官方链接:Welcome to ROC-RK3588S-PC Manual — Firefly Wiki (t-firefly.com)

串口调试配置

一、产品介绍 — Firefly Wiki (t-firefly.com),可以按照官方链接的说明在个人PC上使用串口。这个串口会输出rk3588的日志信息,同时也可以允许用户输入shell命令进行调试。但是还不能互相传文件。

在这里插入图片描述

我们使用串口可以查询到包括内核名称、节点名称、内核发行版本、内核版本、机器类型、处理器类型、硬件平台和操作系统。aarch64是ARMv8架构下的64位指令集架构的官方名称,有时也被人们称为ARM64。

注:作者在使用过程中碰到过串口不能输入shell命令的情况,只能查看日志信息。最终发现是USB转串口模块的问题,更换一个就好了。作者使用的是CH340型号的,不是开发板随带的。

ADB调式配置

除了上述使用串口调试外,我们还可以使用ADB,它是Android的命令行调试工具,但是我们编译的是buildroot系统,其实也可以使用ADB,这一点后面再解释。

连接OTG端口,也就是Type-C的USB口,这一个端口在烧录固件的时候也会用到

安装RK-USB驱动。注意,如果正确进入loader模式但一直找不到设备,可以尝试更换USB线。下载安装ADB工具。

打开命令行窗口,进入ADB根目录。执行adb shell命令,即可输入shell命令了。

在这里插入图片描述

交叉编译环境

通常情况下,我们会把编译环境搭建在Linux服务器或者虚拟机上,在那个上面进行编译,然后把编译的文件用在RK3588平台上。显然,Linux服务器或者虚拟机肯定不是和RK3399平台使用相同的架构。例如我们使用的服务器为:

在这里插入图片描述

服务器上是x86架构,RK3588是ARM64架构。这个时候就需要交叉编译,其实就是在x86机器上编译的东西放在arm64机器上用。所以,后需的代码工作都是在x86服务器上展开的。(关于怎么登录访问服务器这里就不展开了。。。)

服务器环境啥的都提前配置好了,这里暂时不介绍。

获取SDK

1. 编译 Linux 固件 — Firefly Wiki (t-firefly.com)

我们的计划是编译buildroot系统,那么需要厂商的Linuxsdk,压缩包文件为:rk3588_firefly-1.4.0b.tar.gz,我们使用的是方式一,首先获取的是SDK repo压缩包,将该包解压后再使用命令 .repo/repo/repo sync -l导出源代码。

在这里插入图片描述

解压之后其实就一个 .repo的隐藏文件夹。然后执行导出源代码命令。

在这里插入图片描述

最后还需要同步代码

在这里插入图片描述

在这里插入图片描述

以后,我们就可以使用第二个命令进行代码更新了。

在这里插入图片描述

Linux SDK 配置介绍

配置文件介绍

device/rockchip/rk3588/ 目录下,有不同板型的配置文件(xxxx.mk),用于管理 SDK 每个环节的编译配置,可以查看一下

在这里插入图片描述

显然,根据名称,我们要使用的是roc-rk3588s-pc-buildroot.mk,因为我们要编译buildroot系统。

#**roc-rk3588s-pc-buildroot.mk**文件内容如下

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

source $CUR_DIR/itx-3588j-buildroot.mk

# Kernel dts
export RK_KERNEL_DTS=roc-rk3588s-pc-mipi101-M101014-BE45-A1

# PRODUCT MODEL
export RK_PRODUCT_MODEL=ROC_RK3588S_PC

前3行代码使用 source 命令来执行位于当前脚本同一目录下的 itx-3588j-buildroot.mk 文件。该文件内容如下:

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

source $CUR_DIR/BoardConfig.mk

# Kernel defconfig fragment
export RK_KERNEL_DEFCONFIG_FRAGMENT="$RK_KERNEL_DEFCONFIG_FRAGMENT firefly-linux.config"

# Uboot_defconfig_fragment
export RK_UBOOT_DEFCONFIG_FRAGMENT=firefly-linux.config

# parameter for GPT table
export RK_PARAMETER=parameter-ubuntu-fit.txt

# Kernel dts
export RK_KERNEL_DTS=rk3588-firefly-itx-3588j-mipi101-M101014-BE45-A1

# Set userdata partition type
export RK_USERDATA_FS_TYPE=ext4

# Set extboot
export FF_EXTBOOT=true

export FF_EXTBOOT_SIZE=256M

# PRODUCT MODEL
export RK_PRODUCT_MODEL=ITX_3588J

# recovery ramdisk
export RK_RECOVERY_RAMDISK=rk3588-recovery-arm64.cpio.gz

# Recovery config
export RK_CFG_RECOVERY=

# Buildroot config
export RK_CFG_BUILDROOT=firefly_rk3588

export RK_EXTRA_PARTITIONS=

# packagefile for make update image
export RK_PACKAGE_FILE=rk3588-ubuntu-package-file

前3行代码使用 source 命令来执行位于当前脚本同一目录下的 BoardConfig.mk 文件,该文件内容如下:

#!/bin/bash

# Target arch
export RK_ARCH=arm64
# Uboot defconfig
export RK_UBOOT_DEFCONFIG=rk3588
# Uboot image format type: fit(flattened image tree)
export RK_UBOOT_FORMAT_TYPE=fit
# Kernel defconfig
export RK_KERNEL_DEFCONFIG=rockchip_linux_defconfig
# Kernel defconfig fragment
export RK_KERNEL_DEFCONFIG_FRAGMENT=rk3588_linux.config
# Kernel dts
export RK_KERNEL_DTS=rk3588-evb3-lp5-v10-linux
# boot image type
export RK_BOOT_IMG=boot.img
# kernel image path
export RK_KERNEL_IMG=kernel/arch/arm64/boot/Image
# kernel image format type: fit(flattened image tree)
export RK_KERNEL_FIT_ITS=boot.its
# parameter for GPT table
export RK_PARAMETER=parameter.txt
# Buildroot config
export RK_CFG_BUILDROOT=rockchip_rk3588
# Recovery config
export RK_CFG_RECOVERY=rockchip_rk3588_recovery
# Recovery image format type: fit(flattened image tree)
export RK_RECOVERY_FIT_ITS=boot4recovery.its
# ramboot config
export RK_CFG_RAMBOOT=
# Pcba config
export RK_CFG_PCBA=rockchip_rk3588_pcba
# Build jobs
export RK_JOBS=12
# target chip
export RK_TARGET_PRODUCT=rk3588
# Set rootfs type, including ext2 ext4 squashfs
export RK_ROOTFS_TYPE=ext4
# debian version (debian10: buster, debian11: bullseye)
export RK_DEBIAN_VERSION=bullseye
# yocto machine
export RK_YOCTO_MACHINE=rockchip-rk3588-evb
# rootfs image path
export RK_ROOTFS_IMG=rockdev/rootfs.${RK_ROOTFS_TYPE}
# Set ramboot image type
export RK_RAMBOOT_TYPE=
# <dev>:<mount point>:<fs type>:<mount flags>:<source dir>:<image size(M|K|auto)>:[options]
export RK_EXTRA_PARTITIONS=" \
	oem:/oem:ext2:defaults:oem_normal:auto:resize
	userdata:/userdata:ext2:defaults:userdata_normal:auto:resize
"
# OEM build on buildroot
#export RK_OEM_BUILDIN_BUILDROOT=YES
#misc image
export RK_MISC=wipe_all-misc.img
#choose enable distro module
export RK_DISTRO_MODULE=
# Define pre-build script for this board
export RK_BOARD_PRE_BUILD_SCRIPT=app-build.sh
# Define package-file
export RK_PACKAGE_FILE=rk3588-package-file
# Define WiFi BT chip
# Compatible with Realtek and AP6XXX WiFi : RK_WIFIBT_CHIP=ALL_AP
# Compatible with Realtek and CYWXXX WiFi : RK_WIFIBT_CHIP=ALL_CY
# Single WiFi configuration: AP6256 or CYW43455: RK_WIFIBT_CHIP=AP6256
export RK_WIFIBT_CHIP=ALL_AP
# Define BT ttySX
export RK_WIFIBT_TTY=ttyS8

配置文件指定了DTS文件和分区表文件等其他文件。上述配置文件中是

RK_KERNEL_DTS = roc-rk3588s-pc-mipi101-M101014-BE45-A1

RK_PARAMETER = parameter-ubuntu-fit.txt

分区说明

parameter.txt 文件中包含了固件的分区信息,以 parameter-ubuntu-fit.txt 为例:

路径:device\rockchip\rk3588\parameter-ubuntu-fit.txt

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3588
MACHINE_ID: 007
MANUFACTURER: RK3588
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00004000@0x00004000(uboot),0x00002000@0x00008000(misc),0x00080000@0x0000a000(boot:bootable),0x00040000@0x0008a000(recovery),0x00010000@0x000ca000(backup),0x00c00000@0x000da000(rootfs),-@0x00cda000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

CMDLINE 属性是我们关注的地方,以 misc 为例, 0x00002000@0x00008000(uboot) 中 0x00008000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。

package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。

路径:tools/linux/Linux_Pack_Firmware/rockdev/rk3588-package-file

编译Buildroot固件

说一句题外话,可以使用如下命令查询SDK版本:

zhudk@vm1:/expand/zhudk/rk3588_firefly$ readlink -f .repo/manifest.xml
/expand/zhudk/rk3588_firefly/.repo/manifests/rk3588/rk3588_linux_release_20240517_v1.4.0b.xml
编译前配置

device/rockchip/rk3588/ 目录下,有不同板型的配置文件,选择配置文件:

在这里插入图片描述

全自动编译

全自动编译会执行上述编译、打包操作,生成 RK 固件。

./build.sh

打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。

部分编译
  • 编译 u-boot
./build.sh uboot
  • 编译 kernel
./build.sh extboot
  • 编译 recovery
./build.sh recovery
  • 编译 buildroot
./build.sh rootfs
  • 更新各部分镜像链接到 rockdev/ 目录:
./mkfirmware.sh
  • 打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。
./build.sh updateimg

编译完成后 rockdev/ 目录如下

在这里插入图片描述

使用USB线缆升级固件

USB驱动和烧录工具不做解释,如果遇到问题可以尝试更换工具版本或者USB线缆。

进入升级模式

通常我们升级固件的模式有两种,分别是Loader模式和MaskRom模式。烧写固件前,我们需要连接好设备,并让板子进入到可升级模式。

MaskRom 模式是设备变砖的最后一条防线。强行进入 MaskRom 涉及硬件操作,有一定风险,因此仅在设备进入不了 Loader 模式的情况下,方可尝试 MaskRom 模式。进入 MaskRom 的原理是人为的把 EMMC 的数据脚与地线短接,系统会认为 EMMC 数据出错,从而清除 EMMC 数据。可以按maskrom 按键,然后进行上电,此时设备就会进入 MaskRom 模式。

进入Loader模式也有几种方式

  • 在串口调试终端或adb shell给板子运行以下命令reboot loader
  • 保持板子上电,先按住RECOVERY键并保持,再按住RESET按键大约两秒钟(其实可以看日志)后,松开RECOVERY键。
烧写统一固件

统一固件是由分区表、bootloader、uboot、kernel、system等所有文件打包合并成的单个文件。Firefly正式发布的固件都是采用统一固件格式,升级统一固件将会更新主板上所有分区的数据和分区表,并且擦除主板上所有数据。

在这里插入图片描述

烧写分区镜像

即各个功能独立的文件,如分区表、bootloader、kernel等,在开发阶段生成。独立分区镜像可以只更新指定的分区,而保持其它分区数据不被破坏,在开发过程中会很方便调试。
在这里插入图片描述

如果我们做驱动开发,其实可以仅烧录boot.img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2086640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字典查找对应输入的字符

一、将文件放入到数据库 #include<stdio.h> #include<sqlite3.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <unistd.h> int main(int agrc,char *agrv[]) {FILE *fp;fp fope…

详细介绍校园网络拓扑结构设计图

目录 需求分析 网络架构设计 拓扑图设计 安全策略 出口设计 总结 校园网络拓扑结构设计是一种对学校内计算机、网络设备和软件进行集成应用的系统化设计&#xff0c;旨在为师生提供一个高效、稳定、安全的网络平台&#xff0c;以支持教学、科研和管理的信息化需求。一个优…

RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型

前言 作者使用的平台为Ubuntu20.04虚拟系统&#xff0c;开发板为瑞芯微RK3588&#xff0c;开发板上的系统为Ubuntu22.04系统。 一、任务 完成RKNN模型的部署&#xff0c;RKNN模型的部署是将RKNN模型放到开发板上&#xff0c;应用程序可以加载RKNN模型&#xff0c;从而在嵌入式…

进阶SpringBoot之 Shiro(1)快速开始

Shiro 是一个 Java 的安全&#xff08;权限&#xff09;框架&#xff0c;它可以在 JavaSE、JavaEE 环境下使用 Shiro 可以实现认证、授权、加密、会话管理、Web 集成、缓存等 Shiro 官网 Shiro 中文文档 GitHub 下载 Shiro 下载源码&#xff0c;samples -> quickstart …

Linux-全网备份实战案例rsync邮件发送

项目准备 服务端&#xff1a;backup&#xff1a;172.16.1.41 客户端1&#xff1a;nfs:172.16.1.31 客户端2&#xff1a; web01:172.16.1.7 1.1 服务端backup-rsync配置文件 [rootbackup ~]# cat /etc/rsyncd.conf #created by linux 2024-8-29 ###########rsyncd.conf star…

进程和线程(操作系统八股文part2)

一个操作系统的进程和线程部分的笔记&#xff0c;大部分来源于&#xff1a;小林coding和Javaguide&#xff0c;以及操作系统黑书。 进程和线程 什么是进程 运行中的程序叫进程**&#xff08;Process&#xff09;**。 进程是资源分配的最小单位&#xff0c;线程是执行的最小…

【逐行注释】MATLAB下的UKF(无迹卡尔曼滤波),带丰富的中文注释,可直接复制到MATLAB上运行,无需下载

文章目录 程序组成部分完整代码运行结果主要模块解读:运动模型绘图部分误差统计特性输出程序组成部分 由模型初始化、运动模型、UKF主体部分、绘图代码和输出部分组成: 完整代码 将下列代码复制粘贴到MATLAB里面,即可运行: % 三维状态量的UKF例程 % 作者联系方式:微信…

学苑教育杂志社学苑教育编辑部学苑教育杂志2024年第23期目录

专题研究 “三全六为”教育教学理念的实践运用 果艳青; 4-6 教育管理 班主任班级管理工作中进行小组合作的优化策略 肖堂花; 7-9 课堂教学 以“创新”为支点&#xff0c;构建小学数学活力课堂 马绪如; 10-12 案例教学法在初中道德与法治教学中的应用 何瑞娟; 1…

js实现队列

目录 一、什么是JavaScript队列数据结构二、创建一个JavaScript队列数据结构三、封装队列方法①向队列添加元素②检查队列是否为空③获取队列的长度④从队列移除元素⑤查看队列头元素⑥清空队列⑦创建toString方法 四、使用Queue类 一、什么是JavaScript队列数据结构 在上一篇…

【解析几何笔记】11.向量的外积运算

11. 向量的外积运算 【注】也可以这么计算 11.1 向量的多重乘积 【命题】任意三个向量&#xff0c; α , β , γ \pmb{\alpha},\pmb{\beta},\pmb{\gamma} α,β,γ&#xff0c; ( α β ) γ ( α ⋅ γ ) β − ( β ⋅ γ ) α (\pmb{\alpha}\times\pmb{\beta})\times\p…

Java 7.4 - 分布式锁

什么是分布式锁&#xff1f; 对于单机多线程&#xff0c;我们使用 ReentrantLock 这类本地锁来控制多个线程对本地共享资源的访问&#xff1b;而对于分布式系统&#xff0c;我们使用 分布式锁 来控制多个服务对共享资源的访问。 分布式锁基本要求&#xff1a; 1、互斥 2、高…

【自由能系列(中级)】自由能与变分自由能——从状态到配置的效益最大化

自由能与变分自由能——从状态到配置的效益最大化 关键词提炼 #自由能 #变分自由能 #状态函数 #配置函数 #效益最大化 #物理系统 #优化问题 第一节&#xff1a;自由能与变分自由能的类比与核心概念 1.1 自由能与变分自由能的类比 自由能和变分自由能可以被视为物理系统的“…

最火视频素材去哪里找?热门的视频素材网站库分享给你

你是否正在寻找那些能够让你的视频作品一鸣惊人的优质素材&#xff1f;如果你还在为如何让视频内容更加出彩而苦恼&#xff0c;那么今天你就来对地方了&#xff01;我将为你介绍几个非常实用且资源丰富的视频素材网站&#xff0c;让你的作品在众多视频中脱颖而出&#xff0c;成…

element的el-steps里的数据处理用switch 循环,处理的数据不要vue响应式的值

element的el-steps我通过v-for循环展示里面的每一行信息我需要处理&#xff0c;我就用了方法 handlerCatalogue来处理&#xff0c; 我重新定义一个数据lineOneIntro &#xff0c;每次return的lineOneIntro &#xff0c;但是会执行103次&#xff0c; 导致我页面卡死&#xff0c;…

SpringBoot 基于iText 根据PDF模板动态生成文件

SpringBoot 基于iText 根据PDF模板动态生成文件, 需要使用 adobe acrobat pro DC这个工具来自定义模板 支持根据PDF模板生成单页或多页PDF文件 adobe acrobat pro DC 自定义模板 下载地址 链接&#xff1a;https://pan.baidu.com/s/1Vn3bIQ5_D17sEZnkF2t7gg?pwdn6o1 提取码…

【hot100篇-python刷题记录】【杨辉三角】

R6-dp篇 印象题&#xff0c;但做法应该改变了 思路&#xff1a;前两行直接写 next[i]cur[i-1]cur[i]&#xff0c;其中next[0]和next[-1] 这样的话&#xff0c;需要创建2个额外的数组空间&#xff0c;而且还要变化 所以考虑动态规划 class Solution:def generate(self, num…

Efficient LoFTR论文阅读(特征匹配)

Efficient LoFTR论文阅读&#xff08;特征匹配&#xff09; 摘要1. 引言2. 相关工作基于检测器的图像匹配无检测器图像匹配 3. 方法3.1. 局部特征提取3.2. 高效的局部特征变换3.3. 准备工作3.4. 聚合注意力机制3.5 粗级匹配模块有效推理策略子像素级细化模块有效的精细特征提取…

[C语言]一、C语言基础(03.函数)

G:\Cpp\C语言精讲 6. 函数 6.1函数的基本使用 6.1.1 为什么需要函数 《街霸》游戏中&#xff0c;每次人物出拳、出脚或跳跃等动作都需要编写50-80行的代码&#xff0c;在每次出拳、出脚或跳跃的地方都需要重复地编写这50-80行代码&#xff0c;这样程序会变得很臃肿&#xff…

目前kimi算不算国内顶级的AI?

利用AI工具批量生成影视短剧推广https://docs.qq.com/doc/DYnl6d0FLdHp0V2ll 从用户体验上讲&#xff0c;我觉得 Kimi 算得上国内的顶级 AI。 现在的大模型产品遍地开花&#xff0c;底层模型原理差异不大&#xff0c;想要在这样的市场环境中生存下来并赢得普通用户认可&#xf…

Go锁 详解

锁 - Go 函数并发编程中&#xff0c;锁是一种同步机制&#xff0c;用于协调对共享资源的访问&#xff0c;防止数据竞争 - Go 中提供了多种类型的锁&#xff0c;每种锁都有不同的特性和适用场景类型 互斥锁&#xff08;mutex&#xff09; 基础锁&#xff0c;只能同时允许一个 g…