上手指南
简介
上手指南
串口调试
固件烧写
启动模式说明
MaskRom模式
烧写须知(重要)
升级固件
Linux 开发者指南
编译 Ubuntu 固件 ( GPT )
创建 Ubuntu 根文件系统
Firefly Ubuntu 使用手册
更多 Linux OS 支持
Android 开发者指南
编译 Android 10.0
解包/打包 RK 固件
Adb 介绍
配件
常见问题解答
资源
ROC-RK3328-PC
产品规格书

上手指南

简介

恭喜你入手 ROC-RK3328-PC 开发板!

对刚接触的人来说,《上手指南》 提供了烧写固件并让开发板跑起来的一切指引。

如果仔细阅读 《上手指南》后仍有疑问,请先查看《常见问题解答》。如果问题仍未解决,请参照《串口调试》一章,获取系统日志信息,并联系我们(联系方式),以便共同完善这份文档。

产品规格

ROC-RK3328-PC,是 Firefly 荣誉出品的第一块信用卡大小、性能强、功耗小的开源主板。

_images/hw_board_interface_top_zh_CN.jpg

主要功能:

  • 核心

    • Quad-Core ARM® Cortex-A53 64-bit 处理器,高达 1.5GHz 的主频

    • ARM Mali-450 MP2 Quad-Core GPU,支持 OpenGL ES1.1/2.0,OpenVG1.1

    • DDR3 RAM (1GB/2GB/4GB)

  • 连接

    • 1 x USB 2.0 Host 口,1 x USB 3.0 Host 口

    • 10/100/1000Mb 网口

    • 2.4G WIFI以及蓝牙4.2模组

    • 1 x IR 红外模组,支持自定义 IR 远程控制

    • 26 引脚拓展接口,包含 GPIO,I2S,I2C,UART,PWM,DEBUG,SARADC

  • 显示

    • HDMI 2.0 ( Type-A ),支持最大 4K@60Hz 显示

    • TV out,CVBS 显示,参照 480i,576i 标准

  • 音频

    • I2S,支持 8 通道

  • 视频

    • 4K VP9 和 4K 10位 H265 / H264 视频解码,可达 60fps

    • 1080P 多格式视频解码(WMV,MPEG-1/2/4,VP9,H.264,H.265)

    • 1080P 视频解码,支持 H.264/H.265

    • 视频后处理器:去隔行,去噪,边缘/细节/颜色优化

  • 存储

    • 高速eMMC

    • MicroSD (TF) 卡槽

(请参考完整的《完整规格说明》)

这款令人难以置信的超小型主板,凭借其低功耗和高性能,能够安静流畅地运行 Android 7.1 或 Ubuntu 16.04 系统。

包装配件

ROC-RK3328-PC 标准套件的包装清单:

  • ROC-RK3328-PC 主板

  • Type-C数据线

对开发者来说,建议购买以下配件:

上手指南

ROC-RK3328-PC 支持从以下存储设备启动:

  • SD 卡

  • eMMC

我们需要将系统固件烧写到 SD 卡或 eMMC 里,这样开发板上电后才能正常启动进入操作系统。

 

固件格式

固件有两种格式:

  • 原始固件(raw firmware)

  • RK固件(Rockchip firmware)

 

原始固件,是一种能以逐位复制的方式烧写到存储设备的固件,是存储设备的原始映像。原始固件一般烧写到 SD 卡中,但也可以烧写到 eMMC 中。 烧写原始固件有许多工具可以选用:

 

RK 固件,是以 Rockchip专有格式打包的固件,使用 Rockchip 提供的 upgrade_tool (Linux) 或 AndroidTool (Windows) 工具烧写到eMMC 闪存中。RK 固件是 Rockchip 的传统固件打包格式,常用于 Android 设备上。另外,Android 的 RK 固件也可以使用 [SD Firmware Tool] 工具烧写到 SD 卡中。

 

分区映像,是分区的映像数据,用于存储设备对应分区的烧写。例如,编译 Android SDK会构建出 boot.imgkernel.imgsystem.img分区映像文件,kernel.img 会被写到eMMC 或 SD 卡的 “kernel” 分区。

下载和烧写固件

以下是支持的系统列表:

  • Android 7.1.2

  • Ubuntu 16.04

  • Ubuntu 18.04

  • Debian 9

根据所使用的操作系统来选择合适的工具去烧写固件:

  • 烧写 SD 卡

    • 图形界面烧写工具:

      • [Etcher] (Linux/Windows/Mac)

    • 命令行烧写工具

      • [dd] (Linux)

  • 烧写 eMMC

开发板上电启动

在开发板上电启动前,确认以下事项:

  • 5V2A 电源适配器

  • Type-C数据线

然后按照以下步骤操作:

  1. 将电源适配器拔出电源插座。

  2. 使用 Type-C数据线连接电源适配器和主板。

  3. 插入 HDMI 线、USB 鼠标或键盘(可选)。

  4. 检查一切连接正常后,电源适配器上电。

串口调试

