Toybrick

标题: RK3399Pro入门教程(1)认识3399Pro [打印本页]

作者: jefferyzhang    时间: 2019-2-14 10:17
标题: RK3399Pro入门教程(1)认识3399Pro
本帖最后由 jefferyzhang 于 2020-9-8 10:26 编辑

[attach]108[/attach]


对于首次接触3399Pro的同学们,可能对嵌入式环境有所不了解,我们准备编写一系列基础课程让大家上上手。



首先同学们要知道嵌入式开发和PC开发的不同之处,PC纯靠CPU和GPU通过编写程序,不计成本的进行运算,只要肯砸钱,配置越高运算能力越强。但嵌入式平台并不是这样的,嵌入式平台需要兼顾算力、功耗、成本等等因素,一颗好的嵌入式芯片,他要在控制成本和功耗的情况下尽可能的提高特定运算的能力。(划重点:CPU是为了通用运算,而嵌入式芯片将一些特定的运算固化成了芯片电路,大大提高了运算速度、降低了功耗和成本。)而RK3399PRO恰恰就是小编我用过性价比最高,能力最强,最稳定最成熟的嵌入式运算芯片了。


下面就给大家介绍下RK3399PRO的这些特定运算的硬件(注意,以下所有硬件单元皆是独立运作的,也就是说同一时间他们都可以做独立的任务,相互不干扰不等待,考验同学们多线程编码的时候到了):




