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

开发板: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=trueexport 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_rk3588export 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:resizeuserdata:/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.mzph.cn/news/878209.shtml

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

相关文章

【Python机器学习】NLP词频背后的含义——从词频到主题得分

目录 TF-IDF向量及词形归并 主题向量 一个思想实验 一个主题评分算法 一个LDA分类器 LDiA TF-IDF向量&#xff08;词项频率—逆文档频率向量&#xff09;可以帮助我们估算词在文本块中的重要度&#xff0c;我们使用TF-IDF向量和矩阵可以表明每个词对于文档集合中的一小段…

计算机视觉编程 1(图片处理)

目录 灰色度 缩略图 拷贝粘贴区域 调整图像尺寸 旋转图像45 画图线、描点 灰色度 灰度是指图像中每个像素的亮度值&#xff0c;用来描述图像中各个像素的明暗程度。在计算机视觉中&#xff0c;灰度可以通过以下方式来计算&#xff1a; 1. 平均值法&#xff1a;将图像中每…

Java基础——自学习使用(泛型)

一、泛型的定义 泛型的本质是参数化类型&#xff0c;也就是所操作的数据类型被指定为一个参数。 泛型泛指一切类型&#xff0c;能够代表一切类型&#xff0c;是一种在编程中广泛使用的概念&#xff0c;特别是在面向对象编程中。它允许在编写代码时使用类型参数&#xff0c;这些…

MES管理系统助力印刷企业实现智能化工艺流程

在印刷这一古老而充满活力的行业中&#xff0c;科技的浪潮正以前所未有的速度重塑着每一个生产环节。随着制造业数字化转型的深入&#xff0c;引入MES管理系统&#xff0c;为印刷企业带来了从原材料入库到成品出库的全流程智能化变革&#xff0c;不仅提升了生产效率&#xff0c…

剪辑小白必看:好用的剪辑工具推荐!

作为一位热爱创作的视频制作者&#xff0c;我尝试过不少剪辑软件&#xff0c;今天我想分享自己对福昕视频剪辑、爱拍剪辑、达芬奇和VSDC Video Editor这四款软件的使用体验。 福昕视频剪辑 链接&#xff1a;www.pdf365.cn/foxit-clip/ 我第一次接触到福昕视频剪辑是在朋友的…

树数据结构(Tree Data Structures)的全面指南:深度解析、算法实战与应用案例

树数据结构&#xff08;Tree Data Structures&#xff09;的全面指南&#xff1a;深度解析、算法实战与应用案例 引言 树数据结构&#xff08;Tree Data Structures&#xff09;作为计算机科学中的基石之一&#xff0c;以其独特的层次结构和分支特性&#xff0c;在众多领域发…

2012-2022年各省新质生产力匹配数字经济数据

2012-2022年各省新质生产力匹配数字经济数据 1、时间&#xff1a;2012-2022年 2、来源&#xff1a;各省年鉴、能源年鉴、工业年鉴、统计年鉴 3、指标&#xff1a;prov、year、gdp亿元、在岗职工工资元、第三产业就业比重、人均受教育平均年限、教育经费强度、在校学生结构、…

【STM32】IWDG独立看门狗与WWDG窗口看门狗

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 WDG简介 IWDG IWDG特性 独立看门狗时钟 键寄存器 超时时间 IWDG代码 WWDG WWDG特性 窗口看门狗时钟 超时时间 WWDG时序 WWDG代码 IWDG和WWDG对比 WDG简介 WDG&#xff08;…

面经:什么是Transformer位置编码?

过去的几年里&#xff0c;Transformer大放异彩&#xff0c;在各个领域疯狂上分。它究竟是做什么&#xff0c;面试常考的Transformer位置编码暗藏什么玄机&#xff1f;本文一次性讲解清楚。 Transformer的结构如下&#xff1a; 可能是NLP界出镜率最高的图 Transformer结构中&a…

最大公约数(欧几里得算法)

欧几里得算法 只需要记住一个公式&#xff08;不需要推导&#xff0c;这就是数论的基础知识&#xff09;&#xff1a; step1&#xff1a; 判断小括号内右边的数字 b 是否为0&#xff0c;如果为0&#xff0c;输出小括号左边的数字 a &#xff0c;就是一开始要求的两个数的最大…

