Firefly Debian 使用手册

Debian 是一个根文件系统,所以只需要将 Firefly 官方提供的固件的 rootfs.img 根文件系统替换成 Debian 根文件系统即可制作 Debian 系统固件。

固件制作

资源下载页面下载官方固件。

.
├── aio-rv1126-jd4-ipc.cfg
├── boot_1109.img
├── boot_1126.img
├── MiniLoaderAll.bin
├── misc.img
├── oem.img
├── parameter.txt
├── readme.txt
├── recovery.img
├── rootfs.img
├── uboot.img
└── userdata.img

资源下载页面下载Debian10根文件系统。

./
├── debian10.cfg		# 替换 aio-rv1126-jd4-ipc.cfg
├── parameter.txt		# 替换 parameter.txt
└── rootfs.img			# 替换 rootfs.img 

替换对应文件,并根据《固件升级》一节,升级固件即可进入 Debian10 系统

系统介绍

软件包

以下软件包已默认安装到 Debian 系统,使用 apt install 安装软件的时候注意不要覆盖掉系统的软件包。

Gstreamer
libdrm
libv4l

视频硬件编解码支持

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

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

一、Gstreamer

  • 默认安装 gstreamer1.0

#测试硬件 H264 解码。
gst-launch-1.0 filesrc location="/home/firefly/test.mp4" ! qtdemux ! h264parse ! mppvideodec ! kmssink

#测试硬件 H264 编码。
gst-launch-1.0 filesrc location=/home/firefly/video-640x360.yuv ! rawvideoparse use-sink-caps=false format=GST_VIDEO_FORMAT_I420 width=640 height=360 ! video/x-raw,width=640,height=360 ! mpph264enc ! queue ! h264parse ! qtmux ! filesink location=/home/firefly/yuv2h264.mp4

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

二、MPP

  • Debian 系统下, mpp 相关 deb 包都已经安装到系统中。

更多相关资料,可参考linux-sdk/docs/Linux/Multimedia下的相关文档

源码编译

RKNN_SSD_DEMO

  • NPU 已经安装到 Debian 系统。测试 NPU 如下: 测试 demo 为 rknn_ssd_demo 。源码路径为 external/rknpu/rknn/rknn_api/examples/rknn_ssd_demo。以下操作均在 RV1126 端执行:

#安装编译工具
sudo apt install cmake make

#安装 opencv 编译环境
sudo apt install libopencv-dev libopencv-highgui-dev

#修改 CMakeLists.txt
target_link_libraries(rknn_ssd_demo rknn_api opencv_core opencv_highgui
					opencv_imgcodecs opencv_videoio opencv_imgproc
)

#编译
cmake ./
make

#执行程序
./rknn_ssd_demo model/ssd_inception_v2_rv1109_rv1126.rknn model/road.bmp

#效果如下:
root@firefly:/home/firefly/rknn_ssd_demo# ./rknn_ssd_demo model/ssd_inception_v2_rv1109_rv1126.rknn model/road.bmp 
Loading model ...
model input num: 1, output num: 2
input tensors:
index=0 name= n_dims=4 dims=[1 300 300 3] n_elems=270000 size=270000 fmt=0 type=3 qnt_type=2 fl=127 zp=127 scale=0.007843
output tensors:
index=0 name= n_dims=4 dims=[1 1917 1 4] n_elems=7668 size=7668 fmt=0 type=3 qnt_type=2 fl=-76 zp=180 scale=0.089482
index=1 name= n_dims=3 dims=[0 1 1917 91] n_elems=174447 size=174447 fmt=0 type=3 qnt_type=2 fl=-66 zp=190 scale=0.137463
rknn_run
loadLabelName
ssd - loadLabelName ./model/coco_labels_list.txt
loadBoxPriors
person @ (13 125 58 212) 0.984076
bicycle @ (171 165 278 234) 0.972723
person @ (110 119 152 197) 0.968828
person @ (206 113 256 216) 0.964399
car @ (146 133 217 170) 0.959365
person @ (83 134 92 158) 0.634101
person @ (49 133 58 156) 0.601661
person @ (96 134 105 162) 0.465688

