野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2060|回复: 1

[经验\资料] 基于rk356x和rk3588的debian12系统演示

[复制链接]
发表于 2023-12-28 10:25:16 | 显示全部楼层 |阅读模式
前言
视频地址:【[鲁班猫氛围赛第二期] 基于rk356x和rk3588的debian12系统演示】 https://www.bilibili.com/video/BV14j411n7vV/?share_source=copy_web&vd_source=542a2a5636c4dc8ecedd9cd569376bff
目的
  • 野火鲁班猫官方推荐的固件是 debian10 和 debian11 , 目前对于debian12来说有点老旧,因此,选用了debian12作为的根文件系统。
  • rk356x对于的内核版本是4.19.232 比较老旧,目前rk正在维护的内核是5.10 和 6.1 为了兼顾稳定,所以选用了5.10作为系统的内核。
  • 由于鲁班猫烧录镜像后会有第一次启动的过程,这个过程被打断了,系统就要重新烧录才能正常使用了,如果说供电不足的话也会导致第一启动,为了解决这个问题,我在uboot适配了多板卡公用一个系统的功能,在uboot启动时自动根据设备id的不同选择对应的设备树,而且修改起来非常简单,只需要修改boot分区中的一个boot  script脚本即可
  • 鲁班猫官方推荐的固件中,并不带有支持rkmpp的ffmpeg,使用ffmpeg时无法使用他的硬件加速功能,所以,我这边就暂时移植了一个支持rkmpp的ffmpeg,由于时间问题,里面的一些依赖问题还存在一点问题,但是经测试也是能用了rkmpp的硬件加速。
  • 关于gpu部分,野火官方用的是libmali,个人觉得libmali不是很喜欢,然后新系统中使用的是开源的mesa,rk356x和rk3588上面使用的是不一样的,但是也没有影响他们的正常使用。
  • 关于系统部分的话,boot目录使用fat格式,为的是在sd卡烧录中可以修改sd卡中的内容,从而修改自己的更改
问题
  • 目前wifi还有问题,没办法直接用nmtui,ow没有网口,相当于0w不能直接用
  • 猫0n的网口还存在问题,设备树还待调整,0n的朋友要等等才能用
  • 系统构建还需要调整,一开始是以lubancat2为目的做的,编译流程还需要优化
  • 红外遥控目前还没法使用,设备树存在点问题,所以先把该功能屏蔽了
  • ffmpeg目前还存在一点点问题,但是也能调用mpp进行加速,但是还是会存在一点点的问题,大体不影响使用
  • debian12 使用的默认功耗管理,五分钟不到桌面会息屏,十分钟不动桌面会进入待机。该功能需要到设置里面配置,目前没时间调
  • rk356x的gpu目前还没有默认配置为最大频率,使用的是自动频率
  • 音频输出目前还有点问题,hdmi暂时没办法输出声音,耳机接口需要使用alsamixer配置才能正常输出音频
  • u-boot启动加载图片的功能暂时没法实现,后续会研究添加进去
  • chroium浏览器目前还没支持ffmpeg的插件,后续会修改chroium为其添加ffmpeg插件,使浏览器播放视频更顺畅
镜像说明
  • 镜像 : 存放着鲁班猫运行所需要的镜像
  • 工具 : 存放有一些软件用来给鲁班猫烧录使用
工具
  • balenaEtcher-Setup-1.18.4.exe : sd卡烧录镜像的工具
  • DriverAssitant v5.11.zip : 瑞芯微usb驱动
  • win32diskimager-1.0.0-installexe : sd卡烧录镜像的工具
  • 镜像刷机方法.txt : emmc和sd卡的烧录方法,抄rk3588s ubuntu22.04的
  • RKDevTool v3.15 for window.zip : emmc烧录镜像工具·
  • rufus-4.3.exe : sd卡烧录镜像的工具(推荐使用)
镜像
  • 镜像中会有日期,每个日期对应着不同时间发表的

  • rk3588 : 给鲁班猫4用的
  • rk356x : 给带有rk3566,rk3568的板子用的

  • server : 该镜像为不带桌面的镜像
  • desktop : 该镜像为带桌面的镜像