如果正在进行 U-Boot 或内核开发,USB串口适配器(USB 转串口TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。

配置串口调试

由于用于串口调试的UART2与蓝牙所使用的串口复用,所以官方发布的固件无法使用串口调试。如果使用串口调试,蓝牙就无法正常使用,需要使用到串口调试请进行如下修改:

Linux配置串口调试

配置串口调试前,首先需要《编译 Linux 固件》,然后请进行如下修改:

编译内核,然后下载固件。

Android配置串口调试

  • Android7.1修改方式

配置串口调试前,首先需要《编译 Android 固件》,然后请进行如下修改:

编译内核,然后下载固件。

  • Android10.0修改方式

uboot修改:

最后烧录uboot目录下的rk3328_loader_v1.16.250.bin , uboot.img , trust.img 与 kernel目录下的boot.img即可

_images/android_debug_con.jpg

另外当配置调试串口输出时,会有大量关于蓝牙的打印

如果觉得这些打印太繁琐可以直接关闭蓝牙功能,然后编译android上层 上层修改:

最后烧写super.img即可

准备 USB 串口适配器

选择 USB 串口适配器

ROC-RK3328-PC 的 UART 调试口默认使用1,500,000波特率和 TTL 电平。

一些串口适配器不能支持如此高的波特率。因此在购买之前,请确保它符合要求并有可用的驱动。参考在线商城上带 CP2104 芯片的 USB 转串口适配器

连接适配器和调试口

用三根线将 TX/RX/GND 引脚分别连接在一起:

_images/debug_con.jpg

如果在使用某些适配器时串口控制台没有输出,可以尝试将适配器的 TX 引脚连接到开发板的 RX 引脚,适配器的 RX 引脚连接到开发板的 TX 引脚,即交换一下 TX、RX 引脚。

串口参数配置

ROC-RK3328-PC 使用如下配置:

  • 波特率:1,500,000

  • 数据位:8

  • 停止位:1

  • 奇偶检查:无

  • 流控:无

接下来,根据操作系统的不同,为你介绍详细的操作说明。

Windows 下的串口调试

安装驱动

安装卖家推荐的 USB 串口适配器驱动。如果没有,可以检查芯片组并尝试以下驱动

提示:如果 PL2303 在 Win8 下无法工作,则可以尝试将驱动程序降级到版本 3.3.5.122 或之前。

安装驱动后,将适配器连接到主机的 USB 端口。操作系统将提示检测到新硬件。完成后,可以在设备管理器中找到新的COM端口:

_images/debug_devicemanager_com.png

安装工具

Windows 中有很多串口终端工具,例如 putty 和 SecureCRT。以下介绍Putty这款流行的开源软件的使用。

下载 putty.zip,解压并运行 PUTTY.exe

  1. 选择 “Connection type” 为 “Serial”。

  2. 将 “Serial line” 修改为在设备管理器中找到的 COM 端口。

  3. 设置 “Speed” 为 1500000 。

  4. 点击 “Open” 按钮。

_images/debug_putty_serial.png

Linux 下的串口调试

如果 USB 串口适配器的芯片组受 Linux 内核支持,驱动程序将自动加载。

连接串口适配器,并通过如下命令检查相应的串口设备文件:

固件烧写

启动模式说明

前言

ROC-RK3328-PC 有灵活的启动方式。一般情况下,除非硬件损坏,ROC-RK3328-PC开发板是不会变砖的。

如果在升级过程中出现意外,bootloader 损坏,导致无法重新升级,此时仍可以进入 MaskRom 模式来修复。

加载方式

ROC-RK3329-PC 有 20KB 的 BootRom 和 36KB 的内部 SRAM,支持从以下设备加载系统:

  • SPI 接口

  • eMMC 接口

  • SDMMC 接口

另外 ROC-RK3328-PC 支持从Type-C接口下载系统代码。

启动次序

启动的次序是这样的:

  1. 主控上电初始化

  2. BootRom 代码在 SRAM 上运行,校验存储设备里的 bootloader

  3. 校验通过,加载并运行 bootloader 引导代码

  4. bootloader 引导代码负责初始化 DDR 内存,加载 bootloader 完整代码到 DDR 内存中并运行

  5. bootloader 加载存储设备上的 Linux 内核,并将执行权交给 Linux 内核

启动模式

ROC-RK3328-PC有三种启动模式:

  • Normal 模式

  • Loader 模式

  • MaskRom 模式

Normal 模式

Normal 模式就是正常的启动过程,各个组件依次加载,正常进入系统。

 

Loader 模式

在 Loader 模式下,bootloader 会进入升级状态,等待主机命令,用于固件升级等。要进入 Loader 模式,必须让 bootloader 在启动时检测到 RECOVERY(恢复)键按下,且 USB 处于连接状态。有两种方法可以使设备进入升级模式:

一种方式是断开电源适配器

  • Type-C 线连接好设备和主机。

  • 按住设备上的 RECOVERY (恢复)键并保持。

  • 插上电源

  • 大约两秒钟后,松开 RECOVERY 键。

另一种方式是接上电源适配器

  • Type-C数据线连接好设备和主机。

  • 按住设备上的 RECOVERY (恢复)键并保持。

  • 短按一下 RESET(复位)键。

  • 大约两秒钟后,松开 RECOVERY 键。

MaskRom 模式

MaskRom 模式用于 bootloader 损坏时的系统修复。

一般情况下是不用进入 MaskRom 模式的,只有在 bootloader 校验失败(读取不了 IDR 块,或 bootloader 损坏) 的情况下,BootRom 代码 就会进入 MaskRom 模式。此时 BootRom 代码等待主机通过 USB 接口传送 bootloader 代码,加载并运行之。

要强行进入 MaskRom 模式,请参阅《MaskRom》一章。

MaskRom模式

有关启动模式的介绍,请参阅[《启动模式》]一章

简介

MaskRom 模式是设备变砖的最后一条防线。强行进入 MaskRom 涉及硬件操作,有一定风险,因此仅在设备进入不了 Loader 模式的情况下,方可尝试 MaskRom 模式。

  • 请小心阅读,并谨慎操作!

ROC-RK3328-PC 进入MaskRom

原理:

人为的把Flash的数据脚与地线短接,系统会认为Flash数据出错,从而清除Flash数据。 操作步骤如下:

  • 1、找到ROC-RK3328-PC 预留的焊点(CLK, GND),在开发板的正面,如下图所示:

_images/maskrom1.jpg

  • 2、设备断开所有电源。

  • 3、拔出 SD 卡。

  • 4、用 Type-C 数据线连接好设备和主机。

  • 5、用金属镊子接通ROC-RK3328-PC预留的焊点(CLK, GND),并保持。

  • 6、设备插入电源。

  • 7、稍候片刻,之后松开镊子,设备应该就会进入 MaskRom 模式。

_images/maskrom2.png

烧写须知(重要)

以下内容,仅针对烧写统一固件,请认真阅读本章再对EMMC进行烧写!

  • 烧写工具下载地址(根据下表下载对应版本)

  • 固件

    • 官方固件:官方云盘提供的Linux固件中,其中包括Ubuntu,Buildroot,Debian等Linux系统,带GPT字样为GPT分区格式固件.

    • DIY固件:根据《编译Linux固件(GPT)》编译出来的固件为GPT固件。

烧写须知

请认真阅读下表,再进行烧写:

_images/upgrade_table_zh_CN.png

提示:在Loader模式和Maskrom模式均能够烧写固件时,优先选择Loader模式。

升级固件

前言

本文介绍了如何将主机上的固件文件,通过 Type-C 数据线,烧录到开发板的闪存中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。

准备工作

设备和环境

  • ROC-RK3328-PC 开发板

  • 固件

  • 主机

  • 良好的 Type-C 数据线

注:固件文件一般有两种:

  • 单个统一固件 update.img, 将启动加载器、参数和所有分区镜像都打包到一起,用于固件发布。

  • 多个分区镜像, 例如 Linux 系统就有 uboot.img、boot.img、rootfs.img; Android 系统就有 kernel.img, system.img 等,均在开发阶段生成。

注:主机操作系统支持:

  • Windows XP (32/64位)

  • Windows 7 (32/64位)

  • Windows 8 (32/64位)

  • Linux (32/64位)

安装 RK USB 驱动

下载 Release_DriverAssistant.zip ,解压,然后运行里面的 DriverInstall.exe 。为了所有设备都使用更新的驱动,请先选择”驱动卸载”,然后再选择”驱动安装”。

_images/upgrade_firmware1.png

设备模式

有两种方法可以使设备进入升级模式

  • 一种方法是设备先断开电源适配器和 Type-C 数据线的连接:

    • USB数据线一端连接主机,Type-C 一端连接开发板 Type-C 母口。

    • 按住设备上的 RECOVERY (恢复)键并保持。

    • 接上电源

    • 大约两秒钟后,松开 RECOVERY 键。

  • 另一种方法,无需断开电源适配器和 Type-C 数据线的连接:

    • USB数据线一端连接主机,Type-C一端连接开发板 Type-C 母口。

    • 按住设备上的 RECOVERY (恢复)键并保持。

    • 短按一下 RESET(复位)键。

    • 大约两秒钟后,松开 RECOVERY 键

主机应该会提示发现新硬件并配置驱动。打开设备管理器,会见到新设备 “Rockusb Device” 出现,如下图。如果没有,则需要返回上一步重新安装驱动。

_images/upgrade_firmware2.png

固件下载

烧录工具下载

Windows下:

  1. Linux 或者 Android8.1 系统 AndroidTool_v2.58

  2. Android7.1 系统 AndroidTool_v2.38

  3. Android10 系统 AndroidTool_v2.71

Linux下:

  1. Linux 系统或者 Android8.1 系统 Upgrade_Tool_v1.34

  2. Android7.1 系统 Upgrade_Tool_v1.24

  3. Android10 系统 Upgrade_Tool_v1.49

 

Windows 主机升级固件

下载 AndroidTool 工具后,解压,运行里面的 AndroidTool.exe(注意,如果是 Windows 7/8,需要按鼠标右键,选择以管理员身份运行)。

烧写统一固件 update.img

烧写统一固件 update.img 的步骤如下:

  1. 切换至”升级固件”页。

  2. 按”固件”按钮,打开要升级的固件文件。升级工具会显示详细的固件信息。

  3. 按”升级”按钮开始升级。

_images/upgrade_firmware4.png

如果升级失败,可能是因为你烧写的固件 laoder 版本与原来的机器的不一致,可以尝试先按”擦除Flash”按钮来擦除 Flash,然后再升级。

注意:”擦除Flash”一定要根据《烧写须知》进行擦除

烧写分区映像

每个固件的分区可能不相同,请注意以下两点:

  1. 使用Androidtool_2.38烧写Android7.1固件时使用默认配置即可;

  2. 使用Androidtool_2.58烧写Linux分区固件使用默认配置即可,烧写Android8.1分区固件请先执行以下操作:

  3. 使用Androidtool_2.71烧写Android10固件时使用默认配置即可;

切换至”下载镜像页面”; 右键点击表格,选择”导入配置”; 选择rk3328-Android81.cfg

烧写分区映像的步骤如下:

  1. 切换至”下载镜像”页。

  2. 勾选需要烧录的分区,可以多选。

  3. 确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。

  4. 点击”执行”按钮开始升级,升级结束后设备会自动重启。

_images/upgrade_firmware5.png

 

Linux 主机升级固件

Linux 下无须安装设备驱动,参照 Windows 章节连接设备则可。

下载Linux工具 Upgrade_Tool 后, 按以下方法安装到系统中,方便调用:

注意:”擦除Flash”一定要根据《烧写须知》进行擦除

烧写分区镜像:

Android7.1 使用以下方式:

常见问题

如何强行进入 MaskRom 模式

如果板子进入不了 Loader 模式,此时可以尝试强行进入 MaskRom 模式。操作方法见《MaskRom》

Linux 开发者指南

编译 Ubuntu 固件 ( GPT )

为了方便用户的使用与开发,官方提供了 Linux 开发的整套 SDK,本章详细的说明 SDK 的具体用法。

准备工作

搭建 SDK 编译环境

以下文件请务必确认安装!

这里使用Ubuntu18.04进行测试(推荐使用Ubuntu16.04及其以上版本):

下载 Firefly_Linux_SDK 分卷压缩包

由于 Firefly_Linux_SDK 源码包比较大,部分用户电脑不支持4G以上文件或单个文件网络传输较慢, 所以我们采用分卷压缩的方法来打包SDK。用户可以通过如下方式获取 Firefly_Linux_SDK源码包:Firefly_Linux_SDK源码包

下载完成后先验证一下 MD5 码:

更新 Firefly_Linux_SDK

后续可以使用以下命令更新 SDK

编译 SDK

编译前配置

注意,十分重要!!

默认配置编译 Buildroot 固件,如果想编译其他固件(如 Ubuntu 固件)请执行一下操作:


部分编译

kernel

  • Ubuntu18.04文件系统,可以通过云盘下载:下载链接

把得到的镜像放到 SDK 的根目录处:

固件打包

同步更新各部分镜像

FIRMWARE_VER: 8.1
MACHINE_MODEL: RK3328
MACHINE_ID: 007
MANUFACTURER: RK3328
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3328
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x00020000@0x0003a000(oem),0x00700000@0x0005a000(rootfs),-@0x0075a000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

常见问题

如何进入升级模式

操作方法见《升级固件》

创建 Ubuntu 根文件系统

准备工作

安装 qemu

在 Linux PC 主机上安装模拟器:

下载和解压 ubuntu-core

Ubuntu 根文件系统是基于 Ubuntu base 16.04 来创建的。用户可以到 ubuntu cdimg 下载,选择下载

修改根文件系统

准备工作

准备网络:

更新及安装

添加用户及设置密码

制作根文件系统

Firefly Ubuntu 使用手册

本使用手册适用与Firefly Ubuntu Desktop & Minimal 系统,部分与UI显示相关的介绍,只针对Desktop系统。

强烈建议使用Ubuntu 18.04, 如使用其它版本系统,本文档可能部分章节不能完全适用。

adb 使用

ADB

用数据线连接设备和主机;

安装linux-headers和linux-image

DEBIAN包下载链接: 链接:https://pan.baidu.com/s/1HH_1M1QqdQQAVIXp3NnPvw 取码:ddd6

安装头文件

Qt交叉编译环境支持

Firefly发布的Qt交叉编译工具链,适用于以下环境:

  • Host: x86-64 / Ubuntu 18.04

  • Target: Firefly RK3399 RK3328 PX30 / Ubuntu 18.04 Minimal&Desktop

工具链完整支持wenEngine, 支持EGLFS LinuxFB XCB 等backend.

  • 下载地址


  • 部署

详情参见Qt5.12.2_Release.md 注意,文档中所有路径的名称不可更改,否则会导致编译或者运行出错。

  • 编译

在host端,进入Qt工程目录,qmake && make 即可.

  • 运行

工具链中提供了两个测试Demo,分别对应EGLFS和LinuxFB Backend,用户在部署完成后,可以在host端build demo,在tartget端运行demo以测试部署是否成功。

创建WIFI热点

硬件要求:

  • 需要有无线网卡,且支持移动热点功能

点击桌面右上角Ethernet Network图标,选择Edit Connection... 

_images/Hostspot1.png

选择 图标,Add a new connection 

_images/Hostspot2.png

选择Wi-Fi,后点击Create 

_images/Hostspot3.png

Wi-Fi设置:

  • 设置SSID

  • Mode:选择Hotspot

  • Device: 选择无线网卡(wlan) 

  • _images/Hostspot4.png

选择适当的加密方式: 

_images/Hostspot5.png

点击Save即刻完成热点创建

导出设备系统

此章节适用于: 当用户已经在一台设备上完成工作环境的部署,需要将当前环境完整导出,以批量部署到其它同平台设备上。

导出设备系统分为两步

  1. 导出设备rootfs

  2. 二次打包完整固件,在PC端将rootfs与其它固件组成部分二次打包,生成完整固件

导出设备rootfs

二次打包完整固件

  • 工具下载:firefly-linux-repack

  • 本工具适用于用户需要替换固件中任意一组成部分

  • 在PC端安装必要环境:sudo apt-get install lib32stdc 6


  1. 解包 把官方发布的固件拷贝到当前目录,重命名为update.img , 执行unpack.sh 解包完成后,生成的文件在output目录下.

  2. 合包 保持当前目录结构,文件名等不变,用客户自己的文件替换output/下同名的文件 执行pack.sh, 执行完后,生成new_update.img,即为打包好的固件 rootfs文件名必须为rootfs.img parameter.txt文件名必须为parameter.txt

  • 注意: 合包过程中,如果rootfs分区不是最后一个分区,那么程序会根据rootfs文件的大小, 自动修改parameter.txt中rootfs分区的大小。 如果用户自己有改动parameter.txt,请留意整个合包的流程。


显示版本信息

  • ffgo

通过Firefly 提供的ffgo命令可以方便的查看固件信息,便于开发者调试以及定位问题。

当用户需要向Firefly反馈信息时,需要附上ffgo version显示的版本信息。

root@firefly:~# ffgo
Usage:
         ffgo :         show this usage
         ffgo update:   update ffgo
         ffgo version:  get version
         ffgo cmdlist:  get support cmd list
         ffgo [cmd]:    run cmd in cmd list

root@firefly:~# ffgo update
update success
root@firefly:~# ffgo version
OS:      Ubuntu 18.04.4 LTS
MODEL:   Firefly-RK3399 Board (Linux Opensource)
FIREFLY: v2.03-1-g2ed565c
DATE:    20200617-1042
KERNEL:  Linux version 4.4.194-59119-g968ba5005831 (jincheng@jincheng-System-Product-Name) (local/firefly-linux/rk3399/firefly: 968ba5005831c5f69d68d95984451fd2a7c457c0) (gcc version 6.3.1 20170404 (Lina0

恢复出厂设置

Firefly Ubuntu 支持恢复出厂设置。 注意,此出厂设置表示恢复为设备最后一次升级固件之后的初始状态

视频硬件编解码支持

RK3399集成的VPU具有优秀的视频编解码能力,Mpp是Rockchip为VPU提供的一套视频编解码的api, 并且基于mpp。Rockchip提供了一套gstreamer的编解码插件。用户可以根据自己的需求,基于gstreamer来做视频编解码的应用,或者直接调用mpp,来实现硬件的编解码加速。

系统提供了一个测试视频文件,位于/usr/local/test.mp4 ,测试文件为1080P, 24Fps, H264编码, Mp4格式。

可以通过一下几种方式,验证和开发视频编解码相关应用。

Gstreamer

  • Ubuntu 16.04 下,gstreamer 1.12 已经安装在/opt/目录下。

  • Ubuntu 18.04下, gstreamer 1.12 已经安装到系统中。

/usr/local/bin/h264dec.sh 测试硬件H264解码。

/usr/local/bin/h264enc.sh 测试硬件H264编码。

用户可以参照这两个脚本,配置自己的gstreamer应用。

Mpv

系统提供的Mpv播放器,可以直接调用rkmpp解码插件。

FFmpeg

FFmpeg 对于 Rockchip 暂时只支持通过 Mpp 实现硬件解码,暂时没有硬件编码的支持。

Firefly Ubuntu 已经安装了 FFmpeg,用户可以直接使用。

  • 确认rkmpp解码器


特别注意: FFmpeg h264_rkmpp 解码获得的是 AV_PIX_FMT_DRM_PRIME,也就是 DRM 帧数据,如果是基于drm显示,可以直接输出帧,否则,需要用 hwdownload 进行转换。

更多内容可以参考 FFmpeg 官网

Mpp

Note:

  1. EGL 是用arm 平台上OpenGL针对x window system的扩展,功能等效于x86下的glx库。

  2. 由于Xorg使用的Driver modesettings 默认会加载libglx.so(禁用glx会导致某些通过检测glx环境的应用启动失败), libglx.so会搜索系统中的dri实现库。但是rk3399 Xorg 2D加速是直接基于DRM实现, 并未实现dri库,所以启动过程中,libglx.so会报告如下的错误 。

TensorFlow Lite

RK3399 支持神经网络的GPU加速方案LinuxNN, Firefly Ubuntu已经添加了LinuxNN的支持。

在opt/tensorflowbin/下,运行test.sh, 即可测试MobileNet 模型图像分类器的 Demo和MobileNet-SSD 模型的目标检测 Demo

屏幕键盘

官方的 Ubuntu 系统中自带屏幕键盘,可以在菜单栏中点击打开: 

_images/onboard.jpg

HDMI_IN 图像抓取

这项功能仅仅能够在AIO-3399J板子上使用

  • 需要焊接 HDMI_IN 输入接口

手动编译需要注意:

测试脚本 test_hdmiin-3399_new.sh

声音配置

设备一般都有2个或以上的音频设备。常见的是耳机和 HDMI 这两个设备的音频输出。下面是音频设置的例子,供用户参考。

从命令行指定音频设备

在图形界面中选择音频设备

内核配置

在内核目录下,打开内核配置选项菜单:

编译完成后将内核烧录到设备中,烧录过程请参考维基教程:升级固件中的分区镜像烧写部分。

ADB 连接

串口

设备上的串口分两种,一种是普通串口另外一种是通过转换芯片把SPI转换而成的串口。转换而成的串口和普通串口功能完全一致但是需要注意它们的设备文件名是不一样的。下面是两者的区别:

关闭回显

在做环回收发测试的时候回显功能会影响到我们的测试结果,所以在环回测试或者其他特殊情况下需要关闭回显。以下是关闭回显的命令:

工作模式

串口有 2 种工作模式分别是中断模式和 DMA 模式。

中断模式

内核默认把串口配置成中断模式所以不需要做任何修改。中断模式下传输速率比较快但是在传大量数据的时候很容易丢包或者出错,所以当数据量比较大的时候请不要使用中断模式。

DMA 模式

DMA 模式主要是传输大量数据的时候使用。内核会为串口提供一个缓存空间接收数据来尽量降低串口传输的丢包率。

MIPI 摄像头 (OV13850)

调试

gstreamer

使用gstreamer方式预览摄像头:

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=640,height=480, framerate=30/1 ! videoconvert ! kmssink &

运行脚本即可,结果如图所示:

_images/mipi_csi.jpg

开发MIPI 摄像头

FFMPEG读取MIPI摄像头

OpenCV读取MIPI摄像头

MIPI摄像头是不支持OpenCV中**capture.open(index)**方式读取的,在此提供2中读取摄像头的方法:

USB 以太网

USB 以太网,主要实现的是将设备的 OTG 接口做外设模式,模拟成一个网络接口,然后主机通过 USB 连接设备并通过设备访问互联网。以下是基于 Firefly-RK3399 设备进行的具体操作。

操作环境:

  • Ubuntu 系统的 PC 机

  • Firefly-RK3399 设备

内核设置

在内核目录下,打开内核配置选项菜单:

编译完成后将内核烧录到设备中,烧录过程请参考维基教程:升级固件中的分区镜像烧写部分。然后将内核目录下生成的下列模块复制到设备中:

  • drivers/usb/gadget/function/u_ether.ko

  • drivers/usb/gadget/function/usb_f_ecm_subset.ko

  • drivers/usb/gadget/function/usb_f_ecm.ko

  • drivers/usb/gadget/function/usb_f_rndis.ko

  • drivers/usb/gadget/function/usb_f_eem.ko

  • drivers/usb/gadget/legacy/g_ether.ko

  • drivers/usb/gadget/libcomposite.ko

然后在设备上,依次加载上述模块:

输出信息中 ID 0525:a4a2 Netchip Technology, Inc. Linux-USB Ethernet/RNDIS Gadget 即为 USB 网卡设备。

设备插入网线,使设备可以连接外网。

然后给 usb0 网卡自定义一个适当的 IP:

注意要设置 usb0 的 IP 和有线网卡 eth0 的 IP 不在同一网段!!

网络共享实现 PC 机上网

在设备上:首先打开 IPv4 的转发功能:

配置过程中要注意以下几点:

  • 对应好上述步骤中自己设备上的各个 IP 地址,注意设备上的 USB 虚拟网卡 IP 和有线网络 IP 不在同一网段;

  • PC 机虚拟 USB 网卡的网关要设置为设备虚拟 USB 网卡的 IP 地址;

  • 设备上的虚拟网卡 IP 地址、IP 转发功能、流量转发规则等设置会在设备重启后恢复,用户可以自行查找资料如何开机自动设置这些配置。

外部存储设备 rootfs

根文件系统除了可以使用在内部的 eMMC 中的,还可以使用外部存储设备的根文件系统,如 SD 卡,U 盘等。以下是以 SD 卡为例,在 Firefly-RK3399 设备上实现挂载外部存储设备的根文件系统。

格式化完成后,使用 dd 命令,将制作好的根文件系统烧写到 SD 卡刚新建的分区中。(根文件系统的制作可以参考Ubuntu 根文件系统的制作

修改完成后编译并烧录至设备中。

SD 卡的根文件系统烧录完成后,插入设备的 TF 卡槽中,开机即可进入到 SD 的根文件系统中。

注意事项:

网络启动

网络启动,是用 TFTP 在服务器下载内核、dtb 文件到目标机的内存中,同时可以用 NFS 挂载网络根文件系统到目标机上,实现目标机的无盘启动。以下基于 Firefly-RK3399 作出一个示例,提供用户参考。

准备工作:

  • Firefly-RK3399 设备;

  • 路由器、网线;

  • 安装有 NFS 和 TFTP 的服务器;

  • 一份制作好的根文件系统。

注:示例中使用的是 Ubuntu 系统的 PC 机作为服务器,通过路由器和网线实现与设备的连接。用户可以根据自己的实际情况作调整,但如果是 PC 机直连设备,请使用交叉网线。请确保服务器和目标机在同一局域网内。

服务器部署

然后将制作好的根文件系统复制到 /nfs/rootfs 目录中。(根文件系统的制作可以参考:Ubuntu 根文件系统的制作

内核的配置

如果要做到挂载网络根文件系统,需要在内核中做相关配置,并在 dts 中修改相关挂载根文件系统的配置。

U-Boot设置

请先确保目标机网线已插入,接入到服务器的局域网内。

目标机启动进入 U-Boot 命令行模式,设置以下参数:

在线更新内核和 U-Boot

本小节介绍了在线更新的一个简单的流程。将内核、U-Boot 或者其他需要更新的文件打包成 deb 安装包,然后导入到本地包仓库,实现在设备上下载并自动更新。仅供用户参考。

准备工作

  • 两块 Firefly-RK3399 设备;

  • 路由器、网线;

  • PC 机。

将两块设备和 PC 机都连接到同一个局域网内。连接好后对应的 IP 地址别是:

  • PC 机:192.168.1.100

  • 设备 A:192.168.1.101

  • 设备 B:192.168.1.102

PC 机部署 Docker

使用脚本安装 Docker :

客户端用 distcc 编译内核

到这里,三个机器都部署了分布式编译环境。可以选择任意一台机器作为客户端,剩下两个机器作为服务器。这里选择其中一个设备作为客户端。

为了测试结果更准确,先清除客户端设备上的缓存:

Android 7.1 升级到 Ubuntu

此升级方法仅适用于 RK3399,且板子上当前运行的固件为 Android 7.1

如果 RK3399 板出厂的固件是 Android 7.1,在使用 TF 卡升级到 Ubuntu 时候,由于 Maskrom 中 eMMC 启动优先级高于 TF 卡,所以会先启动 eMMC 中的 miniloader,然后由 miniloader 再启动 TF 卡中的 U-Boot。但是 Android 7.1 的 miniloader 与 Ubuntu 的 U-Boot 不兼容,会导致出错。解决方案是:使用 Android 7.1 的 Bootloader、用户 Ubuntu 固件的内核及定制的 recovery 内存盘来制作 Ubuntu 的升级卡, 成功实现启动链 “MaskRom -> eMMC Android miniloader -> TF Android U-Boot -> TF Ubuntu Kernel -> TF recovery 系统” 的正常工作。

材料准备

  1. 一张 TF 卡。

  2. 待进行系统升级的设备。

  3. 对应板型的 Ubuntu 固件。

  4. 下载操作所需的相关文件和脚本:ubuntu_sd_update.zip

升级卡的制作流程

  1. 解压 ubuntu_sd_update.zip,进入 ubuntu_sd_update 目录;

  2. 拷贝板型对应的 Ubuntu 固件到本目录下,重命名为 update.img(或者 ln -sf xxx update.img );

  3. 执行 ./unpack.sh 解包 Ubuntu 固件;

  4. 然后执行 ./mkSDCreate.sh,生成 sdCreate.img

  5. 使用 SD_Firmware_Tool 工具,选择 sdCreate.img,完成升级卡的制作;

  6. 拷贝 Ubuntu 固件到 TF 卡中,并重命名为 sdupdate.img

设备升级流程

  1. 对设备断电。

  2. 插入 TF 卡,上电开机,设备自动进入升级操作,期间机器的一个 LED 灯会持续闪烁,视固件大小,升级时间较长。

  3. 升级完成,LED 灯停止闪烁。

  4. 拔出 TF 卡,对开板重新上电。

特殊情况

  • 在实际应用中,有些用户的升级固件大小超过 4G,由于 SD_Firmware_Tool 制作完升级卡之后,是以 FAT32 来格式化 TF 卡的,导致用户固件不能放入 TF 卡。此时,在制作升级卡完成后,先将 TF 卡内 rksdfw.tagsd_boot_config.config 两个文件备份,然后在 Windows 上将 TF 卡的 FAT32 分区重新格式化为 NTFS 或者 exFAT,然后再将备份出来的文件和用户固件拷贝到 TF 卡即可。

  • 如果出现插卡开机后设备进入了 recovery 模式却没有自动进行升级操作,请在 recovery 模式下重新拔插 TF 卡,升级操作即可正常继续进行。

更多 Linux OS 支持

Ubuntu 18.04

Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观。用户可以通过查询《Firefly Ubuntu 使用手册》在Firefly的板子上体验Ubuntu系统的魅力。

_images/ubuntu_18.04_logo.jpg

Ubuntu 20.04

与最近的 LTS 前身 Ubuntu 18.04 相比,Ubuntu 20.04 带来了许多变化和明显的改进。随着时间的流逝,Canonical 的未来似乎变得温和光明,并点缀着更好的装饰品。对于所有 Ubuntu 爱好者,我们相信您会喜欢这个新版本,您可以在下面的链接中找到它。

_images/ubuntu_20.04_logo.png

Yocto

Yocto项目是一个开源协作项目,可帮助开发人员创建基于Linux的定制系统,这些系统专为嵌入式产品而设计,无论产品的硬件架构如何。Yocto Project提供灵活的工具集和开发环境,允许全球的嵌入式设备开发人员通过共享技术,软件堆栈,配置和用于创建这些定制的Linux映像的最佳实践进行协作。Firefly为板子适配了Yocto项目,用户可以通过查看《Yocto项目开发手册》进行快速开发。

_images/YoctoProject_logo.png

Debian 10

Debian 项目由 Ian Murdock 于1993年创立,是一个真正的免费社区项目。从那时起该项目已发展成为最大和最有影响力的开源项目之一。来自世界各地的数千名志愿者共同创建和维护 Debian 软件。Debian提供70种语言,支持多种计算机类型,因此其自称为通用操作系统。因 Debian 强大的的通用性,Firefly为此适配了Debian 10以供开发者使用。

Shiprock

Centos 8

CentOS(Community Enterprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux(RHEL)依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。因 Centos 强大的的通用性,Firefly为此适配了Centos 8以供开发者使用。

Shiprock

Android 开发者指南

编译 Android 10.0

准备

系统要求

编译 Android 10.0 开发环境配置建议:

  • 64位系统

  • Ubuntu 14.04 及以上

  • 16GB 内存 交换内存

  • 150GB 空闲空间用来编译, 源码树另占 100GB

软件配置

安装 JDK 8

下载完成后,在解压前先校验下 MD5 码:

使用 Firefly 脚本编译

注意:安卓10占用系统资源较多,1G内存设备建议使用32位编译。

32位完整编译

不使用脚本编译

编译之前请先执行如下命令配置好环境变量:

打包 RK 固件

在 Linux 下打包固件

编译完成后使用 Firefly 官方脚本即可打包所有的分区映像成 RK 固件:

其他编译说明

Android10.0不能直接烧写kernel.img和resource.img

Android10.0的kernel.img和resource.img包含在boot.img中,更新编译kernel后需要在android根目 录下执行./mkimage.sh重新打包boot.img。打包后烧写rockdev下面的boot.img,可以使用如下方法单 独编译kernel。

单独编译kernel生成boot.img

编译的原理:在kernel目录下将编译生成的 kernel.img 和 resource.img 替换到旧的 boot.img 中, 所以编译的时候需要用 BOOT_IMG=xxx 参数指定boot.img的路径,命令如下:

编译后可以直接烧写kernel目录下的boot.img到机器的boot位置。

分区镜像

  • boot.img 包含ramdis、kernel、dtb

  • dtbo.img Device Tree Overlays

  • kernel.img 包含kernel,目前无法单独烧写,需要打包到boot.img内烧写

  • MiniLoaderAll.bin 包含一级loader

  • misc.img 包含recovery-wipe开机标识信息,烧写后会进行recovery

  • odm.img 包含android odm,包含在super.img分区内,单独烧写需要用fastboot烧写

  • parameter.txt 包含分区信息

  • pcba_small_misc.img 包含pcba开机标识信息,烧写后会进入简易版pcba模式

  • pcba_whole_misc.img 包含pcba开机标识信息,烧写后会进入完整版pcba模式

  • recovery.img 包含recovery-ramdis、kernel、dtb

  • resource.img 包含dtb,kernel和uboot阶段的log及uboot充电logo,目前无法单独烧写,需要打包到boot.img内烧写

  • super.img 包含odm、vendor、system分区内容

  • system.img 包含android system,包含在super.img分区内,单独烧写需要同fastboot烧写

  • trust.img 包含BL31、BL32

  • uboot.img 包含uboot固件

  • vbmeta.img 包含avb校验信息,用于AVB校验

  • vendor.img 包含android vendor,包含在super.img分区内,单独烧写需要同fastboot烧写

  • update.img 包含以上需要烧写的img文件,可以用于工具直接烧写整个固件包

烧写固件

参考:《升级固件》

其他安卓版本

:以下sdk可使用,但主要维护Android 10.0

《编译 Android 7》

《编译 Android 8》

解包/打包 RK 固件

RK 固件格式

打包 RK 固件

首先, 确保在 parameter.txt 文件中的 system 分区足以容纳 system.img. 参考 《Parameter 文件格式》 了解分区布局。

自定义

自定义 system.img

Adb 介绍

Adb 在 Windows 下的安装

  1. 安装 [Rockusb 驱动]。

  2. 下载 adb.zip,然后解压到 C:adb

常用 Adb 命令

连接管理

列出所有连接设备以及它们的序列号:

调试

查询系统日志

用法:

配件

USB 语音开发套件

简介

USB 语音开发套件 可适配于不同的软硬件平台,为用户提供完整的语音开发解决方案,加快产品的落地,下图为该套件的各部分介绍:

_images/usbmic_audio.png

  • 4/6 MIC阵列 适配 于 Firefly 多种软硬件平台 ,接口为USB2.0标准接口,搭配 XFM-AEC(分压板)与 PABasic(功放板),可快速搭建回采信号采样硬件系统;

  • 根据不同的MIC阵列 可匹配相应的CAE阵列算法,支持AIUI云服务,开发者可接入 AIUI 开放平台 获取SDK以及相应的API接口,如需获取测试用的语音软件Demo APK ,点击此资源下载 若想获取Demo源码并商用,可联系官方商务:sales@t-firefly.com

阵列适配

MOD-MIC-4XAnalog (4MIC阵列)

产品视图

_images/4MIC_FRONT.jpg _images/4MIC_BACK.jpg

产品参数

  • 唤醒距离:3~5m

  • 识别距离:3~5m

  • 声源定位:4mic水平180度

  • 定位精度:±15°

更多特性,可见 产品规格书: 资源下载

XFM-USBMEMS-6MIC (6MIC阵列)

产品视图

_images/6MIC_FRONT.jpg _images/6MIC_BACK.jpg

产品参数

  • 唤醒距离:3~5m

  • 识别距离:3~5m

  • 声源定位:6mic360度定位

  • 定位精度:±15°

更多特性,可见 产品规格书: 资源下载

XFM-AEC && PABasic 部件

PABasic 产品视图

_images/PABasic_FRONT.jpg _images/PABasic_BACK.jpg

PABasic 产品参数

PABasic为基础版功放板,帮助客户产品快速获得模拟音频信号放大、DSP音效调节的能力。

更多产品特性,可见 产品规格书: 资源下载

XFM-AEC 产品视图

_images/XFM-AEC.jpg

XFM-AEC 产品参数

⽀持5~12V 回采信号输⼊切换,主要是对回采信号接入后做分压处理,再输出分压电路处理后的音频数据。

更多产品特性,可见 产品规格书: 资源下载

AIUI 演示

AIUI 提供以语音交互为核心的交互解决方案,将讯飞强大的单点交互能力(前端声学处理,语义理解,语音合成,丰富的内容信源)整合为全链路的交互方案提供给广大开发者,开发者可以根据实际的业务需求,利用热词、静态实体、动态实体、所见即可说等特性,进行个性化的优化和改进,提升交互准确率,让人机交互更加流畅,真正的满足和解决用户实际使用中所遇到的问题。

用户在使用 USB语音开发套件 的时候,可接入 AIUI 开放平台 ,利用其提供的丰富API接口,自定义地实现诸如语音唤醒,语音识别,语音降噪,语义理解,语音合成,内容(信源),回声消除(需搭配 XFM-AECPABasic 硬件来实现)、全双工交互(需搭配 XFM-AECPABasic 硬件来实现)等功能。

以下为搭配软硬件的 CAEDemo 演示(如需获取,点击此资源下载) ,均以 Firefly 平台,开源主板 ROC-RK3328-PC 为例 (注:以下的4/6MIC阵列均可与XFM-AECPABasic 进行自由搭配,下面的搭配只是作为例子参考,如果在同一块板子同时验证多种类型的MIC阵列的时候,需要把/sdcard/cae 目录删除,再安装对应的测试APK)

CAEDemo 演示1 (不含 XFM-AEC && PABasic 部件)

用户在拿到 MOD-MIC-4XAnalog 麦克风阵列的时候,可使用测试APK(CAEDemo),来进行4MIC阵列的使用和验证,若搭配不含 XFM-AEC && PABasic 部件,则适用于不需要具备回声消除使用场景,只需要多MIC降噪能力的客户。

验证语音识别

 

硬件接法

使用 usb Type-C 连接 主板和4MIC阵列,如图

_images/4MIC_ASR0.jpg

 

使用说明

用户在打开APK之前,可以先接入网络(网线或者WIFI),连接上服务器,在打开APK之后,看到

_images/4MIC_APK0.png

表示已连接上语音识别的服务器,在点击 开始录音之前,需要给 插入的声卡设备权限,APK默认会给插入的声卡读写权限,无需手动执行操作

  • 确认服务器连接上之后,点击 开始录音 ,如果界面打印开始录音成功 表示正在录音

  • 在录音的时候 打开 保存音频->开始保存。

  • 录音的过程中,可以通过语音关键字 ( 小言,小言 ) ,唤醒语音识别,并进行语音识别操作,示例效果见下文 示例

  • 在想结束录音的时候,点击停止录音和停止保存,保存下来的录音可以在/sdcard/cae 目录,音频分3个文件夹,CAEAsrAudio, CAERawAudio,PcmAudio ,原始音频在 CAERawAudio 目录,语音识别音频保存在 CAEAsrAudio 目录。

  • 由于保存下来的音频都是原始的 PCM 格式的,所以在使用音频软件预览的时候,CAERawAudio 文件夹的音频转化格式为 :

    • 32bit

    • 默认字节序

    • 6 Channels(4MIC阵列)&& 8 Channels(6MIC阵列)

    • 16000Hz

  • CAEAsrAudio 文件夹的音频转化格式则是:

    • 16bit

    • 默认字节序

    • 1 Channel

    • 16000Hz

 

示例效果

在连接上服务器,并开始录音的时候,对着 4MIC 说 小言,小言,今天的天气怎么样 ,Demo 会反馈服务器的识别结果,如图:

_images/4MIC_RECOGNIZE0.png

CAEDemo 演示2 (含 XFM-AEC && PABasic 部件)

用户在拿到 XFM-USBMEMS-6MIC 麦克风阵列的时候,可使用测试APK(CAEDemo),来进行6MIC阵列的使用和验证,若搭配 了 XFM-AEC && PABasic 部件,可适用于需要具备唤醒、降噪、回声消除、人机交互全链路能力的使用场景。

验证回声消除

硬件接法

在 6MIC 搭配上 XFM-AEC && PABasic 部件 的时候,除了 前面的MOD-MIC-4XAnalog 所需的 网络,Tyet-C(6MIC使用的是 Micro USB 接口) 之外,还需要一对 SPeaker 以及 一条双头Linein线,连接如图所示

_images/6MIC_ASR0.jpg

使用说明

用户可在主板上播放任意的音频歌曲,当音频信息从耳机口经过 Line in 线 输出到 PABasic功放板后,信号经过放大和DSP处理之后,一边输出到SPEAKER,向外播放音频,会形成 AE(回声) 另一边则经由XFM-AEC分压板分压后输出到6MIC阵列处,形成 回采信号,此时按照之前的验证语音识别 来操作,6MIC阵列在这个时候就会捕捉到使用者的语音信号,通过算法以及硬件(XFM-AEC&&PABasic)对回声进行消除,利于语音的交互, 如:

通过 PC端软件查看 /sdcard/cae/CAEAsrAudio文件夹内的PCM格式音频 ,可以看到,发送到AIUI平台进行语音交互的音频只有使用者的语音,歌曲的声音是消除掉了。

_images/ASR_WATCH.png

 

常见问题解答

FAQ

如何写入 MAC address?

可以自己改变 ROC-RK3328-PC MAC 地址,进入 RockUSB 模式,然后使用 WNpctool 工具写入 MAC 地址。

接入耳机没有声音

Ubuntu 系统下,在多媒体菜单下运行 PluseAudio Volume Control,在配置项中,选择正在工作中的声卡并屏蔽掉其他。

资源

固件和工具

固件烧写工具:

  • 烧写 SD 卡

    • 图形界面烧写工具:

      • [Etcher] (Linux/Windows/Mac)

    • 命令行烧写工具

      • [dd] (Linux)

  • 烧写 eMMC

文档和参考

硬件规格书和接口

规格书:

扩展口:

_images/hw_expansion_interface.jpg

开发板正面:

_images/hw_board_interface_top_zh_CN.jpg

开发板背面:

_images/hw_board_interface_bottom_zh_CN.jpg

电话咨询
微信咨询
留言