本文档主要介绍基于 Core-3568J 平台的开发方法。
OS 名称 | 内核版本 | 支持情况 | 维护情况 |
---|---|---|---|
Linux | 4.19 | √ | 主要维护 |
Android11.0 | 4.19 | √ | 主要维护 |
当前版本 | |
---|---|
文档名称 | Core-3568J 开发手册 |
版本号 | V2.0.2 |
作者 | Firefly Team |
修改日期 | 2022-05-10 |
V2.0.2
更新时间:2022-05-10
更新内容:
修改串口调试内容
修正部分下载链接。
V2.0.1
更新时间:2022-05-09
更新内容:
增加《修订记录》
上手教程
Core-3568J采用RK3568四核64位Cortex-A55 处理器, 22 nm 先进工艺,主频最高2.0GHz,,集成双核心架构GPU以及高效能NPU;最大支持8G大内存;支持WiFi6,5G/4G等高速无线网络通讯;拥有丰富的 接口扩展,支持多种视频输入输出接口,可适用于智能NVR、云终端、物联网网关、工业控制等场景
AIO-3568J开发板由核心板Core-3568J 底板MB-JM3-RK3568组成, AIO-3568J拥有RGMII、PCIE3.0、USB3.0、I2C、SPI、UART、GPIO、MIPI-DSI等丰富接口,可直接应用到各种智能产品中,加速产品落地
Core-3568J 核心板一块
12V-2A电源适配器一个
MB-JM3-RK3568 底板一块
铜管天线x2
双公头 USB 线一条
另外可以选购的配件有:
Firefly 串口模块
另外,在使用过程中,你可能需要以下配件:
显示设备
带 HDMI 接口的显示器或电视,及 HDMI 连接线
网络
100M/1000M 以太网线缆,及有线路由器
WiFi 路由器
输入设备
USB 无线/有线的鼠标/键盘
红外遥控器(需要接上红外接收器)
升级固件,调试
双公头 USB 数据线
串口转 USB 适配器
如果正在进行 U-Boot 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。
网店上有许多 USB 转串口的适配器,按芯片来分,有以下几种:
串口 | 最高波特率 | 是否推荐 | 评价 | 购买链接 |
---|---|---|---|---|
CP2104 | 2Mbps | 推荐 | 支持高波特率通信,稳定性好耐用 | 点击购买 |
CH340 | 2Mbps | 不推荐 | firefly和许多客户在实际使用中发现,市面上很多CH340的实际波特率达不到1.5Mbps,这给开发过程造成很多麻烦 | |
PL2303 | 1.2Mbps | 不推荐 | 最高波特率达不到1.5Mbps |
注意: AIO-3568J 默认的波特率是 1500000,有些USB转串口芯片波特率无法达到 1500000,同一芯片的不同系列也可能会有差异,所以在选购之前一定要确认是否支持。
串口转 USB 适配器,有四个引脚:
3.3V 电源(NC),不需要连接
GND,串口的地线,接开发板串口的 GND 针
TXD,串口的输出线,接开发板串口的 TX 针
RXD,串口的输入线,接开发板串口的 RX 针
注意: 如使用其它串口适配器遇到 TX 和 RX 不能输入和输出的问题,可以尝试对调 TX 和 RX 的连接。
AIO-3568J 串口连接图:
AIO-3568J 使用以下串口参数:
波特率:1500000
数据位:8
停止位:1
奇偶校验:无
流控:无
下载驱动并安装:
如果在 Win8 上不能正常使用 PL2303,参考这篇文章, 采用 3.3.5.122 或更老版本的旧驱动即可。
如果在 Windows 系统上安装官网的 CP210X 驱动,使用 PUTTY 或 SecureCRT 等工具设置串口波特率为 1500000,如果出现设置不了或无效的问题,可以下载旧版本驱动。
插入适配器后,系统会提示发现新硬件,并初始化,之后可以在设备管理器找到对应的 COM 口:
Windows 上一般用 putty 或 SecureCRT。其中我们推荐使用 MobaXterm 免费版本。这是一款功能强大的终端软件,在这里介绍一下,MobaXterm 的使用方法与之类似。
到这里下载 MobaXterm:
选择 session 为 Serial。
将 Serial port 修改为在设备管理器中找到的 COM 端口。
设置 Speed (bsp) 为 1500000。
点击 OK 按钮。
在 Ubuntu 上可以有多种选择:
minicom
picocom
kermit
篇幅关系,以下就介绍 minicom 的使用。
AIO-3568J 有2种工作模式。一般情况下,开机直接进入Normal 模式正常启动系统。如需对板子系统进行升级,可以根据情况选择合适的升级模式进行固件升级。
注意:AIO-3568J出厂默认安装 Android 操作系统,如果用户要运行其他操作系统,需要使用对应的固件烧写到主板。可以前往固件下载页面下载更多固件。
AIO-3568J按工作模式进行分类,可以分为二种工作模式:
工作模式 | Normal 模式 | 升级模式 |
---|---|---|
启动介质 | eMMC 接口/SDMMC 接口 | |
描述 | Normal 模式就是正常的启动过程, 各个组件依次加载,正常进入系统。 |
目前支持3种升级模式,各有优缺点: 1. MaskRom 升级模式 2. Loader 升级模式 3. SD 升级模式 |
其中升级模式中,不同升级模式之间的对比:
升级模式 | MaskRom 升级模式 | Loader 升级模式 | SD 升级模式 |
---|---|---|---|
简单描述 | 1. 使用USB线将主板连接到电脑上; 2. 硬件操作使板子进入升级模式; 3. 在PC上使用USB升级单板固件。 |
1. 使用USB线将主板连接到电脑上; 2. 软件或按键操作使板子进入升级模式; 3. 在PC上使用USB升级单板固件。 |
1.通过升级卡制作工具,将MicroSD卡制作为升级卡; 2. 将升级卡插入主板,上电开机,机器自动执行升级。 |
连接方式 | USB | USB | TF卡(少数为SD卡槽) |
升级工具 Windows PC Linux PC |
Windows 上升级固件 Linux 上升级固件 |
Windows 上升级固件 Linux 上升级固件 |
Windows 上制作升级卡 不支持 |
进入方法 | 需要硬件操作 | 按键或软件进入 | 上电直接进入 |
使用条件 | 硬件操作进入 | 能正常使用uboot | 无 |
使用场景推荐 | 1. 当板子无法正常启动时候; 2. 在切换烧写Linux和Android固件的情况下。 |
1. 有完整uboot或能正常进入系统; 2. 需要单独烧写分区(uboot或boot分区等)。 |
1. 工人操作方便,适合产品批量生产时候; 2. 产品定型后升级,方便最终客户操作。 |
优点 | 1. 最基本的烧写方式; 2. 非固件和硬件问题,一般都能成功烧写; 3. 不需要uboot支持,拯救变砖的单板; 4. 支持跨系统升级(Linux和安卓等)。 |
1. 烧写效果MaskRom 升级模式差不多; 2. 能单独烧写分区; 3. 进入loader模式方便。 |
1. 操作方便,只需插卡启动; 2.集合了MaskRom 升级模式的优点。 |
缺点 | 1. 进入方式麻烦,不适难拆除外壳的产品; 2. 烧写分区表麻烦,较难单独烧写分区; 3. 需要完全擦除设备再烧写。 |
1. 需要完整的loader(通常指uboot); 2. 跨系统升级需要完全擦除设备再烧写。 |
1. 需要合成完整固件。 |
一般情况下是不用进入 MaskRom 升级模式的,只有在 bootloader 校验失败(读取不了 IDB 块,或 bootloader 损坏) 的情况下,BootRom 代码 就会进入此模式。此时 BootRom 代码等待主机通过 USB 接口传送 bootloader 代码,加载并运行之。当板子变砖无法正常启动或升级程序时,也可以手动进入MaskRom 升级模式.
要强行进入 MaskRom 升级模式,请参阅《MaskRom 升级模式》一章。
在 Loader 升级模式下,bootloader 会进入升级状态,等待主机命令,用于固件升级等。要进入此模式,必须让 bootloader 在启动时检测到 RECOVERY(恢复)键按下,且 USB 处于连接状态。
要强行进入 Loader 升级模式,请参阅《Loader 升级模式》一章。
本文介绍了如何将主机上的固件,通过双公头USB数据线烧录到 Core-3568J 开发板的存储器中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。
AIO-3568J 开发板
主机
良好的双公头USB数据线
固件可以通过编译SDK获得,也可以通过资源下载处下载公版固件(统一固件)。固件文件一般有两种:
单个统一固件
统一固件是由分区表、bootloader、uboot、kernel、system等所有文件打包合并成的单个文件。Firefly正式发布的固件都是采用统一固件格式,升级统一固件将会更新主板上所有分区的数据和分区表,并且擦除主板上所有数据。
多个分区镜像
即各个功能独立的文件,如分区表、bootloader、kernel等,在开发阶段生成。独立分区镜像可以只更新指定的分区,而保持其它分区数据不被破坏,在开发过程中会很方便调试。
通过统一固件解包/打包工具,可以把统一固件解包为多个分区镜像,也可以将多个分区镜像合并为一个统一固件。
安装RK USB驱动
下载 Release_DriverAssistant.zip,解压,然后运行里面的 DriverInstall.exe 。为了所有设备都使用更新的驱动,请先选择驱动卸载,然后再选择驱动安装。
运行AndroidTool的RKDevTool.exe
为避免由下载工具版本引起的烧写问题,推荐使用公版固件压缩包内部打包好的工具进行烧写,例如安卓公版固件压缩包解压后如下:
也可以单独下载 AndroidTool,解压,运行 RKDevTool_Release_v2.xx 目录里面的 RKDevTool.exe(注意,如果是 Windows 7/8,需要按鼠标右键,选择以管理员身份运行),如下图:
Linux 下无须安装设备驱动
下载 Linux_Upgrade_Tool, 并按以下方法安装到系统中,方便调用:
下载 Linux_adb_fastboot, 并按以下方法安装到系统中,方便调用:
通常我们升级固件的模式有两种,分别是Loader模式和MaskRom模式。烧写固件前,我们需要连接好设备,并让板子进入到可升级模式。
连接设备并通过RECOVERY按键进入Loader升级模式步骤如下:
先断开电源适配器连接
双公头 USB 数据线一端连接主机,一端连接开发板
按住设备上的 RECOVERY (恢复)键并保持
接上电源
大约两秒钟后,松开 RECOVERY 键
双公头USB数据线接好后在串口调试终端或adb shell给板子运行以下命令
如何确定板子是否进入Loader模式,我们可以通过工具去查看
Windows操作系统
通过AndroidTool工具可以看到下方提示Found One LOADER Device
如果有进行”进入Loader模式”的操作,仍旧没有看到烧写工具提示LOADER,此时可以可以看一下Windows主机是否有提示发现新硬件并配置驱动。打开设备管理器,会见到新设备 Rockusb Device 出现,如下图。如果没有,可返回上一步重新安装驱动。
Linux操作系统
运行upgrade_tool后可以看到连接设备中有个Loader的提示
进入MaskRom模式的方法,请参考《MaskRom模式》
MaskRom烧写固件前先确定板子AIO-3568J是否有贴Nor Flash存储器,如下图:
如果有贴Nor Flash请参考切换升级存储器章节烧写统一固件,没有贴Nor Flash可按以下步骤继续操作
注意:Linux SDK v1.2.4a 及之后版本采用 extboot,烧写内核请使用 extboot.img 取代后文中所有的 boot.img(仅限 Linux,Android 请无视)
如何查看版本:
版本格式为 vx.x.xx,例如 v1.2.4a
固件文件名称中存在版本号(…_vx.x.xx_日期.img)
Buildroot 使用cat /etc/version获取版本(rk356x_linux_release_日期_vx.x.xx.xml)
Ubuntu 使用ffgo version获取版本(rk356x_linux_release_日期_vx.x.xx.xml)
SDK 中可以在 SDK 根目录通过命令查看:ls -l .repo/manifests/rk356x_linux_release.xml
如果上述方法找不到格式为 vx.x.xx 的版本,说明是旧版本,不支持 extboot
不要将 extboot.img 烧录进旧版本固件!
除此之外,extboot ubuntu 还支持以安装包的形式更新内核,详情查看Ubuntu 使用手册
烧写统一固件 update.img 的步骤如下:
切换至Upgrade Firmware页。
按Firmware按钮,打开要升级的固件文件。升级工具会显示详细的固件信息。
按Upgrade按钮开始升级。
如果升级失败,可以尝试使用切换升级存储器里面的方法
烧写分区映像的步骤如下:
切换至Upgrade Firmware页。
点击设备分区表按钮(Dev Partition)
勾选需要烧录的分区,可以多选。
确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。
点击Run按钮开始升级,升级结束后设备会自动重启。
如果升级失败,可以尝试使用切换升级存储器里面的方法
如果板子进入不了 Loader 模式,此时可以尝试强行进入 MaskRom 模式。操作方法见《MaskRom模式》。
如果烧写过程中出现Download Boot Fail, 或者烧写过程中出错,如下图所示,通常是由于使用的USB线连接不良、劣质线材,或者电脑USB口驱动能力不足导致的,请更换USB线或者电脑USB端口排查。
如果板子同时贴有 Spi Flash(Nor Flash) 和 eMMC时,当进入 MaskRom 后,需要切换存储设备,操作方法见《切换升级设备》。
有关启动模式的介绍,请参阅《升级固件介绍》一章
MaskRom 模式是设备变砖的最后一条防线。强行进入 MaskRom 涉及硬件操作,有一定风险,因此仅在设备进入不了 Loader 模式的情况下,方可尝试 MaskRom 模式。进入 MaskRom 的原理是人为的把 EMMC 的数据脚与地线短接,系统会认为 EMMC 数据出错,从而清除 EMMC 数据。
请小心阅读,并谨慎操作!
操作步骤如下:
设备断开电源
使用双公头USB数据线连接设备和电脑
用金属镊子接通Core-3568J上的如下图所示的两个测试点并保持(如下图所示)。
设备插入电源
稍候片刻,之后松开镊子。
短接EMMC附近的D0和GND 测试点
此时设备就会进入 MaskRom 模式。
本文介绍当主机同时存在 eMMC(默认) 和 NOR Flash 这两种存储器的时候,在烧录固件的时候,需根据以下的启动模式和情况来升级固件。
如下图,则设备有贴 Nor Falsh 存储器。
如果是通过 软件执行 reboot loader 或者 通过硬件Recovery 按键进入的Loader 下载模式的话,可不需要看接下来的内容,直接跳到 《使用USB线缆升级固件》 操作。
如果是通过 《MaskRom模式》 章节进入了Maskrom 模式(或设备异常,经过擦除设备进入Maskrom),而板子同时存在NOR flash和 eMMC 两种存储器,这个时候想要烧录固件,需要区分存储器:
系统在Maskrom模式下默认将固件下载到NOR flash中,不过由于NOR flash 比较小,不足以装载系统镜像,所以一般只会烧写比较小的文件,如MiniLoaderAll.bin。如果不小心将整个固件下载到NOR flash中,会出现下载固件失败的现象, 此时大家可以参考FAQ去处理
有两种方法可以将固件烧写进eMMC中,一种是RK原厂提供的烧写方法,需要烧写MiniLoaderAll.bin并切换存储器;另一种是Firefly为了方便大家烧写,提供的一种参考烧写方法,该方法操作上无需要切换存储器,也可以使用Linux端的烧写工具upgrade_tool进行烧写
此方法仅在官方最新SDK编译或者最新的官方固件中可用。如果在Maskrom模式下不慎将固件下载到NOR flash中,导致重启后无法正常启动, 那么可以进入《MaskRom模式》,烧录最新SDK编译或者官方提供的固件;不管烧录成功还是失败,当机器重启后,假如NOR flash 存在数据则自动擦除,擦除时间大概30~60s,擦除成功后,自动进入Loader模式,之后直接烧录固件即可。
若要将固件下载到eMMC中,需要先下载MiniLoaderAll.bin, 然后选择将存储器切换到eMMC。具体操作步骤如下:
1.先准备好 MiniLoaderAll.bin,一般存放在以下路径(需提前编译固件):
如果还没有编译SDK,可以从以下链接下载 一个对应CPU型号的MiniLoaderAll.bin。
2.点击下载工具的Advanced Function,然后将准备好的MiniLoaderAll.bin下载到存储器中,见下图
3.点击List Storage读取存储器,此时存储列表选中的是SPINOR,为确保Nor flash为空,我们选择EraseAll擦除
X 表示设备不存在该存储器
0 表示存在该存储器,但未选中
√ 表示存在该存储器并处于被选中状态
4.在存储列表中选中Emmc后点击Switch Storage
可以看到存储列表中的Emmc状态就会从0切到√,表示选择将固件下载到eMMC
5.点击EraseAll擦除
6.点击下载工具的Upgrade Firmware,然后选择我们想要下载进eMMC中的固件进行升级
该现象是因为固件直接烧写进NOR flash中引起的,出现该现象时大家可以根据当前的情况进行处理:
情况一:下载失败时没有断电或重启
可以直接点击EraseFlash擦除NOR flash
之后按照章节固件下载到eMMC的步骤进行固件升级即可
情况二:有进行过重启或断电的操作
通过Recovery按键进入Loader模式, 然后点击AndroidTool的Go maskrom进入Maskrom模式
之后按照章节固件下载到eMMC的步骤进行固件升级即可。若不清楚如何通过Recovery按键进入Loader模式请参考使用USB线缆升级固件章节
如果大家有接串口,可以查看一下log信息,其中Bootdev(atags): mtd 2说明系统启动到NOR flash存储器的uboot中
进入到Maskrom模式后,固件升级都需要按照固件下载到eMMC的步骤进行操作
点击AndroidTool的Go Maskrom无法进入Maskrom模式,rbrom命令同样也不行,原因是部分旧固件不支持从NOR flash的bootloader回到Maskrom模式,此时可通过Recovery按键重新进入Loader模式,点击AndroidTool的EraseFlash进行擦除
无论是否提示擦除IDB失败都重启一下板子,重启后可进入Maskrom模式
烧写异常问题可参考帖子rk3566/rk3568 烧写异常问题,若遇到其它问题也可以到社区论坛对应的板块发帖
本文主要介绍如何通过MicroSD卡,升级主板上的固件。
使用MicroSD升级固件,需要在电脑上,通过做卡工具,将统一固件写入MicroSD卡,目前此操作只支持在Windows操作系统上完成。
主板
电脑
SD卡
USB读卡器
下载需要升级到主板上的统一固件。
打开SD_Firmware_Tool,勾选Upgrade Firmware框,点击Firmware选择正确升级固件。
将MicroSD插入USB读卡器,再插入到电脑USB口上,在列表式组合框中选择正确的USB设备。
点击Create之后,等待创建结束。
取出MicroSD卡,插入主板的MicroSD卡插槽,对主板上电开机,主板自动开始升级。
升级完成后,取出MicroSD卡,主板自动重启,完成整个升级固件的流程。
本章介绍 Linux SDK 的编译环境搭建
注意:
(1)推荐在 X86_64 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
(2)使用普通用户进行编译,不要使用 root 用户权限进行编译。
首先准备一个空文件夹用于存放 SDK,建议在 home 目录下,本文以~/proj为例
不要在虚拟机共享文件夹以及非英文目录存放、解压SDK,避免产生不必要的错误
获取 SDK 需要先安装:
方法一(推荐)
由于 Firefly_Linux_SDK 源码包比较大,部分用户电脑不支持4G以上文件或单个文件网络传输较慢, 所以我们采用分卷压缩的方法来打包 SDK。用户可以通过如下方式获取 Firefly_Linux_SDK 源码包:Firefly_Linux_SDK源码包
下载完成后先验证一下 MD5 码:
确认无误后,就可以解压:
方法二
通过 repo 拉取代码,此方法对网络要求较高,有条件可以使用
可选择获取完整 SDK 或者 BSP:
mkdir ~/proj/rk356x_linux_release_v1.3.0b_20221213/
cd ~/proj/rk356x_linux_release_v1.3.0b_20221213/
## 完整 SDK
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux_release.xml
## BSP ( 只包含基础仓库和编译工具 )
## BSP 包括 device/rockchip 、docs 、 kernel 、 u-boot 、 rkbin 、 tools 和交叉编译链
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux_bsp_release.xml
执行如下命令同步代码:
因为网络环境等原因,.repo/repo/repo sync -c --no-tags 命令更新代码可能会失败,可多次反复执行。
方法一:
在 PC 中自行安装环境
方法二:使用 Docker
使用 dockerfile 创建容器,在容器中进行编译,完美解决编译环境问题,并且与主机环境隔离,互不影响。
首先在主机中安装 docker,请参考:安装教程
创建镜像
镜像创建完毕后,创建容器并启动
现在就可以在容器中进行 SDK 的编译了。
退出容器、重启容器的方法:
本章介绍 Ubuntu 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
不同板型的配置文件存放在device/rockchip/rk356x/目录下
回到 SDK 根目录执行build.sh选择配置文件:
配置文件会链接到 device/rockchip/.BoardConfig.mk,检查该文件可以验证是否配置成功。
相关配置介绍:
在 device/rockchip/rk356x/ 目录下,除了aio-3568j-ubuntu.mk之外,还有其他不同配件搭配的配置文件
配置文件的名称中会标明所使用的屏幕和摄像头。如果没有标明屏幕,说明使用的是默认 HDMI 显示;如果没有标明摄像头,说明使用的是默认单目摄像头
注意:AIO-3568J 硬件版本为V1.3及往后版本方可支持使用HDMI TO MIPI_CSI 驱动板。
选择好配置文件后,执行build.sh来使其生效:
下载根文件系统:Ubuntu 根文件系统(64位),放到 SDK 路径下
解压文件
Linux SDK v1.2.4a 及之后版本采用了 extboot, 编译内核请执行./build.sh extboot
生成的文件为 SDK/kernel/extboot.img,取代之前的 boot.img
如何查看版本:
版本格式为 vx.x.xx,例如 v1.2.4a
固件文件名称中存在版本号(…_vx.x.xx_日期.img)
Buildroot 使用cat /etc/version获取版本(rk356x_linux_release_日期_vx.x.xx.xml)
Ubuntu 使用ffgo version获取版本(rk356x_linux_release_日期_vx.x.xx.xml)
SDK 中可以在 SDK 根目录通过命令查看:ls -l .repo/manifests/rk356x_linux_release.xml
如果上述方法找不到格式为 vx.x.xx 的版本,说明是旧版本,不支持 extboot
不要将 extboot.img 烧录进旧版本固件!
除此之外,extboot ubuntu 还支持以安装包的形式更新内核,详情查看Ubuntu 使用手册
编译 recovery
更新各部分镜像链接到 rockdev/ 目录:
打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。
RK 固件,是以 Rockchip 专有格式打包的固件,使用 Rockchip 提供的工具可以烧写到 eMMC 或者 SD 卡中(注:若无特殊说明,WIKI 上提及的固件默认为 RK 固件)。
RAW 固件,是一种能以逐位复制的方式烧写到存储设备的固件,是存储设备的原始映像。不同于 RK 固件,目前仅支持通过 Etcher 工具烧写至 SD 卡启动。
parameter.txt 文件中包含了固件的分区信息,以 parameter-ubuntu-fit.txt 为例:
路径:device/rockchip/rk356x/parameter-ubuntu-fit.txt
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00c00000@0x00038000(rootfs),-@0x00c38000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。
package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。
路径:tools/linux/Linux_Pack_Firmware/rockdev/rk356x-ubuntu-package-file
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_yocto_kirkstone_release.xml
.repo/repo/repo sync -c
Yocto 项目提供了一些可用于不 layer 的映像。下表列出目前支持构建的映像和相关配方。
映像名字 | 描述 | 提供的layer |
---|---|---|
core-image-minimal | A small image that only allows a device to boot | Poky |
core-image-minimal-xfce | A XFCE minimal demo image | meta-openembedded/meta-xfce |
core-image-sato | Image with Sato, a mobile environment and visual style for mobile devices. The image supports X11 with a Sato theme, Pimlico applications, and contains terminal, editor, and file manager | Poky |
core-image-weston | A very basic Wayland image with a terminal | Poky |
core-image-x11 | A very basic X11 image with a terminal | Poky |
使用 bitbake 命令构建的过程需要保证网络连接正常,如果是中国内陆客户需要保证能 ping 通外网
注意:如果在已经进行了完整编译一次 core-image 的基础上,需要更换编译的 core-image recipes 。需要将当前编译过 core-image 的清理掉,再开始编译新的 core-image 。
例如:当前编译的是 core-image-minimal 。需要更换成 core-image-sato 。
修改文件/path/to/yocto/meta-rockchip/conf/machine/firefly-rk356x.conf 中的 BB_NUMBER_THREADS 和 PARALLEL_MAKE 变量配置。若线程数量设置过大可能会导致机器内存不足,导致编译失败。请根据编译机器的配置来设置编译速度。
BB_NUMBER_THREADS: The maximum number of threads BitBake simultaneously executes.
BB_NUMBER_PARSE_THREADS: The number of threads BitBake uses during parsing.
PARALLEL_MAKE: Extra options passed to the make command during the do_compile task in order to specify parallel compilation on the local build host.
PARALLEL_MAKEINST: Extra options passed to the make command during the do_install task in order to specify parallel installation on the local build host.
从根本上说,BitBake 是一个通用任务执行引擎,它允许 shell 和 Python 任务高效并行运行,同时在复杂的任务间依赖约束下工作。 BitBake 的主要用户之一,OpenEmbedded,利用这个核心并使用面向任务的方法构建嵌入式 Linux 软件堆栈。更多详细使用方法请查看《bitbake-user-manual》。
Bitbake paramater | 描述 |
---|---|
-c fetch | 拉取目标所需要的代码 |
-c clean | 清除目标的输出文件 |
-c cleanall | 删除目标所有输出文件、共享高速缓存(shared state cache)和源代码 |
-c compile -f | 使用此选项可在部署映像后强制重新编译,但不建议使用,除非 Yocto Project 不知道目标代码已经发生改变 |
-c listtasks | 列出目标定义的所有 target |
编译生成的固件位于目录/build/tmp/deploy/images//
分区烧写适用于调试阶段,固件验证请使用下文的统一固件烧写
rootfs 不支持单独烧写,需要打包完整固件再烧写
编译生成的固件位于目录/build/tmp/deploy/images//,待下载的文件为.wic与update.img,进入loader模式后执行如下命令:
固件默认登录账号为:root,密码为:firefly 。固件含有普通用户账号名称为:firefly ,密码为:firefly 。
注意:如果客户在 Windows PC 上开发,使用 RKdevtool 直接烧录 update.img 即可,不需要烧录 .wic。但是要注意一点是 update.img 是一个链接文件,实际得选择链接文件所指向的实际文件。
Yocto Project 是一个专注于嵌入式 Linux® 操作系统开发的开源协作项目,它提供灵活的工具集和开发环境,允许全球的嵌入式设备开发人员通过共享技术,软件堆栈,配置和用于创建这些定制的Linux映像的最佳实践进行协作。有关 Yocto 项目的更多信息,请参阅 Yocto Project 官网:www.yoctoproject.org/。 Yocto Project 官网上有 Yocto Project Reference Manual 和 Yocto Project Overview 等相关文档详细描述了如何构建系统。
layer | 路径 | 优先级(数字越大优先级越高) | 描述 |
---|---|---|---|
meta-oe | meta-openembedded/meta-oe | 6 | contains a large amount of additional recipes |
meta-python | meta-openembedded/meta-python | 7 | Provide Python recipes |
meta-qt5 | meta-qt5 | 7 | Provides QT5 recipes |
meta-clang | meta-clang | 7 | clang compiler |
meta-rockchip | meta-rockchip | 9 | Rockchip board level support available |
meta | meta | 5 | Contains the OpenEmbedded-Core metadata |
meta-poky | meta-poky | 5 | Holds the configuration for the Poky reference distribution |
meta-yocto-bsp | meta-yocto-bsp | 5 | Configuration for the Yocto Project reference hardware board support package. |
meta-chromium | meta-chromium | 7 | Provide chromium browser recipe |
本章介绍 Debian 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
Debian 固件的编译方法和 Ubuntu 的唯一区别是使用的文件系统不一样,其他步骤包括配置文件完全一致
因此请参考 编译 Ubuntu 固件
下面只介绍不同点,文件系统的替换
下载根文件系统:Debian 根文件系统(64位),放到 SDK 路径下
解压文件
之后按照正常编译 Ubuntu 固件的步骤执行即可
本章介绍 Buildroot 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
不同板型的配置文件存放在device/rockchip/rk356x/目录下
回到 SDK 根目录执行build.sh选择配置文件:
配置文件会链接到 device/rockchip/.BoardConfig.mk,检查该文件可以验证是否配置成功。
相关配置介绍:
在 device/rockchip/rk356x/ 目录下,除了aio-3568j-buildroot.mk之外,还有其他不同配件搭配的配置文件
配置文件的名称中会标明所使用的屏幕和摄像头。如果没有标明屏幕,说明使用的是默认 HDMI 显示;如果没有标明摄像头,说明使用的是默认单目摄像头
选择好配置文件后,执行build.sh来使其生效:
编译 kernel
注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用
更新各部分镜像链接到 rockdev/ 目录:
打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。
parameter.txt 文件中包含了固件的分区信息,以 parameter-buildroot-fit.txt 为例:
路径:device/rockchip/rk356x/parameter-buildroot-fit.txt
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00040000@0x00038000(oem),0x00c00000@0x00078000(rootfs),-@0x00c78000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。
package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。
路径:tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
本章介绍 Linux SDK 的编译环境搭建
注意:
(1)推荐在 X86_64 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
(2)使用普通用户进行编译,不要使用 root 用户权限进行编译。
首先准备一个空文件夹用于存放 SDK,建议在 home 目录下,本文以~/proj为例
不要在虚拟机共享文件夹以及非英文目录存放、解压SDK,避免产生不必要的错误
获取 SDK 需要先安装:
方法一(推荐)
由于 Firefly_Linux_SDK 源码包比较大,部分用户电脑不支持4G以上文件或单个文件网络传输较慢, 所以我们采用分卷压缩的方法来打包 SDK。用户可以通过如下方式获取 Firefly_Linux_SDK 源码包:rk356x_linux5.10_release_20240319_v1.4.0b
下载完成后,提取 SDK:
# 创建 SDK 目录
mkdir ~/proj/rk356x_sdk-linux5.10
cd ~/proj/rk356x_sdk-linux5.10
## 完整 SDK
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux5.10_release.xml
## BSP ( 只包含基础仓库和编译工具 )
## BSP 包括 device/rockchip 、docs 、 kernel 、 u-boot 、 rkbin 、 tools 和交叉编译链
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux5.10_bsp_release.xml
方法一:
在 PC 中自行安装环境:
方法二:使用 Docker
使用 dockerfile 创建容器,在容器中进行编译,完美解决编译环境问题,并且与主机环境隔离,互不影响。
首先在主机中安装 docker,请参考:安装教程
创建镜像
镜像创建完毕后,创建容器并启动
现在就可以在容器中进行 SDK 的编译了。
退出容器、重启容器的方法:
本章介绍 Ubuntu 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
不同板型的配置文件存放在device/rockchip/rk3566_rk3568/目录下
回到 SDK 根目录执行build.sh选择配置文件:
配置文件会链接到 output/defconfig,检查该文件可以验证是否配置成功。
相关配置介绍:
在 device/rockchip/rk3566_rk3568/ 目录下,除了firefly_rk3568_aio-3568j_ubuntu_defconfig之外,还有其他不同配件搭配的配置文件
配置文件的名称中会标明所使用的屏幕和摄像头。如果没有标明屏幕,说明使用的是默认 HDMI 显示;如果没有标明摄像头,说明使用的是默认单目摄像头
下载根文件系统:Ubuntu 根文件系统(64位),放到 SDK 路径下
解压文件
全自动编译会执行所有编译、打包操作,直接生成 RK 固件。
编译 kernel
注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用
parameter.txt 文件中包含了固件的分区信息,以 parameter-ubuntu-fit.txt 为例:
路径:device/rockchip/rk3566_rk3568/parameter-ubuntu-fit.txt
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
GROW_ALIGN: 0
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00040000@0x00008000(boot:bootable),0x00020000@0x00048000(recovery),0x00010000@0x00068000(backup),0x00c00000@0x00078000(rootfs),-@0x00c78000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。单位是块,每块 512 字节。
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_yocto_kirkstone_release.xml
.repo/repo/repo sync -c
Yocto 项目提供了一些可用于不 layer 的映像。下表列出目前支持构建的映像和相关配方。
映像名字 | 描述 | 提供的layer |
---|---|---|
core-image-minimal | A small image that only allows a device to boot | Poky |
core-image-minimal-xfce | A XFCE minimal demo image | meta-openembedded/meta-xfce |
core-image-sato | Image with Sato, a mobile environment and visual style for mobile devices. The image supports X11 with a Sato theme, Pimlico applications, and contains terminal, editor, and file manager | Poky |
core-image-weston | A very basic Wayland image with a terminal | Poky |
core-image-x11 | A very basic X11 image with a terminal | Poky |
使用 bitbake 命令构建的过程需要保证网络连接正常,如果是中国内陆客户需要保证能 ping 通外网
注意:如果在已经进行了完整编译一次 core-image 的基础上,需要更换编译的 core-image recipes 。需要将当前编译过 core-image 的清理掉,再开始编译新的 core-image 。
例如:当前编译的是 core-image-minimal 。需要更换成 core-image-sato 。
修改文件/path/to/yocto/meta-rockchip/conf/machine/firefly-rk356x-kernel5-10.conf 中的 BB_NUMBER_THREADS 和 PARALLEL_MAKE 变量配置。若线程数量设置过大可能会导致机器内存不足,导致编译失败。请根据编译机器的配置来设置编译速度。
BB_NUMBER_THREADS: The maximum number of threads BitBake simultaneously executes.
BB_NUMBER_PARSE_THREADS: The number of threads BitBake uses during parsing.
PARALLEL_MAKE: Extra options passed to the make command during the do_compile task in order to specify parallel compilation on the local build host.
PARALLEL_MAKEINST: Extra options passed to the make command during the do_install task in order to specify parallel installation on the local build host.
从根本上说,BitBake 是一个通用任务执行引擎,它允许 shell 和 Python 任务高效并行运行,同时在复杂的任务间依赖约束下工作。 BitBake 的主要用户之一,OpenEmbedded,利用这个核心并使用面向任务的方法构建嵌入式 Linux 软件堆栈。更多详细使用方法请查看《bitbake-user-manual》。
Bitbake paramater | 描述 |
---|---|
-c fetch | 拉取目标所需要的代码 |
-c clean | 清除目标的输出文件 |
-c cleanall | 删除目标所有输出文件、共享高速缓存(shared state cache)和源代码 |
-c compile -f | 使用此选项可在部署映像后强制重新编译,但不建议使用,除非 Yocto Project 不知道目标代码已经发生改变 |
-c listtasks | 列出目标定义的所有 target |
编译生成的固件位于目录/build/tmp/deploy/images//
分区烧写适用于调试阶段,固件验证请使用下文的统一固件烧写
rootfs 不支持单独烧写,需要打包完整固件再烧写
编译生成的固件位于目录/build/tmp/deploy/images//,待下载的文件为.wic与update.img,进入loader模式后执行如下命令:
固件默认登录账号为:root,密码为:firefly 。固件含有普通用户账号名称为:firefly ,密码为:firefly 。
注意:如果客户在 Windows PC 上开发,使用 RKdevtool 直接烧录 update.img 即可,不需要烧录 .wic。但是要注意一点是 update.img 是一个链接文件,实际得选择链接文件所指向的实际文件。
Yocto Project 是一个专注于嵌入式 Linux® 操作系统开发的开源协作项目,它提供灵活的工具集和开发环境,允许全球的嵌入式设备开发人员通过共享技术,软件堆栈,配置和用于创建这些定制的Linux映像的最佳实践进行协作。有关 Yocto 项目的更多信息,请参阅 Yocto Project 官网:www.yoctoproject.org/。 Yocto Project 官网上有 Yocto Project Reference Manual 和 Yocto Project Overview 等相关文档详细描述了如何构建系统。
layer | 路径 | 优先级(数字越大优先级越高) | 描述 |
---|---|---|---|
meta-oe | meta-openembedded/meta-oe | 6 | contains a large amount of additional recipes |
meta-python | meta-openembedded/meta-python | 7 | Provide Python recipes |
meta-qt5 | meta-qt5 | 7 | Provides QT5 recipes |
meta-clang | meta-clang | 7 | clang compiler |
meta-rockchip | meta-rockchip | 9 | Rockchip board level support available |
meta | meta | 5 | Contains the OpenEmbedded-Core metadata |
meta-poky | meta-poky | 5 | Holds the configuration for the Poky reference distribution |
meta-yocto-bsp | meta-yocto-bsp | 5 | Configuration for the Yocto Project reference hardware board support package. |
meta-chromium | meta-chromium | 7 | Provide chromium browser recipe |
本章介绍 Buildroot 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
不同板型的配置文件存放在device/rockchip/rk3566_rk3568/目录下
回到 SDK 根目录执行build.sh选择配置文件:
配置文件会链接到 output/defconfig,检查该文件可以验证是否配置成功。
相关配置介绍:
在 device/rockchip/rk3566_rk3568/ 目录下,除了firefly_rk3568_aio-3568j_buildroot_defconfig之外,还有其他不同配件搭配的配置文件
配置文件的名称中会标明所使用的屏幕和摄像头。如果没有标明屏幕,说明使用的是默认 HDMI 显示;如果没有标明摄像头,说明使用的是默认单目摄像头
选择好配置文件后,执行build.sh来使其生效:
全自动编译会执行所有编译、打包操作,生成完整固件。
完整固件会保存到 output/update/ 目录。
全自动编译会执行所有编译、打包操作,生成完整固件。
注意:Firefly kernel 没有开启全部的内核功能,有需求请查看Kernel 使用
打包固件,生成的完整固件会保存到 output/update/ 目录。
parameter.txt 文件中包含了固件的分区信息,以 parameter-buildroot-fit.txt 为例:
路径:device/rockchip/rk3566_rk3568/parameter-buildroot-fit.txt
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
GROW_ALIGN: 0
CMDLINE: mtdparts=:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00040000@0x00008000(boot:bootable),0x00020000@0x00048000(recovery),0x00010000@0x00068000(backup),0x00040000@0x00078000(oem),0x00c00000@0x000b8000(rootfs),-@0x00cb8000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。单位是块,每块 512 字节。
AMP(Asymmetric Multi-Processing)系统是一种非对称多核异构系统,即在同一芯片内, 通过分组CPU,并在不同组的CPU内运行不同的系统,通过合理分配任务和资源,AMP系统 可以提供更好的性能表现。
rk3568芯片有Cortex-A55 * 4 RISC-V * 1 两类CPU,四个Cortex-A55核心支持linux(kernel-4.19)、Baremetal(HAL)、RTOS(RT-Thread) , RISC-V支持Baremetal(HAL)。 利用AMP特性,可在Cortex-A55 * 4运行linux, RISC-V * 1作为辅助核心跑裸机系统;也可在Cortex-A55 * 3运行linux, Cortex-A55 * 1作为辅助核心跑裸机或实时系统等多种组合AMP构建。
本章介绍 Linux SDK 的编译环境搭建
注意:
(1)推荐在 X86_64 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
(2)使用普通用户进行编译,不要使用 root 用户权限进行编译。
首先准备一个空文件夹用于存放 SDK,建议在 home 目录下,本文以~/proj为例
不要在虚拟机共享文件夹以及非英文目录存放、解压SDK,避免产生不必要的错误
获取 SDK 需要先安装:
方法一(推荐)
由于 Firefly_Linux_SDK 源码包比较大,部分用户电脑不支持4G以上文件或单个文件网络传输较慢, 所以我们采用分卷压缩的方法来打包 SDK。用户可以通过如下方式获取 Firefly_Linux_SDK 源码包:rk356x_amp_release_20240607_v0.0.1a
下载完成后,提取 SDK:
方法二
通过 repo 拉取代码,此方法对网络要求较高,有条件可以使用
可选择获取完整 SDK 或者 BSP:
# 创建 SDK 目录
mkdir ~/proj/rk356x_amp_sdk
cd ~/proj/rk356x_amp_sdk
## 完整 SDK
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux_amp_release.xml
## BSP ( 只包含基础仓库和编译工具 )
## BSP 包括 device/rockchip 、docs 、 kernel 、 u-boot 、hal、 rt-thread 、 rkbin 、 tools 和交叉编译链
repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git --no-repo-verify -u https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux_amp_bsp_release.xml
执行如下命令同步代码:
因为网络环境等原因,.repo/repo/repo sync -c --no-tags 命令更新代码可能会失败,可多次反复执行。
方法二:使用 Docker
使用 dockerfile 创建容器,在容器中进行编译,完美解决编译环境问题,并且与主机环境隔离,互不影响。
首先在主机中安装 docker,请参考:安装教程
创建一个目录作为 docker 工作目录,例如~/docker/,在其中创建文件dockerfile,内容如下:
镜像创建完毕后,创建容器并启动
现在就可以在容器中进行 SDK 的编译了。
退出容器、重启容器的方法:
本章介绍 Ubuntu 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
不同板型的配置文件存放在device/rockchip/rk356x/目录下
回到 SDK 根目录执行build.sh选择配置文件:
下载根文件系统:Ubuntu 根文件系统(64位),放到 SDK 路径下
解压文件
将根文件系统放到 ubuntu_rootfs/ 目录下
统一编译脚本工具支持一键编译及打包U-Boot、Kernel、HAL、RT-Thread、ROOTFS等,并生成对应的 Image镜像。
更新链接
更新各部分镜像链接到 rockdev/ 目录:
打包固件
打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。
parameter.txt 文件中包含了固件的分区信息,以 parameter-amp-ubuntu-fit.txt 为例:
路径:device/rockchip/rk356x/parameter-amp-ubuntu-fit.txt
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00001000@0x00006000(misc),0x00001000@0x00007000(amp),0x00040000@0x00008000(boot:bootable),0x00020000@0x00048000(recovery),0x00010000@0x00068000(backup),0x49dc00@0x00078000(rootfs),-@0x515c00(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。
package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。
路径:tools/linux/Linux_Pack_Firmware/rockdev/rk356x-amp-ubuntu-package-file
本章介绍 Buildroot 固件的编译流程,推荐在 Ubuntu 18.04 系统环境下进行开发,若使用其它系统版本,可能需要对编译环境做相应调整。
不同板型的配置文件存放在device/rockchip/rk356x/目录下
回到 SDK 根目录执行build.sh选择配置文件:
RK3568 支持 Linux 、HAL 、RT-Thread的 AMP 混合架构设计,使得不同的 CPU 可以运行不同的系统,以满足灵活 的产品设计需求。该 SDK 目前默认使用 Linux RT-Thread 的混合结构模型,其中运行 Linux 的 CPU 为主核,运行 rtt 的 CPU 为从核;0~2核心运行Linux,3核心运行RT-Thread。
SDK 的统一编译配置脚本位于device/rockchip/rk356x/目录下,编译配置脚本内容包括U-Boot、Kernel、 HAL、RT-Thread的配置,以及AMP相关的CPU分配,内存分配等配置。用户可以根据需求增加或者修改 配置脚本文件,以满足自己的编译需求。主要的AMP配置文件如下:
使用rockdev/amp/amp.its配置文件打包出rockdev/amp/amp.img
hal或rt-thread默认使用uart4作为调试串口,波特率为115200
更加详细说明请阅读SDK/docs/amp/manuals/rk3568下的amp相关文档
更新各部分镜像链接到 rockdev/ 目录:
parameter.txt 文件中包含了固件的分区信息,以 parameter-amp-buildroot-fit.txt 为例:
路径:device/rockchip/rk356x/parameter-amp-buildroot-fit.txt
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00040000@0x00038000(oem),0x00c00000@0x00078000(rootfs),-@0x00c78000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。
package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。
路径:tools/linux/Linux_Pack_Firmware/rockdev/rk356x-amp-package-file
Firefly Linux 开发指南
本章节介绍如何把固件烧录到 SSD,并从 SSD 启动系统。
准备工作:
RK356x 平台
良好的 M.2 SSD 或者 SATA SSD
良好的 Type-C 数据线
更新到最新的 Linux SDK,进入 u-boot 目录,确保有以下提交:
1、进入 u-boot 目录,执行如下命令编译与打包引导固件:
生成的固件有rk356x_spl_loader_*.bin与uboot.img。
2、RK356x 进入 Maskrom 模式,把引导固件烧录到 Nor Flash(默认):
Windows 平台下选中Loader、Parameter与Uboot并烧录:
Linux 平台下烧录Loader、Parameter与Uboot:
然后重新烧录 boot.img。
5、烧录固件成功后重启即可正常启动:
可以看到userdata分区挂载的设备为/dev/nvme0n1p7!
SATA SSD 启动的操作步骤与 M.2 SSD 启动类似,不同点如下:
1、编译引导固件命令如下:
由于 Maskrom 不支持从 SSD 加载引导固件,因此如果没有 Nor Flash 需要把引导固件烧录到 eMMC 存储器。
如果 eMMC 存储器本身有固件,那么直接进入 Loader 模式烧录rk356x_spl_loader_*.bin与uboot.img即可!
如果 eMMC 存储器本身没有固件,那么 Maskrom 模式是默认烧录到 eMMC 存储器的。
ADB,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统日志,上传下载文件,安装应用等。
使用 adb时,你需要:
AIO-3568J用双公头USB数据线连接设备和主机;
基于你的主机系统安装 adb 驱动和命令。(后面会介绍到)
安卓系统还需要:
在开发板上系统中打开设置(Settings) -> 已连接设备(Connected devices) -> Connect to PC
在开发板上系统中打开设置(Settings) -> 关于平板电脑(About tablet) -> 连续点击7下版本号(Build number)
在开发板上进入设置(Settings) -> 系统(System) -> 高级(Advance) -> 开发者选项(Developer options),勾上 “USB 调试(USB debugging)” 选项(默认已勾选),Root 授权(Root access)勾选带有ADB的选项;
当设备端状态栏提示 USB debugging connected 时,便可进行调试:
设置 -> 开发者选项 -> 网络 ADB 调试
查看开发板 IP 地址,PC 端通过网络访问:
如果一切正常,就可以进入 adb shell,在设备上面运行命令。
列出所有连接设备及其序列号:
adb bugreport 用于错误报告,里面包含大量有用的信息。
让 ADB 的设备端切换到 root 权限模式,这样 adb remount 等需要 root 权限的命令才会成功。
如果安装成功,工具会返回成功提示 Success;失败的话,一般是以下几种情况:
INSTALL_FAILED_ALREADY_EXISTS: 此时需要用 -r 参数来重新安装。
INSTALL_FAILED_SIGNATURE_ERROR: 应用的签名不一致,可能是发布版和调试版签名不同所致。如果确认 APK 文件签名正常,可以用 adb uninstall 命令先卸载旧的应用,然后再安装。
INSTALL_FAILED_INSUFFICIENT_STORAGE: 存储空间不足,需要检查设备存储情况。
前面是 apk 文件,后面则是对应的包名称。
编译 Android 对机器的配置要求较高:
64 位 CPU
16GB 物理内存 交换内存
250GB 空闲的磁盘空间
建议使用 Ubuntu 18.04 操作系统
Ubuntu 14.04 软件包安装参考:
此时视报错信息去安装缺少的软件包即可
运行 Android11.0,Core-3568J需要满足如下条件:
DDR至少需要 2GB
eMMC至少需要 16GB
SDK 源码与 bundle 压缩包均存放在云盘中。
由于 SDK 较大,可以去下载页面选择云盘下载 Firefly-RK356X_Android11.0_git
下载完成后,在解压前先校验下 MD5 码:
下载 SDK 后,从 gitlab 处更新代码的方法:
随着 SDK 的更新,bundle 也会随之越来越大,可以去下载页面选择云盘下载 bundle。
注意:若是第一次编译该Android Product,请使用公版编译命令进行一次完整编译
修改 dts
编译
注意:AIO-3568J 硬件版本为V1.3及往后版本方可支持使用HDMI TO MIPI_CSI 驱动板。
编译前执行如下命令配置环境变量:
注意:进行内核debug的时候,单编译生成boot.img如果出现运行错误,可参考FAQs
打包完成后将在rockdev/Image-XXX/ 目录下生成统一固件: product名XXX_XXX_日期XXX.img
在 Windows 下打包统一固件 update.img 也很简单,将编译生成的文件拷贝到 AndroidTool 的 rockdevImage 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdevImage 目录里。
Firefly Android 开发指南
FireflyApi2 使用手册
AIO-3568J 开发板上的 AD 接口有两种,分别为:温度传感器 (Temperature Sensor)、逐次逼近ADC (Successive Approximation Register)。其中:
TS-ADC(Temperature Sensor):支持两通道,时钟频率必须低于800KHZ
SAR-ADC(Successive Approximation Register):支持六通道单端10位的SAR-ADC,时钟频率必须小于13MHZ。
内核采用工业 I/O 子系统来控制 ADC,该子系统主要为 AD 转换或者 DA 转换的传感器设计。 下面以 SAR-ADC 为例子,介绍 ADC 的基本配置方法。
驱动需要获取ADC通道来使用时,需要对驱动的加载时间进行控制,必须要在saradc初始化之后。saradc是使用module_platform_driver()进行平台设备驱动注册,最终调用的是module_init()。所以用户的驱动加载函数只需使用比module_init()优先级低的,例如:late_initcall(),就能保证驱动的加载的时间比saradc初始化时间晚,可避免出错。
RK3566/RK3568平台仅有一个标准物理mipi csi2 dphy,可以工作在两个模式: full mode 和split mode, 拆分为csi2_dphy0/csi2_dphy1/csi2_dphy2三个逻辑dphy(参见rk3568.dtsi)
仅使用csi2_dphy0,csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用;
data lane最大4 lanes;
最大速率2.5Gbps/lane;
仅使用csi2_dphy1和csi2_dphy2, 与csi2_dphy0互斥,不可同时使用;
csi2_dphy1和csi2_dphy2可同时使用;
csi2_dphy1和csi2_dphy2各自的data lane最大是2 lanes;
csi2_dphy1对应物理dphy的lane0/lane1;
csi2_dphy2对应物理dphy的lane2/lane3;
最大速率2.5Gbps/lane
简单点来讲,如果用单目摄像头我们可以配置full mode,若使用双目摄像头我们可以配置split mode
链接关系: sensor->csi2_dphy0->isp
我们需要根据板子原理图的MIPI CSI接口找到sensor是挂在哪个I2C总线上,然后在对应的I2C节点配置camera节点,正确配置camera模组的I2C设备地址、引脚等属性。如下Core-3568J的xc7160配置:
csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用。另外需要使能csi2_dphy_hw节点
其中rkisp_vir0节点的remote-endpoint指向csidphy_out
链接关系:
sensor1->csi_dphy1->isp_vir0
sensor2->csi_dphy2->mipi_csi2->vicap->isp_vir1
我们需要根据板子原理图的MIPI CSI接口找到两个sensor是挂在哪个I2C总线上,然后在对应的I2C节点配置两个camera节点,正确配置camera模组的I2C设备地址、引脚等属性。如下Core-3568J的gc2053/gc2093配置:
csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用
2.4. 软件相关目录
firefly已经配置好相应的dts,单目摄像头CAM-8MS1M和双目摄像头CAM-2MS2MF使用互斥,只需包含相应的dtsi文件即可使用单目摄像头CAM-8MS1M或双目摄像头CAM-2MS2MF
Linux 已经配置好各种组合的 dts 和 mk 文件,编译前按需选择,不用修改文件
Android 需要如下修改:
dts的配置默认使用单目摄像头
使用v4l2-ctl抓取camera数据帧
v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=4 --set-selection=target=crop,flags=0,top=0,left=0,width=1920,height=1080 --stream-to=/data/out.yuv
把out.yuv文件拷贝出来通过ubuntu去查看
Android系统使用camera的apk打开摄像头需要配置camera3_profiles*.xml,具体可参考Android SDK hardware/rockchip/camera/etc/camera目录下的文件
Buildroot直接使用qcamera打开摄像头,可进行拍摄与录制,详细参考 Buildroot使用手册
Ubuntu 单目摄像头预览可以使用如下脚本:
对于双目摄像头预览,则使用如下脚本:
若使用raw摄像头sensor,请留意isp21目录所支持的iq文件
CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。CAN总线是一种在汽车上广泛采用的总线协议,被设计作为汽车环境中的微控制器通讯。 如果想了解更多的内容可以参考CAN应用报告。
注意: RK3568的CAN FD位填充功能与CAN FD标准协议不一样,不推荐使用CAN FD。
CAN模块之间接线:CAN_H接CAN_H,CAN_L接CAN_L。
使用 candump 和 cansend 工具进行收发报文测试即可,将工具push到/system/bin/目录下执行。工具可以在 官方 或者 github 下载。
总结调试过程中遇到的几个问题及解决方法:
检查总线 CAN_H 和 CAN_L, 杜邦线是否松动或者接反。
如果CAN的比特率1M建议修改CAN时钟到300M, 信号更稳定。低于1M比特率的, 时钟设置200M就可以。
CAN时钟频率修改方法参考如下:
AIO-3568J开发板上有 6 个片上 I2C 控制器,各个 I2C 的使用情况如下表:
Port | Pin name | Device |
---|---|---|
I2C0 | GPIO0_B1/I2C0_SCL GPIO0_B2/I2C0_SDA |
RK809 |
I2C1 | GPIO0_B3/I2C1_SCL GPIO0_B4/I2C1_SDA |
TP |
I2C2_M0 | GPIO0_B5/I2C2_SCL_M0 GPIO0_B6/I2C2_SDA_M0 |
复用为其他功能 |
I2C2_M1 | GPIO4_B5/I2C2_SCL_M1 GPIO4_B4/I2C2_SDA_M1 |
复用为其他功能 |
I2C3_M0 | GPIO1_A1/I2C3_SCL_M0 GPIO1_A0/I2C3_SDA_M0 |
BAT |
I2C3_M1 | GPIO3_B5/I2C3_SCL_M1 GPIO3_B6/I2C3_SDA_M1 |
复用为其他功能 |
I2C4_M0 | GPIO4_B3/I2C4_SCL_M0 GPIO4_B2/I2C4_SDA_M0 |
TP |
I2C4_M1 | GPIO2_B2/I2C4_SCL_M1 GPIO2_B1/I2C4_SDA_M1 |
复用为其他功能 |
I2C5_M0 | GPIO3_B3/I2C5_SCL_M0 GPIO3_B4/I2C5_SDA_M0 |
MC3230/HYM8563 |
I2C5_M1 | GPIO4_C7/I2C5_SCL_M1 GPIO4_D0/I2C5_SDA_M1 |
复用为其他功能 |
本文主要描述如何在该开发板上配置 I2C。
配置 I2C 可分为两大步骤:
定义和注册 I2C 设备
定义和注册 I2C 驱动
下面以配置 GSL3680 为例。
A1: 请检查硬件上拉是否给电。
A2: 返回值为 -6 表示为 NACK 错误,即对方设备无应答响应,这种情况一般为外设的问题,常见的有以下几种情况:
I2C 地址错误,解决方法是测量 I2C 波形,确认是否 I2C 设备地址错误;
I2C slave 设备不处于正常工作状态,比如未给电,错误的上电时序等;
时序不符合 I2C slave 设备所要求也会产生 Nack 信号。
A3: 这时需要调用两次 i2c_transfer, I2C read 拆分成两次,修改如下:
Core-3568J 开发板上使用红外收发传感器 IR (在ADC接口下面)实现遥控功能,在 IR 接口处接上红外接收器。本文主要描述在开发板上如何配置红外遥控器。
其配置步骤可分为两个部分:
修改内核驱动:内核空间修改,Linux 和 Android 都要修改这部分的内容。
修改键值映射:用户空间修改(仅限 Android 系统)。
在 Linux 内核中,IR 驱动仅支持 NEC 编码格式。以下是在内核中配置红外遥控的方法。
Android系统kernel所涉及到的文件:
键值表结构体数组和配置参考如下:
注:rockchip,key_table第一列为键值,第二列为要响应的按键码。
在rockchip_pwm_remotectl.c驱动中的 remotectl_do_something 函数获取用户码和键值:
保存后,按照固件编译的方法编译kernel即可
注:通过 ADB 修改该文件重启后即可生效。
如下图是通过按红外遥控器按钮,所产生的波形,主要由 head, Control, information, signed free 这四部分组成,具体可以参考 RC6 Protocol。
这里定义了LCD的控制引脚:
NAME | GPIO | GPIO_ACTIVE |
---|---|---|
enable-gpios(LCD_EN) | GPIO0_C7 | GPIO_ACTIVE_HIGH |
reset-gpios(LCD_RST) | GPIO0_C5 | GPIO_ACTIVE_LOW |
在硬件信号上LCD_EN引脚高电平有效,而LCD_RST引脚是低电平有效,具体的引脚配置请参考《GPIO 使用》一节。需要注意的是AIO-3568J的dsi1中,LCD_EN:(PCA_IO0_7)使用的是PCA9555扩展芯片引出来的gpio,需要PCA9555 驱动起来以后才能控制该gpio。
在DTS文件中配置了背光信息,如下:
enable-gpios:背光使能脚,高电平有效。
pwms属性:配置PWM,范例里面默认使用pwm4,50000ns是周期(20 KHz),pwm为负极性。
brightness-levels属性:配置背光亮度数组,一般以值 255 为一个 scale,当 PWM 设置为正极性时,从 0~255 表示背光为正极,占空比从 0%~100% 变化,255~0 为负极性,占空比从 100%~0% 变化;当 PWM 设置为负极性时,反之。
default-brightness-level属性:开机时默认背光亮度,范围为0-255。
详细说明可参考以下附件: Rockchip DRM Panel Porting Guide.pdf
这里定义了LCD的电源控制引脚:
NAME | GPIO | GPIO_ACTIVE |
---|---|---|
vcc3v3_lcd_edp (LCD_EN) | GPIO1_B1 | GPIO_ACTIVE_HIGH |
enable-gpios(BL_EN) | GPIO1_A4 | GPIO_ACTIVE_LOW |
hpd-gpios(EDP_HPD) | GPIO0_C2 | GPIO_ACTIVE_HIGH |
具体的引脚配置请参考《GPIO 使用》一节。
因为背光接口是公用的,所以可以参考上述MIPI的配置方法。
不同于MIPI屏,EDP屏对上下电时序没有那么高的要求,当然主要还是要看调试屏幕的上下电时序图来配置,示例EDP屏只需要如下配置Display-Timings:
详细说明可参考以下附件: Rockchip DRM Panel Porting Guide.pdf
此设备的双以太网口分内网和外网。 内网又称局域网(Local Area Network,LAN,是指在某一区域内由多台计算机以及网络设备构成的网络,无法连通外部网络;外网为广域网,又称公网,是连接不同地区局域网或城域网计算机通信的远程网,可以连通外部网络,如访问百度,搜狗。
eth0 : 副网口,用于内网
eth1 : 主网口,用于外网
GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。 所有的 GPIO 在上电后的初始状态都是输入模式,可以通过软件设为上拉或下拉,也可以设置为中断脚,驱动强度都是可编程的,其核心是填充 GPIO bank 的方法和参数,并调用 gpiochip_add 注册到内核中。
GPIO 口除了通用输入输出、中断功能外,还可能有其它复用功能,如GPIO0_B4, 就有如下几个功能:
func0 | func1 | func2 | func3 | func4 |
---|---|---|---|---|
GPIO0_B4 | I2C1_SDA | CAN0_RX_M0 | PCIE20_BUTTONRSTn | MCU_JTAG_TCK |
那么在使用作GPIO口时,就需要注意是否被复用为其他功能了,这里可以用io命令查看iomux来判断是否复用,在调试方法的章节中有相关说明,这里不多作说明。 假如通过io命令发现GPIO0_B4有复用作I2C1_SDA,使用GPIO0_B4作gpio或者其他功能时就需要将I2C1 disabled掉。
查规格表可知,I2C4_SDA_M0 与 I2C4_SCL_M0 的功能定义如下:
Pad# | func0 | func1 | func2 | func3 | func4 | func5 |
---|---|---|---|---|---|---|
I2C4_SDA_M0/GPIO4_B2 | GPIO4_B2 | I2C4_SDA | EBC_VCOM | GMAC1_RXER_M1 | SPI3_MOSI_M0 | I2S2_SDI_M1 |
I2C4_SCL_M0/GPIO4_B3 | GPIO4_B3 | I2C4_SDA | EBC_GDOE | ETH1_REFCLKO_25MM1 | SPI3_CLK_M0 | I2S2_SDO_M1 |
A1: 当使用 GPIO request 时候,会将该 PIN 的 MUX 值强制切换为 GPIO,所以使用该 PIN 脚为 GPIO 功能的时候确保该 PIN 脚没有被其他模块所使用。
A2: 如果用 IO 命令读某个 GPIO 的寄存器,读出来的值异常,如 0x00000000 或 0xffffffff 等,请确认该 GPIO 的 CLK 是不是被关了,GPIO 的 CLK 是由 CRU 控制,可以通过读取 datasheet 下面 CRU_CLKGATE_CON* 寄存器来查到 CLK 是否开启,如果没有开启可以用 io 命令设置对应的寄存器,从而打开对应的 CLK,打开 CLK 之后应该就可以读到正确的寄存器值了。
A3: 测量该 PIN 脚的电压不对时,如果排除了外部因素,可以确认下该 PIN 所在的 IO 电压源是否正确,以及 IO-Domain 配置是否正确。
A4: 如果使用该 GPIO 时,不会动态的切换输入输出,建议在开始时就设置好 GPIO 输出方向,后面拉高拉低时使用 gpio_set_value() 接口,而不建议使用 gpio_direction_output(), 因为 gpio_direction_output 接口里面有 mutex 锁,对中断上下文调用会有错误异常,且相比 gpio_set_value,gpio_direction_output 所做事情更多,浪费。
AIO-3568J开发板上有 2 个 LED 灯,如下表所示:
LED | Pin name | Pin number |
---|---|---|
Blue | GPIO0_C0 | 16 |
Yellow | PCA_IO1_2 | 510 |
PCA_IO1_2 是从 GPIO 扩展芯片出来的。
可通过使用 LED 设备子系统或者直接操作 GPIO 控制该 LED。
本章主要描述如何配置 PWM。
用户可在其它驱动文件中使用以上步骤生成的 PWM 节点。具体方法如下:
查看注册是否成功,成功则返回接口名和寄存器地址。
dts 配置文件是否打开对应的 PWM。
PWM 所在的 IO 口是否被其他资源占用,可以根据报错的返回值去查看原因。
AIO-3568J开发板采用HYM8563作为RTC(Real Time Clock),HYM8563是一款低功耗CMOS实时时钟/日历芯片,它提供一个可编程的时钟输出,一个中断 输出和一个掉电检测器,所有的地址和数据都通过I2C总线接口串行传递。最大总线速度为 400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动递增
可计时基于 32.768kHz 晶体的秒,分,小时,星期,天,月和年
宽工作电压范围:1.0~5.5V
低休眠电流:典型值为 0.25μA(VDD =3.0V, TA =25°C)
内部集成振荡电容
漏极开路中断引脚
A1: 检查一下 RTC 电池是否正确接入。
AIO-3568J支持UART、RS232、RS485接口
UARTx2
RS485x2
RS232x2
其中开发板的RS232接口由主控的uart3和uart4扩展出来,而UART和RS485则由SPI 桥接/扩展芯片wk2124扩展出来,该芯片特性如下
每个子通道 UART 的波特率、字长、校验格式可以独立设置,最高可以提供 2Mbps 的通信速率
每个子通道具备收/发独立的 256 BYTE FIFO,FIFO 的中断可按用户需求进行编程触发点
具备子串口接收 FIFO 超时中断
支持起始位错误检测
AIO-3568J开发板的串口接口图如下:
RS232详细见下图的红框
RS485详细见下图的红框
UART
详细见下图的红框
用户可以根据不同的接口使用不同的主机的 USB 转串口适配器向开发板的串口收发数据,例如 RS485 的调试步骤如下:
型号:M101014_BE45_A1
尺寸:10.1 寸
分辨率:800x1280
显示接口:MIPI
可视角度:160°
触摸屏:多点电容触摸
官方的MIPI固件默认支持MIPI_DSI1 HDMI显示,MIPI屏连接AIO-3568J的MIPI_DSI1接口,下面是固件的链接:固件链接
注意: 接入HDMI时,HDMI的两边有可能会有黒边的现象,这是因为HDMI作为副屏会根据主屏MIPI的宽高比进行缩放,如果两者的宽高比不一致,就会导致黒边。
注意:如果需要支持 CAM-2MS2M 摄像头模组,需要先做如下修改,再编译。
品牌:SV
ISP:xc7160
Sensor: sc8238
接口: MIPI
像素: 800W(当前仅支持1080P,4K仍在适配中)
品牌:SV
Sensor: gc2053(IR)/gc2093(RGB)
接口: MIPI
像素: 200W
注意: 4G模组和5G模组使用的座子不一样,4G模组使用MINI PCIE接口,5G模组使用M.2(NGFF)接口,购买AIO-3568J主板时请根据所需的模组选择正确的接口座子
型号
EC20-C R2.0 Mini PCIe-C
电源电压
3.3V~ 3.6V, 典型值: 3.3V
工作频段
TDD-LTE: B38/B39/B40/B41
FDD-LTE: B1/B3/B8
WCDMA: B1/B8
TD-SCDMA: B34/B39
GSM: 900/1800 MHz
数据传输
TDD-LTE: Max 130Mbps (DL) Max 35Mbps (UL)
FDD-LTE: Max 150Mbps (DL) Max 50Mbps (UL)
DC-HSPA : Max 42Mbps (DL) Max 5.76Mbps (UL)
UMTS: Max 384Kbps (DL) Max 384Kbps (UL)
TD-SCDMA: Max 4.2Mbps (DL) Max 2.2Mbps (UL)
CDMA: Max 3.1Mbps (DL) Max 1.8Mbps (UL)
EDGE: Max 236.8Kbps (DL) Max 236.8Kbps (UL)
GPRS: Max 85.6Kbps (DL) Max 85.6Kbps (UL)
接口连接器
USB:USB 2.0 高速接口, 480Mbps
数字语音:1个数字语音接口 (可选)
USIM:1.8V/3V
网络指示:×2, NET_STATUS 和 NET_MODE
UART:×1 UART
复位:低电平
PWRKEY:低电平
天线接口:×3 (主天线, 分集天线和GNSS天线接口)
ADC:×2
结构尺寸
51.0mm × 30.0mm × 4.9mm
重量
约 10.5g
认证
CCC/ NAL*/ TA
EC20 模组分带GNSS和不带GNSS两种,Firefly官网售卖的EC20 4G模组是不支持GNSS的,后缀为SNNS,支持GNSS功能的EC20 模组一般带有后缀SGNS,公版固件支持GNSS功能,但是默认关闭,使用方法可参考EC20 GNSS功能章节。
USB 接口连接
Mini-PCIe 接口连接
SIM 卡连接
型号
EC200T-CN Mini PCIe-D
电源电压
3.4V~ 4.3V, 典型值: 3.8V
工作频段
TDD-LTE: B34/B38/B39/B40/B41
FDD-LTE: B1/B3/B5/B8
WCDMA: B1/B5/B8
GSM: 900/1800 MHz
数据传输
TDD-LTE: Max 120Mbps (DL) Max 3Mbps (UL)
FDD-LTE: Max 150Mbps (DL) Max 50Mbps (UL)
DC-HSDPA: Max 21Mbps (DL)
HSDPA: Max 5.76 Mbps (UL)
WCDMA: Max 384Kbps (DL) Max 384Kbps (UL)
EDGE: Max 236.8Kbps (DL) Max 236.8Kbps (UL)
GPRS: Max 85.6Kbps (DL) Max 85.6Kbps (UL)
接口连接器
USB:USB 2.0 高速接口, 480Mbps
数字语音:1个数字语音接口 (可选)
USIM:1.8V/3V
UART:×1 UART
UART_DTR (睡眠控制)
W_DISABLE# (飞行模式控制)
LED_WWAN# (网络状态指示)
PERST# (模块复位)
RI (主机唤醒)
WAKEUP_IN (睡眠控制,低电平有效)
WAKEUP_OUT (睡眠状态指示)
天线接口:×2 (主天线, 分集天线)
结构尺寸
51.0mm × 30.0mm × 4.9mm
重量
约 10.2g
认证
CCC/SRRC/NAL
型号
RM500QGLAB-M20-SGASA
电源电压
3.135~4.4 V , 典型值: 3.7V
发射功率
WCDMA 频段:Class 3(24 dBm 1/-3 dB)
LTE 频段:Class 3(23 dBm ±2 dB)
5G NR 频段:Class 3(23 dBm ±2 dB)
LTE B38/B40/B41/B42/B43 频段 HPUE:Class 2(26 dBm ±2 dB)
5G NR n41/n77/n78/n79 bands HPUE:Class 2(26 dBm 2/-3 dB)
5G NR 特性
支持 3GPP Release 15
调制方式:
256QAM (UL)
256QAM (DL)
SCS 支持 15 kHz 和 30 kHz
正在开发的 5G NR 频段最大带宽支持 20MHz
5G NR n41/n77/n78/n79 最大带宽支持 100 MHz
支持 Option 3x、3a 和 Option 2
NSA TDD:Max 2.5 Gbps (DL) Max 650 Mbps (UL)
SA TDD: Max 2.1 Gbps (DL) Max 900 Mbps (UL)
n41/n77/n78/n79 频段支持上行 2 × 2 MIMO
n1/n2/n3/n7/25/n38/n40/n41/n48/n66/n77/n78/n79 频段支持下行 4 × 4 MIMO
支持 SA 和 NSA 组网模式,所有 5G 频段均支持 SA,n38*/n41/n77/n78/n79 频段支持 NSA
LTE 特性
最大支持 CA Cat 16 FDD 和 TDD
调制方式:
(UL) QPSK、16QAM、64QAM、256QAM*
(DL) QPSK、16QAM、64QAM、256QAM
支持 1.4~20 MHz(3 × CA)射频带宽
LTE: Max 1.0 Gbps (DL) Max 200 Mbps (UL)
B1/B2/B3/B4/B7/B25/B30/B38/B39/B40/B41/B42/B43/B48/B66 频段支持下行 4 × 4 MIMO
UMTS 特性
支持 QPSK、16QAM 和 64QAM 调制
DC-HSDPA:Max 42 Mbps (DL)
HSUPA:Max 5.76 Mbps (UL)
WCDMA:Max (DL/UL) 384 kbps
支持 3GPP R8 DC-HSDPA、HSPA 、HSDPA、HSUPA 和 WCDMA
接口
USB 接口:符合 USB 3.1 和 USB 2.0 规范
(U)SIM 接口:支持Class B(3.0 V)和 Class C(1.8 V)
分集接收天线接口:支持 5G NR/LTE/WCDMA 分集接收
PCIE接口:符合 PCIe Gen3 规范,每个通道传输速率可达 8 Gbps
天线接口:×4 (ANT0、ANT1、ANT2_GNSSL1 和 ANT3 四个天线接口 )
网络协议特性
支持 QMI/NTP*协议
支持 PAP 和 EIRP 协议,通常用于 PPP 连接
内置GNSS
支持GPS、GLONASS、BeiDou、Galileo和QZSS
结构尺寸
(52.0 ±0.15) mm × (30.0 ±0.15) mm × (2.3 ±0.2) mm
重量
约 8.6g
RoHS
符合 EU RoHS 标准
注意:* 表示移远官方正在开发中
公版固件默认支持 EC20 4G 模组、EC200T 4G模组 、RM500Q-GL 5G模组
VCC (红线)、GND (黑线)、TX (白线)、RX(绿线)
将模组的VCC、GND、TX、RX分别接到AIO-3568J UART1(对应节点为/dev/ttysWK2)的3.3V、GND、RX、TX,注意避免接错VCC、GND、TX、RX导致烧坏模组
对于UART的一些定义和说明可以参考Wiki教程《UART 使用》
DELINCOMM系列串口波特率配置为9600,公版固件已经默认配置好,使能GPS后即可使用,详情可以参考如何使能GPS和修改串口配置。
注意:GPS功能会占用到 UART1,若需要用 UART1 作为其他用途,需要将GPS先禁止掉
VCC (白线)、GND (黑线)、TX (蓝线)、RX(绿线)
将模组的VCC、GND、TX、RX分别接到AIO-3568J UART1(对应节点为/dev/ttysWK2)的3.3V、GND、RX、TX,注意避免接错VCC、GND、TX、RX导致烧坏模组
对于UART的一些定义和说明可以参考Wiki教程《UART 使用》
UBLOX模块串口波特率配置为9600,公版固件已经默认配置好,使能GPS后即可使用,详情可以参考如何使能GPS和修改串口配置。
注意:GPS功能会占用到 UART1,若需要用 UART1 作为其他用途,需要将GPS先禁止掉
EC20模组支持GPS、GLONASS、GALILEO、BEIDOU,兼容标准 NMEA 0183 协议,可通过 USB NMEA 接口输出 1Hz 频率的 NMEA 信息,默认输出串口为/dev/ttyUSB1,波特率115200 bit/s。
频率范围:1559MHz~1609MHz
极化:RHCP 或 Linear
VSWR:< 2(典型值)
有源天线噪声系数:< 1.5dB
有源天线增益:> 0dB
有源天线内嵌 LNA 增益:< 17dB
注意: GPS天线需要使用有源天线
EC20模组根据EC20 4G模组套件章节的说明连接,天线接入带有GPS丝印的天线接口。
对于EC20模组,其GNSS 配置的串口节点和波特率分别为/dev/ttyUSB1、115200,使用模组之前需要检查/system/etc/u-blox.conf中SERIAL_DEVICE或者SERIAL_BAUD_RATE的值是否与之匹配,确认匹配则使能GPS后即可使用,使能方法参考如何使能GPS和修改串口配置。
注意:对于EC20模组,使用GNSS功能时,需要注意是否有接入其他的ttyUSB*设备,存在其他ttyUSB时,有可能会使EC20的默认ttyUSB设备号发生变化,导致GNSS功能无法使用
产品:电源适配器
规格:美规/欧规
输入标准:AC110-240V 50/60Hz
输出标准:12V-2A
注意: Core-3568J 一体机正常工作需要电源 12V/2A,电流低于 2A 可能会因电流过小而异常重启,为了保证开发板的正常工作,请使用电压为 12V,电流为 2A~3A 的电源,推荐使用 Firefly 官网电源配件。
产品:12键红外遥控器
版本:Firefly 定制版
电源:两节7号电池
适配:AIO-3568J
描述:支持 AIO-3568J 开发板的遥控功能
AIO-3568J使用SATA硬盘时需要用到SATA转接板模块,SATA转接板模块适配Firefly具有FPC SATA接口的所有系列主板,可接2.5”或3.5” SSD/HDD。SATA转接板和AIO-3568J采用FPC排线连接,铝箔屏蔽,最大限度减少信号干扰
SATA转接板正面
SATA转接板背面
注意: 为防止烧坏的情况发生,板子请先断电再接上SATA硬盘
HDMI 转 MIPI CSI 驱动板
Firefly kernel 没有开启全部的内核功能选项,用户在使用官方默认固件发现内核不满足使用场景时,比如 USB CAN 相关功能,则需要自行开启并重新编译、烧录内核。下面介绍方法:
首先需要获取 SDK ,开发环境的准备和获取方法查看:
之后开始新增内核选项:
之后会进入一个图形化界面进行配置
搜索结果中按下最左侧显示的数字,可以直接前往这个配置项所在位置:
属于同一个组的多个选项建议全部打开,例如下图中所有选项都属于 CAN USB 接口支持,可以全部打开以获得完整支持
参考分区烧写
RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。启动加载模式是 U-Boot 的正常工作模式,嵌入式产品发布时,U-Boot 都工作在此模式下,主要用于开机时把存储器中的内核加载到内存中,启动操作系统;下载模式主要用于将固件下载到存储器,开机时长按 Recovery 键可进入下载模式。本文简单说明 U-Boot 的使用,详细请参考Uboot开发
打开烧录工具,板子接好 USB OTG 线,接通电源时按住 Recovery 键,使开发板进入 U-Boot 的下载模式,在烧录工具中选择编译好的 Loader 文件,点击执行即可,如下图:
如果你已经成功烧写你最新编译的 Loader,在开机的串口输出中可以看到类似如下信息:
RK3568 内置 NPU 模块, 处理性能最高可达1TOPS。使用该NPU需要下载RKNN SDK,RKNN SDK 为带有 NPU 的 RK 系列芯片提供编程接口,能够帮助用户部署使用 RKNN-Toolkit2 导出的 RKNN 模型,加速 AI 应用的落地,具体支持平台列表可通过 SDK 中 README 文档或者访问airockchip 查看,开发建议以airockchip官方更新版本作为参考。
RKNN 是 Rockchip NPU 平台使用的模型类型,以.rknn后缀结尾的模型文件。用户可以通过RKNN SDK提供的工具将自主研发的算法模型转换成 RKNN 模型
RKNN 模型可以直接运行在 RK3568 平台上,在rknpu2/examples中有例子,根据README.md编译生成 Android 或 Linux Demo(需要交叉编译环境)。也可以直接下载编译好的 Demo。
在 AIO-3568J 上运行yolov5 demo如下:
# Platform 为芯片平台,如RK3576,RK3588, RK3566_RK3568等
:/ # cd /data/rknn_yolov5_demo_Android (Linux 系统使用 rknn_yolov5_demo_Linux 即可)
:/data/rknn_yolov5_demo_Android # chmod 777 rknn_yolov5_demo
:/data/rknn_yolov5_demo_Android # export LD_LIBRARY_PATH=./lib
:/data/rknn_yolov5_demo_Android # ./rknn_yolov5_demo model/Platform/yolov5s-640-640.rknn ./model/bus.jpg resize ./out.jpg
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
Loading mode...
sdk version: 2.3.0 (c949ad889d@2024-11-07T11:35:33) driver version: 0.9.3
model input num: 1, output num: 3
index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
index=0, name=output0, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
index=1, name=286, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=409600, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
index=2, name=288, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=122880, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
model is NHWC input fmt
model input height=640, width=640, channel=3
Read ./model/bus.jpg ...
img width = 640, img height = 640
once run use 67.055000 ms
loadLabelName ./model/coco_80_labels_list.txt
person @ (209 243 286 510) 0.879723
person @ (479 238 560 526) 0.870588
person @ (109 238 231 534) 0.839831
bus @ (91 129 555 464) 0.692042
person @ (79 353 121 517) 0.300961
save detect result to ./out.jpg
loop count = 10 , average run 59.530100 ms
对于 Caffe、TensorFlow 等其他模型,想要在 RK3568 平台运行,需要先进行模型转换。可以使用 RKNN-Toolkit2 工具将模型转换成 RKNN 格式。
RKNN-Toolkit2 是为用户提供在 PC、Rockchip NPU 平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成各种操作。
工具的全部功能简单介绍如下:
模型转换: 支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型转为 RKNN 模型,并支持 RKNN 模型导入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用
量化功能: 支持将浮点模型量化为定点模型,目前支持的量化方法为非对称量化 ( asymmetric_quantized-8 及 asymmetric_quantized-16 ),并支持混合量化功能 。 asymmetric_quantized-16 目前版本暂不支持
模型推理: 能够在 PC 上模拟 Rockchip NPU 运行 RKNN 模型并获取推理结果; 或将 RKNN 模型分发到指定的 NPU 设备上进行推理并获取推理结果
性能评估: 将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型在实际设备上运行时的性能
内存评估: 评估模型运行时的内存的占用情况。使用该功能时,必须将 RKNN 模型分发到 NPU 设备中运行,并调用相关接口获取内存使用信息
量化精度分析: 该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路
建议使用 virtualenv 管理 Python 环境,因为系统中可能同时有多个版本的 Python 环境,以 Python3.6 为例
RKNN-Toolkit2 通过 PC 的 USB 连接到 OTG 设备 AIO-3568J。RKNN-Toolkit2 将 RKNN 模型传到 AIO-3568J 的 NPU 上运行,再从 AIO-3568J 上获取推理结果、性能信息等:
AIO-3568J Android 系统需要参考 ADB 使用章节”准备连接”打开ADB功能,Linux 默认已经打开 ADB 功能。打开之后可以看到有adb设备。
AIO-3568J NPU 及 Toolkit 详细使用方法请参考RKNN SDK下
《Rockchip_RKNPU_User_Guide_RKNN_API_*.pdf》、《Rockchip_User_Guide_RKNN_Toolkit2_*.pdf》文档。
先进行如下操作,再编译 kernel 。
cp arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.dts.tmp.domain arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj-DEMO.dtb.dts.tmp.domain
切记:不要轻易修改主控电源域的IO电平,否则,最坏的情况可能会导致IO的损坏。
目前Core-3568J仅支持美标类型(CTIA)的耳机,对于国标类型(OMTP)的耳机硬件不兼容,会出现左右声道同时存在双声道的现象。
有可能是电源电流不够,请使用电压为 12V,电流为 2.5A~3A 的电源。
注意:如果开发板进行了eMMC擦除操作,之前写入的数据也会被清除。
安装RKDevInfoWriteTool
RKDevInfoWriteTool的设置里选中”RPMB”
根据需要在RKDevInfoWriteTool的设置里配置”SN”,”WIFI MAC”,”LAN MAC”,”BT MAC”等
开发板进入loader模式
RKDevInfoWriteTool进行写入或者读取操作
具体操作可以参考RKDevInfoWriteTool安装目录下的《RKDevInfoWriteTool使用指南》PDF文档。
AIO-3568J 提供了丰富的接口,主要包括:
电源接口
1 x USB3.0(host/device)
1 x USB3.0(host)
4 x USB2.0(接口×2,座子×2)
HDMI
MIPI 屏幕接口
EDP 屏接口
TP 触摸接口
以太网
WIFI 天线
蓝牙天线
MIC 接口
音频输入 (linein)
3.5mm 耳机接口
12V 电源接口
IR 接口
TF 卡槽
SIM 卡槽
SATA 接口
喇叭接口
Power 按键
Reset 按键
Recovery 按键
调试串口
工业级串口 (RS485, RS232, TTL)
MIPI 摄像头接口
MINI-PCIE(可选M2 NGFF 5G座子)
M.2 PCIE 3.0接口
CAN/CANFD
具体如下图:
资源下载