镜像烧录windows平台上SD卡烧录
  • 需要准备一张大于8G的内存卡
  • sd卡镜像烧录工具(推荐 rufus, balenaEtcher, Win32DiskImager)
  • 镜像(rk356x 和 rk3588的镜像是不一样的)
我这边使用rufus烧录工具 和 rk356x镜像作为示范
  • 先把镜像下载
  • 解压镜像
  • 打开rufus

4. 选择镜像

5. 下载镜像

6. 烧录成功
烧录成功后就可以看到下面的情况(sd卡被格式化成两个分区,分区1是BOOT分区,能正常打开,分区2是文件系统分区不能直接打开)


windows平台上emmc烧录
  • 需要准备一个大于或等于8G的emmc的鲁班猫板卡
  • 瑞芯微的驱动和瑞芯微的烧录工具
  • 镜像(rk356x 和 rk3588的镜像是不一样的)
操作方法
  • 先把镜像下载
  • 解压镜像
  • 打开 DriverAssitant_v5.11.zip软件,先卸载驱动

4. 然后重新安装驱动

5. maskrom模式 (如果不懂,去鲁班猫快速使用手册中烧录镜像的章节中学习)
6. 下载并解压 RKDevTool_v3.15_for_window.zip

7. 选取对应的文件(miniloader)

8. 选取镜像

9. 点击 执行进行烧录
如果烧录不成功可以重复尝试
系统演示系统使用
root
  1. root用户
  2. 用户名:root
  3. 密码:root
复制代码

user
  1. cat用户
  2. 用户名:cat
  3. 密码:temppwd
复制代码

桌面系统演示
  • 锁屏解锁演示

  • 桌面端镜像会显示出出一个蓝色的框,该框为用户登录的框
  • 点击之后右下角会有个齿轮的图案

  • 齿轮是用来切换不同的桌面端以及不同的渲染器

  • GNOME : 为最新的gnome桌面风格
  • GNOME Classic : 为经典版的gnome桌面风格
  • on Xorg : 为使用X11渲染桌面,不选是使用wayland作为渲染桌面
输入密码temppwd,即可进入桌面,如图下

  • 进入设置查看系统信息

可以看到下面的信息
  • 设备名称为lubancat
  • 内存大小为1.9GB
  • 图形渲染器为Mali-G52 r1(Panfrost)/ Software Rendering / Mali-G52 r1(Panfrost) 其中包括了硬件GPU渲染以及CPU渲染
  • 硬盘大小为31.3 GB
  • 系统名称为Debian GNU/Linux12(bookworm),系统架构是64位的
  • gonme桌面的版本是43.9
  • 窗口渲染系统是Wayland
2.  浏览器功能演示

  • 可以看到使用chroium时,内存和cpu的占用率会比较高,因此使用浏览器时,推荐使用2GB或者2GB内存以上的板子进行操作
3. ffmpeg
  1. root@lubancat:~# ffmpeg -codecs | grep rkmpp
  2. ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
  3.   built with gcc 12 (Debian 12.2.0-14)
  4. DEV.L. av1                  Alliance for Open Media AV1 (decoders: av1_rkmpp_decoder libdav1d libaom-av1 av1 ) (encoders: libaom-av1 libsvtav1 )
  5. DEV.L. h263                 H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 (decoders: h263_rkmpp_decoder h263 h263_v4l2m2m ) (encoders: h263 h263_v4l2m2m )
  6. DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264_rkmpp_decoder h264 h264_v4l2m2m ) (encoders: h264_rkmpp_encoder libx264 libx264rgb h264_v4l2m2m h264_vaapi )
  7. DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc_rkmpp_decoder hevc hevc_v4l2m2m ) (encoders: hevc_rkmpp_encoder libx265 hevc_v4l2m2m hevc_vaapi )
  8. DEV.L. mpeg1video           MPEG-1 video (decoders: mpeg1_rkmpp_decoder mpeg1video mpeg1_v4l2m2m )
  9. DEV.L. mpeg2video           MPEG-2 video (decoders: mpeg2_rkmpp_decoder mpeg2video mpegvideo mpeg2_v4l2m2m ) (encoders: mpeg2video mpeg2_vaapi )
  10. DEV.L. mpeg4                MPEG-4 part 2 (decoders: mpeg4_rkmpp_decoder mpeg4 mpeg4_v4l2m2m ) (encoders: mpeg4 libxvid mpeg4_v4l2m2m )
  11. DEV.L. vp8                  On2 VP8 (decoders: vp8_rkmpp_decoder vp8 vp8_v4l2m2m libvpx ) (encoders: vp8_rkmpp_encoder libvpx vp8_v4l2m2m vp8_vaapi )
  12. DEV.L. vp9                  Google VP9 (decoders: vp9_rkmpp_decoder vp9 vp9_v4l2m2m libvpx-vp9 ) (encoders: libvpx-vp9 vp9_vaapi )
