Toybrick

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

作者: jefferyzhang    时间: 2019-2-14 10:17
标题: RK3399Pro入门教程(1)认识3399Pro

[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芯片跟得心应手的玩转起来,做更多的产品,让它发挥更大的作用。


作者: 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的交互,利用率就会上去




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