深度学习入门笔记

深度学习入门笔记 感知机逻辑与门与非门或门多层感知机异或门 神经网络激活函数输出层设计损失函数均方误差 MSE交叉熵误差 反向传播算法计算图局部计算计算图反向传播反向传播 参数更新训练过程总结 该篇文章为本人学习笔记的一部分。笔记基于《深度学习入门 基于python理论实…

在Linux下搭建go环境

下载go go官网&#xff1a;All releases - The Go Programming Language 我们可以吧压缩包下载到Windows上再传到Linux上&#xff0c;也可以直接web下载&#xff1a; wget https://golang.google.cn/dl/go1.23.0.linux-amd64.tar.gz 解压 使用命令解压&#xff1a; tar -x…

关于前端布局的基础知识

float 横向布局 float 实现横向布局&#xff0c;需要向横着布局的元素添加float 其值left right 存在问题 如果使用float 所在父级五高度&#xff0c;会导致下方的元素上移 top的高度被吞了 解决方法&#xff1a; 给父级元素设置高度&#xff1a;不推荐&#xff0c;需要给父级…

专题◉万字长文!盘点过去一年最出圈的Prompt项目教程,有3份在悄悄更新

1. OpenAI 官方出品 | 提示工程最权威的教程 (最新版) 2023年6月&#xff0c;OpenAI 发布了一篇〖*GPT Best Practice (GPT 最佳实践)* 〗教程&#xff0c;详细介绍 ChatGPT Prompt 交互策略&技巧&#xff0c;并且给出了示例说明。 一年时间过去了&#xff0c;OpenAI 不…

Axure RP实战:打造高效文字点选验证码

Axure RP实战&#xff1a;打造高效文字点选验证码 前言 在数字时代&#xff0c;网络安全和用户体验是设计在线表单时的两大关键考量。 验证码作为一种验证用户身份的技术&#xff0c;已经从简单的数字和字母组合&#xff0c;发展到了更为复杂和用户友好的形式。 今天&#…

数量关系:成本售价利润问题

问&#xff1a;某品牌服装&#xff0c;甲店进货价比乙店便宜10%&#xff0c;两店同时按20%的利润定价&#xff0c;这样1件商品乙店比甲店多赚4元&#xff0c;乙店的定价是多少元?() A 200 B 216 C 240【正确答案】 D 300标准答案&#xff1a;设乙店的进货价为x,则甲店的为0.9x…

灵办AI:解锁办公新境界,让工作更智能、更高效!

在这个信息爆炸的时代&#xff0c;我们每个人都在寻找能够提升效率、简化工作流程的工具。如果您正在寻找一个能够全方位提升工作效率的AI助手&#xff0c;那么灵办AI绝对值得您的关注。 为什么选择灵办AI&#xff1f; 在众多AI工具中&#xff0c;灵办AI凭借其卓越的性能和独…

Python数据采集与网络爬虫技术实训室解决方案

在大数据与人工智能时代&#xff0c;数据采集与分析已成为企业决策、市场洞察、产品创新等领域不可或缺的一环。而Python&#xff0c;作为一门高效、易学的编程语言&#xff0c;凭借其强大的库支持和广泛的应用场景&#xff0c;在数据采集与网络爬虫领域展现出了非凡的潜力。唯…

【微信小程序】导入项目

1.在微信开发工具中&#xff0c;点击【导入项目】 2.在打开的界面中执行2个步骤 1.找到要导入项目的路径2.AppID要改成自己的AppID 3.package.json包初始化【装包之前要确保有package.json文件】 1.在【资源管理器】空白处&#xff0c;点击鼠标右键&#xff0c;选择【】&am…

显示中文字体问题解决:ImportError: The _imagingft C module is not installed

使用opencv写入中文时&#xff0c;用以下代码会导致乱码&#xff1a; cv2.putText(im0, f"{label}:{score}", (xmin, ymin), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,255,0), 3)因此需要借助PIL库写入中文字符&#xff0c;用法如下&#xff1a; import cv2 from PIL impo…