复制代码

  • 可以看到移植的这个ffmpeg是具有rkmpp的硬件加速功能,可以实现对视频的编解码
  • 除此之外还具有ffmpeg的转码能力
  • 当前存在一个3840x2160@25fps h265格式的视频
  1. root@lubancat:/home/cat# ffprobe 4k_25fps_h265.mkv
  2. ffprobe version 6.0 Copyright (c) 2007-2023 the FFmpeg developers
  3.   built with gcc 12 (Debian 12.2.0-14)
  4.   Metadata:
  5.     MINOR_VERSION   : 512
  6.     COMPATIBLE_BRANDS: isomiso2avc1mp41
  7.     MAJOR_BRAND     : isom
  8.     ENCODER         : Lavf60.4.100
  9.   Duration: 00:00:20.40, start: 0.000000, bitrate: 13579 kb/s
  10.   Stream #0:0: Video: hevc (Main), yuv420p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn (default)
  11.     Metadata:
  12.       HANDLER_NAME    : VideoHandler
  13.       VENDOR_ID       : [0][0][0][0]
  14.       ENCODER         : Lavc60.6.101 hevc_qsv
  15.       DURATION        : 00:00:20.400000000
  16. [hevc_rkmpp_decoder [url=home.php?mod=space&uid=5830]@[/url] 0xaaaab3354960] Picture format is yuv420p.