1. 硬件组成 (RK3399Pro = RK3399 + NPU)


   * CPU : 双核A72 + 四核A53 :
      core0-core3 是小核, core4-core5是大核, 编程深度优化时候可以把cpu的某些运算手动绑定在大核上,可提高通用运算的速度。


   * GPU : Mali T860, 支持OpenGL 2.x 和 OpenCL 1.2 以及 Vulkan
      如果你用的是Linux系统开发,那使用OpenGL和CL时候,从Khronos官网下载对应版本的头文件,加上我们Mali的so库,就可以进行开发了,千万不要从操作系统自带的源里去下载,因为源里默认的都只有CPU版本的gl和cl。
      注:Linux操作系统暂时不支持Vulkan,想玩Vulkan的还是需要安卓系统。

      如果你用的是Android系统开发,那OpenGL和Vulkan就已经是JavaAPI和NDK里自带的了,RK已经对接了GPU,直接使用即可。OpenCL的话依然需要自己下载CL的头文件,配合安卓里system/lib64的GLES的so使用。

     当然如果想利用GPU做运算,这里我建议同学们去ARM的官网下载Arm Computer Lib,它分为Linux和Android两个版本,分别自带的包括arm nn在内的arm cpu/mali gpu的运算封装,可以大大提高大家代码开发效率,毕竟自己徒手写OpenCL还是很复杂的。


   * VPU : RKVdec, VPU2  (视频编解码单元)
      Rockchip最牛逼的地方之一莫过于他的视频编解码模块,其中RKVdec模块可以支持包括H264/H265在内6路1080P/30FPS,或者2路4K/30FPS(支持HDR 10bits),或者同等运算量其他组合形式。而VPU2单独的编码模块,可以在解码的同时,进行2路1080P30FPS的H264编码。(大家对比下PC平台,如果想做到这个程度的编解码,需要砸多少钱、花费多少功率用CPU、GPU来实现)
      如果你是Android系统开发,那么使用Android自带的MediaCodec API,就可以用到所有的VPU能力了,RK已经对接好了。
      如果你是Linux系统开发,那推荐使用RK自己开发的MPP lib来调用VPU编解码(https://github.com/rockchip-linux/mpp),千万不要用操作系统自带的源去安装gstreamer、ffmpeg之类的库,这些库默认都是用cpu编解码的,我们也会发布相关的rpm包来让大家使用rk vpu对接过的gsteamer和ffmpeg,如果想下载源码编译,也可以在https://github.com/rockchip-linux找到。


   * RGA :二维图像辅助计算单元
      这又是Rockchip的神器之一,该单元可以在极短时间内拷贝、旋转、格式转换、缩放、混合 图片,想想在PC上被CPU memcpy支配的恐惧,再回头看看能在短短几个毫秒内内存拷贝一张4K图片,还能同时缩放、旋转、把YUV转成RGB之类的格式转换,用上后就再也不会想用CPU来做这些工作了。
      不论你是Android还是Linux开发者,想用RGA的话都需要使用我们的rga lib来调用,而安卓因为hwc单元一直在使用该器件进行转屏混合工作,所以在安卓上使用rga效率远远低于linux平台。(安卓的librga位置在hardware/rockchip/librga目录里)


   * NPU : 神经网络计算单元
      这是RK3399Pro独有的运算单元,他可以通过传递一张计算图初始化后,不断的喂给他输入数据,而吐出输出数据。这个单元在我们各种文档和直播视频里都介绍了,这里就不再重复描述了。
      不论你是Android还是Linux开发者,都需要单独使用rknn_api lib来调用。


    * PCI-E x 4 接口
       这个不能算是运算单元,但是我还是在这里提下,并不是所有嵌入式芯片都带有PCI-E插槽的,而3399Pro因为有了PCI-E支持,可以非常方便的扩展包括硬盘阵列在内的各种单元。(是不是忽然有种脑洞大开的感觉,觉得这块板子能做更多事情了 :)


好了,今天就先介绍到这里,我们会不断的更新教学,让大家对3399PRO芯片跟得心应手的玩转起来,做更多的产品,让它发挥更大的作用。



BTW,
Toybrick是我们自己做的开发版的一个品牌,Toybrick 不等于 3399pro 也不等于 rk1808,他是一个独立的开发版品牌。请勿和我们sdk搞混。



BTW again,
Toybrick开发版建议拥有一定的编程基础和技术实力的专业人员和本专业的学生使用。

作者: pecado    时间: 2019-2-22 14:38
非常有用的资源,这个板子的视频编解码能力真是强啊
作者: kealen    时间: 2019-3-14 15:31
请问开发板支持Fedora下的Vulkan运算吗?如果支持,应该怎么操作呢?谢谢!
作者: jefferyzhang    时间: 2019-3-14 15:37
kealen 发表于 2019-3-14 15:31
请问开发板支持Fedora下的Vulkan运算吗?如果支持,应该怎么操作呢?谢谢!

fedora的mali.so并不带vulkan。
建议你学习和开发vulkan还是在安卓平台上进行。
作者: Wyong    时间: 2019-4-25 13:36
toybrick登陆写入外置硬盘没有权限,请问:开发板root密码多少?谢谢
作者: jefferyzhang    时间: 2019-4-26 09:20
Wyong 发表于 2019-4-25 13:36
toybrick登陆写入外置硬盘没有权限,请问:开发板root密码多少?谢谢

密码:toybrick
你不知道密码是如何登录系统的?
作者: Wyong    时间: 2019-4-26 11:03
jefferyzhang 发表于 2019-4-26 09:20
密码:toybrick
你不知道密码是如何登录系统的?

资料上有些啊,开机启动,登陆用户名:toybrick,密码:toybrick   .但是外挂固态硬盘写操作就需要root用户名登陆,哪儿也没有找到root用户名登陆的密码。现在问题又来了,toybrick,密码:toybrick 登陆正常,root,密码:toybrick 登陆不进去,不知道是什么原因?

作者: jefferyzhang    时间: 2019-4-26 14:18
Wyong 发表于 2019-4-26 11:03
资料上有些啊,开机启动,登陆用户名:toybrick,密码:toybrick   .但是外挂固态硬盘写操作就需要root用 ...

测试并没有发现这种问题,如果是界面登陆,root用户是被隐藏的,你需要用sudo来提升权限。
也可以尝试直接用root用户登录,密码是一致的。
作者: Wyong    时间: 2019-5-20 18:35
CPU : 双核A72 + 四核A53,开启的先后顺序?
作者: jefferyzhang    时间: 2019-5-21 09:51
Wyong 发表于 2019-5-20 18:35
CPU : 双核A72 + 四核A53,开启的先后顺序?

core0-3 是A53
core4-5 是A72
默认中断在core0上。
其他运行顺序看 cpu调度,也可以自己手动绑定
作者: zlgorithmy    时间: 2019-5-22 11:10
你好,能介绍下Rock-X SDK吗?android平台下,现在能用不,有没有相关资料
作者: jefferyzhang    时间: 2019-5-22 12:13
zlgorithmy 发表于 2019-5-22 11:10
你好,能介绍下Rock-X SDK吗?android平台下,现在能用不,有没有相关资料

正在内测,请关注该社区第一时间获取发布包。

Android和Linux平台下皆可使用,封装了常用的9种模型以及前后处理操作,省去了大家转模型和编码开发前后处理的痛苦。
作者: evalu    时间: 2019-5-28 17:08
有没有视频教程啊?
作者: jefferyzhang    时间: 2019-5-28 17:49
evalu 发表于 2019-5-28 17:08
有没有视频教程啊?

啥东西的视频教程?
作者: evalu    时间: 2019-5-28 18:18
jefferyzhang 发表于 2019-5-28 17:49
啥东西的视频教程?

Toybrick的视频教程
作者: jefferyzhang    时间: 2019-5-29 09:14
evalu 发表于 2019-5-28 18:18
Toybrick的视频教程

首页都有直播,一直在持续更新中
作者: 15024969460    时间: 2019-5-29 14:50
不错学洗了
作者: TryYourBest    时间: 2019-7-3 16:25
用Python在开发板上控制GPIO,有没有对应的Python库?
作者: asher    时间: 2019-7-3 18:31
rk3399Pro上用rknn转化tensorflow模型,内存爆了,直接输出kill,怎么办,如何扩充swap,按照yolo3的扩充swap方法,失败
作者: jefferyzhang    时间: 2019-7-4 08:54
asher 发表于 2019-7-3 18:31
rk3399Pro上用rknn转化tensorflow模型,内存爆了,直接输出kill,怎么办,如何扩充swap,按照yolo3的扩充sw ...

模型太大还是放PC上转吧。。。
作者: cooldog123pp    时间: 2019-7-9 08:43
jefferyzhang 发表于 2019-5-29 09:14
首页都有直播,一直在持续更新中

大神,直播地址发一个
作者: 润城    时间: 2019-7-19 22:37
我的电脑是win10不能装驱动吗?
作者: e768    时间: 2019-8-13 13:24
您好,请问在fedora上移植或编译Arm Compute Lib有教程或可以参考的吗?想进行RK3399 Pro GPU的开发使用,谢谢
作者: snsing    时间: 2019-8-29 10:40
版主你好下载https://github.com/rockchip-linux/kernel怎么单独编译Linux的内核。
我现在想单独编译Linux的内核,不知怎么下手,没有找到一篇指导文档。
劳驾,谢谢、
作者: snsing    时间: 2019-8-29 10:56
版主,怎么单独编译Linux的内核呢?没有找到一个文档说明。
作者: jefferyzhang    时间: 2019-8-29 12:42
snsing 发表于 2019-8-29 10:56
版主,怎么单独编译Linux的内核呢?没有找到一个文档说明。

RK的kernel符合开源社区标准,并无改动kernel关键性源码和编译部分。
kernel源码如何编译,rk-kernel的源码就如何编译,没有特别的地方.
wiki上也有详细的源码编译说明
作者: snsing    时间: 2019-8-29 14:04
本帖最后由 snsing 于 2019-8-29 14:15 编辑
jefferyzhang 发表于 2019-8-29 12:42
RK的kernel符合开源社区标准,并无改动kernel关键性源码和编译部分。
kernel源码如何编译,rk-kernel的源 ...

我现在手里的板子是Toybrick TB-RK3399ProD开发板。
想单独编译Linux的内核。
内核下载地址https://github.com/rockchip-toybrick/kernel?sid=获得的
编译参考wiki:http://t.rock-chips.com/wiki.php?mod=view&id=26. 执行./make.sh linux prod编译。


sns@sns:/media/sns/videoV3/RK3399ProD/kernel-stable$ ./make.sh linux prod
#
# configuration written to .config
#
scripts/kconfig/conf  --silentoldconfig Kconfig
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/timeconst.h
  CC      kernel/bounds.s
  CC      scripts/mod/empty.o
  CC      scripts/mod/devicetable-offsets.s
gcc: error: unrecognized command line option '-mlittle-endian'
gcc: error: unrecognized command line option '-mgeneral-regs-only'
make[1]: *** [kernel/bounds.s] 错误 1
make[1]: *** 正在等待未完成的任务....
make: *** [prepare0] 错误 2gcc: error: unrecognized command line option '-mlittle-endian'

make: gcc: error: unrecognized command line option '-mgeneral-regs-only'
*** 正在等待未完成的任务....
gcc: error: unrecognized command line option '-mlittle-endian'
gcc: error: unrecognized command line option '-mgeneral-regs-only'
make[2]: *** [scripts/mod/empty.o] 错误 1
make[2]: *** 正在等待未完成的任务....
make[2]: *** [scripts/mod/devicetable-offsets.s] 错误 1
make[1]: *** [scripts/mod] 错误 2
make[1]: *** 正在等待未完成的任务....
make: *** [scripts] 错误 2
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  HOSTCC  scripts/extract-cert
  CC      scripts/mod/empty.o
  CC      scripts/mod/devicetable-offsets.s
  CHK     include/generated/utsrelease.h
gcc: error: unrecognized command line option '-mlittle-endian'
gcc: error: unrecognized command line option '-mgeneral-regs-only'
gcc: error: unrecognized command line option '-mlittle-endian'
gcc: error: unrecognized command line option '-mgeneral-regs-only'
make[2]: *** [scripts/mod/devicetable-offsets.s] 错误 1
make[2]: *** 正在等待未完成的任务....
make[2]: *** [scripts/mod/empty.o] 错误 1
make[1]: *** [scripts/mod] 错误 2
make[1]: *** 正在等待未完成的任务....
  CHK     include/generated/timeconst.h
  CC      kernel/bounds.s
gcc: error: unrecognized command line option '-mlittle-endian'
gcc: error: unrecognized command line option '-mgeneral-regs-only'
make[1]: *** [kernel/bounds.s] 错误 1
make: *** [prepare0] 错误 2
make: *** 正在等待未完成的任务....
make: *** [scripts] 错误 2
cp: 无法获取"arch/arm64/boot/dts/rockchip/rk3399pro-toybrick-prod-linux-edp.dtb" 的文件状态(stat): 没有那个文件或目录
cp: 无法获取"arch/arm64/boot/dts/rockchip/rk3399pro-toybrick-prod-linux-mipi.dtb" 的文件状态(stat): 没有那个文件或目录
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CC      scripts/mod/empty.o
  CC      scripts/mod/devicetable-offsets.s
  CHK     include/generated/utsrelease.h
gcc: error: unrecognized command line option '-mlittle-endian'
gcc: error: unrecognized command line option '-mlittle-endian'
gcc: error: unrecognized command line option '-mgeneral-regs-only'
gcc: error: unrecognized command line option '-mgeneral-regs-only'
make[2]: *** [scripts/mod/devicetable-offsets.s] 错误 1
make[2]: *** 正在等待未完成的任务....
make[2]: *** [scripts/mod/empty.o] 错误 1
make[1]: *** [scripts/mod] 错误 2
make: *** [scripts] 错误 2
make: INTERNAL: Exiting with 17 jobserver tokens available; should be 16!
cp: 无法获取"arch/arm64/boot/dts/rockchip/rk3399pro-toybrick-prod-linux.dtb" 的文件状态(stat): 没有那个文件或目录
cp: 无法获取"arch/arm64/boot/dts/rockchip/rk3399pro-toybrick-prod-linux.dtb" 的文件状态(stat): 没有那个文件或目录
cp: 无法获取"arch/arm64/boot/Image" 的文件状态(stat): 没有那个文件或目录
sns@sns:/media/sns/videoV3/RK3399ProD/kernel-stable$ ls
android              build.config.cuttlefish.aarch64  crypto         fs                                         Kbuild    logo_kernel.bmp  net             security              virt
arch                 build.config.cuttlefish.x86_64   Documentation  include                                    Kconfig   MAINTAINERS      README          sound
backported-features  certs                            drivers        init                                       kernel    Makefile         REPORTING-BUGS  tools
block                COPYING                          extlinux.conf  initramfs-4.4-1.rockchip.fc28.aarch64.img  lib       make.sh          samples         usr
boot_linux.img       CREDITS                          firmware       ipc                                        logo.bmp  mm               scripts         verity_dev_keys.x509
sns@sns:/media/sns/videoV3/RK3399ProD/kernel-stable$


你说交叉编译怎么配置,不太清楚。能详细一点吗?
作者: jefferyzhang    时间: 2019-8-29 14:18
下载一个交叉编译环境放在跟kernel同级的目录。
实在不懂的话看下Makefile里的gcc路径就知道怎么放了
作者: kepurSong    时间: 2019-8-31 17:49
asher 发表于 2019-7-3 18:31
rk3399Pro上用rknn转化tensorflow模型,内存爆了,直接输出kill,怎么办,如何扩充swap,按照yolo3的扩充sw ...

直接网上搜索一下如何扩展swap就能解决了,这个是容易解决的
作者: 我是大表书    时间: 2019-12-10 16:31
楼主,请问,我用opencl gpu加速 利用率在1%,感觉不到速度变快是怎么回事儿
作者: jefferyzhang    时间: 2019-12-10 17:14
我是大表书 发表于 2019-12-10 16:31
楼主,请问,我用opencl gpu加速 利用率在1%,感觉不到速度变快是怎么回事儿

我都比较好奇你1%哪里看到的结果- -# ,我们板子上貌似看不到这个gpu占用率吧?
外加gpu用cl得看你程序写的怎么样,不是你随便写两行代码gpu就能用到100%的,cpu和gpu的交互损耗会比较大,如果代码能减少cpu和gpu的交互,利用率就会上去
作者: lipandeng    时间: 2020-4-30 09:47
snsing 发表于 2019-8-29 10:56
版主,怎么单独编译Linux的内核呢?没有找到一个文档说明。

你好,请问你编译成功了,可否交流分享下,谢谢
作者: charles-hu    时间: 2020-10-27 11:54
jefferyzhang 发表于 2019-5-21 09:51
core0-3 是A53
core4-5 是A72
默认中断在core0上。

您好!请问如何手动绑定CPU呢?在哪里可以查到资料呢?
作者: jefferyzhang    时间: 2020-10-27 12:38
charles-hu 发表于 2020-10-27 11:54
您好!请问如何手动绑定CPU呢?在哪里可以查到资料呢?

自行百度,linux c 标准用法
作者: rolexe    时间: 2020-12-7 11:32
root用户用toybrick密码登陆不了界面。su提升了权限
作者: lidd    时间: 2021-1-22 11:29
我这里想要一些 NPU 相关的文档 和直播录制 视频 请问有吗 我想用NPU 请问怎么用呢
作者: xianminglin    时间: 2021-2-4 13:34
请问:VPU 支持4K的编码吗?
作者: jefferyzhang    时间: 2021-2-4 14:15
xianminglin 发表于 2021-2-4 13:34
请问:VPU 支持4K的编码吗?

3399/3399pro均不支持
作者: sallycjf    时间: 2021-3-31 14:28
非常有用的资料,正在找学习较差
作者: Bone1    时间: 2021-4-21 21:04

非常有用的资源,RK3399Pro功能太强大了。
作者: kiwigogogo    时间: 2021-10-14 12:43
你好,请问RK3399Pro的NPU是 RK1808吗?
作者: jefferyzhang    时间: 2021-10-14 14:11
kiwigogogo 发表于 2021-10-14 12:43
你好,请问RK3399Pro的NPU是 RK1808吗?

是的,同款NPU
作者: shuoshuoeryi    时间: 2021-11-6 17:35
你好,请问:RK3399Pro的PCIE或者MIPI接口支持2K*2K*60帧的数字视频读取吗?
作者: hiCrystal    时间: 2023-6-19 10:01
请问这个教程适用于3588吗?
作者: jefferyzhang    时间: 2023-6-19 11:43
hiCrystal 发表于 2023-6-19 10:01
请问这个教程适用于3588吗?

基本是一样的, 除了配置更高
作者: Gang    时间: 2023-6-27 14:58
请问版主,我想在3399Prox上使用PWM,哪里有相关的教程啊?





欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3