RKMedia

  • RKMedia 已经适配到 Debian 系统。默认不支持 librtsp 库。

  • 如需自行开发 RKMedia 则 CMakeLists.txt 编译脚本需要添加以下选项:

add_definitions( -D_FILE_OFFSET_BITS=64)
  • 默认不支持以下 4 个 demo,所以在 rkmedia/example/CMakeLists.txt 需要注释以下 4 个 demo 的编译配置

rkmedia_vi_venc_rtsp_test
rkmedia_rga_crop_venc_test
rkmedia_vi_rockx_venc_rtsp_test
rkmedia_vi_rknn_venc_rtsp_test
  • 搭建编译环境

#安装调试工具
sudo apt update
sudo apt install xterm
# 安装 xterm 软件可使用 resize 命令,根据自主需求进行安装

#安装编译工具
#系统默认安装了 gcc 和 g++ 工具
sudo apt install cmake make liblivemedia-dev

#在 rkmedia 目录执行以下命令
rkmedia 源码在 external/rkmedia 目录

# cmake 配置
cmake ./   -DCMAKE_COLOR_MAKEFILE=OFF -DBUILD_DOC=OFF -DBUILD_DOCS=OFF -DBUILD_EXAMPLE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF -DBUILD_TESTS=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON  -DWARNINGS_AS_ERRORS=ON -DUSE_RKAIQ=ON  -DRKMPP=ON -DRKMPP_LIB_NAME=rockchip_mpp -DRKMPP_ENCODER=ON -DRKMPP_ENCODER_OSD=ON -DRKMPP_DECODER=ON   -DAUDIO_ENCODER=ON -DAUDIO_DECODER=ON -DALSA_PLAYBACK=ON -DALSA_CAPTURE=ON -DAUDIO_ALGORITHM=ON -DV4L2_CAPTURE=ON  -DRKRGA=ON -DRKGUARD=ON -DRKNN=ON  -DROCKFACE=OFF -DFACE_RECOGNIZE=OFF -DROCKX=ON   -DDRM_DISPLAY=ON -DLIVE555=ON   -DLIVE555_SERVER=ON -DLIVE555_SERVER_H264=ON -DLIVE555_SERVER_H265=ON -DMOVE_DETECTION=ON -DOCCLUSION_DETECTION=ON  -DCOMPILES_EXAMPLES=ON -DCONFIG_OEM=1  

# 编译
make
# 安装
make install

注:在 Debian 编译 RKMedia 会出现找不到头文件的错误,头文件均在/usr/include/目录下,需要根据源码文件需求移动或拷贝头文件的位置。

分区介绍

如果自己定制 Debian10 系统可以阅读此章节修改分区后进行升级。

修改固件目录下的分区表parameter.txt,根据需求修改rootfs分区大小。默认为大小为 2G 。PS:因为 Debian10 下没有跑应用,不需要media分区所以删掉了。

CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00400000@0x00038000(rootfs),0x00060000@0x00438000(oem),-@0x00498000(userdata:grow)

分区表格式:分区大小@所在地址(分区名)。最后的-@所在地址(分区名:grow)的 - 代表将剩余的内存大小拓展该分区,该写法只能放在 CMDLINE 最后。 其中大小和地址都是以块为单位 1 = 512byte),换算成 MByte 可以用以下公式:

MByte = N * 512 / 1024 / 1024

例如我们看 rootfs 这行: 分区大小是 0x00400000 ,换算成十进制也就是

4194304   * 512 字节每块 / 1024 / 1024 = 2048 MByte

所以 rootfs 分区大小就是 2048M 。

  • 特别注意:分区大小 + 所在地址 = 下一个分区的所在地址