复制代码

  • 使用下列命令进行对视频的编解码
  1. cat@lubancat:~$ ffmpeg -i 4k_25fps_h265.mkv -c:v h264 4k_25fps_h264.mkv
  2. ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
  3.   built with gcc 12 (Debian 12.2.0-14)
  4. Input #0, matroska,webm, from '4k_25fps_h265.mkv':
  5.   Metadata:
  6.     MINOR_VERSION   : 512
  7.     COMPATIBLE_BRANDS: isomiso2avc1mp41
  8.     MAJOR_BRAND     : isom
  9.     ENCODER         : Lavf60.4.100
  10.   Duration: 00:00:20.40, start: 0.000000, bitrate: 13579 kb/s
  11.   Stream #0:0: Video: hevc (Main), yuv420p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn (default)
  12.     Metadata:
  13.       HANDLER_NAME    : VideoHandler
  14.       VENDOR_ID       : [0][0][0][0]
  15.       ENCODER         : Lavc60.6.101 hevc_qsv
  16.       DURATION        : 00:00:20.400000000
  17. [hevc_rkmpp_decoder @ 0xaaaac58dd480] Picture format is nv12.
  18. Stream mapping:
  19.   Stream #0:0 -> #0:0 (hevc (hevc_rkmpp_decoder) -> h264 (h264_rkmpp_encoder))
  20. Press [q] to stop, [?] for help
  21. [hevc_rkmpp_decoder @ 0xaaaac58dd480] Decoder noticed an info change
  22. [h264_rkmpp_encoder @ 0xaaaac58de710] Picture format is nv12.
  23. [h264_rkmpp_encoder @ 0xaaaac58de710] Rate Control mode is set to CBR
  24. [h264_rkmpp_encoder @ 0xaaaac58de710] Bitrate Target/Min/Max is set to 6000000/5625000/6375000
  25. [h264_rkmpp_encoder @ 0xaaaac58de710] Profile is set to HIGH
  26. [h264_rkmpp_encoder @ 0xaaaac58de710] 8x8 Transform is enabled
  27. [h264_rkmpp_encoder @ 0xaaaac58de710] Level is set to 0
  28. [h264_rkmpp_encoder @ 0xaaaac58de710] Coder is set to CABAC
  29. [h264_rkmpp_encoder @ 0xaaaac58de710] Quality Min/Max is set to 50%(Quant=30) / 100%(Quant=10)
  30. Output #0, matroska, to '4k_25fps_h264.mkv':
  31.   Metadata:
  32.     MINOR_VERSION   : 512
  33.     COMPATIBLE_BRANDS: isomiso2avc1mp41
  34.     MAJOR_BRAND     : isom
  35.     encoder         : Lavf60.3.100
  36.   Stream #0:0: Video: h264 (High) (H264 / 0x34363248), nv12(tv, bt709, progressive), 3840x2160, q=2-31, 6000 kb/s, 25 fps, 1k tbn (default)
  37.     Metadata:
  38.       HANDLER_NAME    : VideoHandler
  39.       VENDOR_ID       : [0][0][0][0]
  40.       DURATION        : 00:00:20.400000000
  41.       encoder         : Lavc60.3.100 h264_rkmpp_encoder
  42. [h264_rkmpp_encoder @ 0xaaaac58de710] Reconfigured with w=3840, h=2160, format=nv12.
  43. frame=  509 fps= 18 q=-0.0 Lsize=   19461kB time=00:00:20.32 bitrate=7845.6kbits/s speed=0.709x
  44. video:19456kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.026206%
复制代码

  • 最终生成的文件
  1. cat@lubancat:~$ ffprobe 4k_25fps_h264.mkv
  2. ffprobe version 6.0 Copyright (c) 2007-2023 the FFmpeg developers
  3.   built with gcc 12 (Debian 12.2.0-14)
  4. Input #0, matroska,webm, from '4k_25fps_h264.mkv':
  5.   Metadata:
  6.     MAJOR_BRAND     : isom
  7.     MINOR_VERSION   : 512
  8.     COMPATIBLE_BRANDS: isomiso2avc1mp41
  9.     ENCODER         : Lavf60.3.100
  10.   Duration: 00:00:20.36, start: 0.000000, bitrate: 7830 kb/s
  11.   Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 3840x2160, 25 fps, 25 tbr, 1k tbn (default)
  12.     Metadata:
  13.       HANDLER_NAME    : VideoHandler
  14.       VENDOR_ID       : [0][0][0][0]
  15.       ENCODER         : Lavc60.3.100 h264_rkmpp_encoder
  16.       DURATION        : 00:00:20.360000000
  17. [h264_rkmpp_decoder @ 0xaaab1ea24280] Picture format is yuv420p.
复制代码

4. DDnet游戏展示
  • 目前知道一款为ddnet的游戏,该游戏需要gpu驱动才能流畅游玩,如果使用纯cpu渲染是会十分的卡顿的
  • 可以看视频获得更详细的说明
跑分测试rk356x - gpu跑分
  1. =======================================================
  2.     glmark2 2023.01
  3. =======================================================
  4.     OpenGL Information
  5.     GL_VENDOR:      Panfrost
  6.     GL_RENDERER:    Mali-G52 r1 (Panfrost)
  7.     GL_VERSION:     3.1 Mesa 22.3.6
  8.     Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0
  9.     Surface Size:   800x600 windowed
  10. =======================================================
  11. [build] use-vbo=false: FPS: 329 FrameTime: 3.042 ms
  12. [build] use-vbo=true: FPS: 431 FrameTime: 2.322 ms
  13. [texture] texture-filter=nearest: FPS: 824 FrameTime: 1.215 ms
  14. [texture] texture-filter=linear: FPS: 827 FrameTime: 1.210 ms
  15. [texture] texture-filter=mipmap: FPS: 636 FrameTime: 1.573 ms
  16. [shading] shading=gouraud: FPS: 286 FrameTime: 3.497 ms
  17. [shading] shading=blinn-phong-inf: FPS: 287 FrameTime: 3.485 ms
  18. [shading] shading=phong: FPS: 280 FrameTime: 3.575 ms
  19. [shading] shading=cel: FPS: 281 FrameTime: 3.567 ms
  20. [bump] bump-render=high-poly: FPS: 102 FrameTime: 9.830 ms
  21. [bump] bump-render=normals: FPS: 688 FrameTime: 1.454 ms
  22. [bump] bump-render=height: FPS: 690 FrameTime: 1.451 ms
  23. [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 538 FrameTime: 1.860 ms
  24. [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 190 FrameTime: 5.264 ms
  25. [pulsar] light=false:quads=5:texture=false: FPS: 547 FrameTime: 1.831 ms
  26. [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 185 FrameTime: 5.414 ms
  27. [desktop] effect=shadow:windows=4: FPS: 396 FrameTime: 2.526 ms
  28. [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 46 FrameTime: 21.897 ms
  29. [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 46 FrameTime: 21.820 ms
  30. [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 53 FrameTime: 19.060 ms
  31. [ideas] speed=duration: FPS: 244 FrameTime: 4.103 ms
  32. [jellyfish] <default>: FPS: 353 FrameTime: 2.833 ms
  33. [terrain] <default>: FPS: 24 FrameTime: 42.108 ms
  34. [shadow] <default>: FPS: 191 FrameTime: 5.241 ms
  35. [refract] <default>: FPS: 26 FrameTime: 39.653 ms
  36. [conditionals] fragment-steps=0:vertex-steps=0: FPS: 640 FrameTime: 1.564 ms
  37. [conditionals] fragment-steps=5:vertex-steps=0: FPS: 625 FrameTime: 1.602 ms
  38. [conditionals] fragment-steps=0:vertex-steps=5: FPS: 620 FrameTime: 1.615 ms
  39. [function] fragment-complexity=low:fragment-steps=5: FPS: 623 FrameTime: 1.606 ms
  40. [function] fragment-complexity=medium:fragment-steps=5: FPS: 560 FrameTime: 1.786 ms
  41. [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 652 FrameTime: 1.535 ms
  42. [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 463 FrameTime: 2.164 ms
  43. [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 456 FrameTime: 2.195 ms
  44. =======================================================
  45.                                   glmark2 Score: 397
  46. =======================================================
复制代码

环境构建编译系统需求
  • Ubuntu 20.04 or 22.04
  • 4G RAM
  • 30G 存储
To to set up the build environment, please use a Ubuntu 20.04 or 22.04 machine, then install the below packages:
  1. sudo apt-get install -y build-essential gcc-aarch64-linux-gnu bison \
  2. qemu-user-static qemu-system-arm qemu-efi u-boot-tools binfmt-support \
  3. debootstrap flex libssl-dev bc rsync kmod cpio xz-utils fakeroot parted \
  4. udev dosfstools uuid-runtime git-lfs device-tree-compiler python2 python3 \
  5. python-is-python3 fdisk bc
复制代码

And you need to install genimage
  1. apt-get install pkg-config genext2fs libconfuse-dev
  2. git clone https://github.com/pengutronix/genimage.git
  3. cd genimage
  4. ./autogen.sh
  5. ./configure CFLAGS='-g -O0' --prefix=/usr
  6. make install
  7. which genimage
复制代码

系统构建
构建前请完成环境的构建
rk3568 - debian12系统构建
git clone https://github.com/kalous12/rockchip-build.git cd rockchip-buildsudo ./build.sh --board=lubancat2
rk3588 - debian12系统构建
git clone https://github.com/kalous12/rockchip-build.gitcd rockchip-buildsudo ./build.sh --board=lubancat4
结果生成到 /images 中





回复

使用道具 举报

发表于 2023-12-29 08:37:23 | 显示全部楼层
太强啦!!        
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 14:32 , Processed in 0.107411 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表