前言目的- 野火鲁班猫官方推荐的固件是 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镜像作为示范
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
user
桌面系统演示
- 桌面端镜像会显示出出一个蓝色的框,该框为用户登录的框
- 点击之后右下角会有个齿轮的图案
- 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 - root@lubancat:~# ffmpeg -codecs | grep rkmpp
- ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
- built with gcc 12 (Debian 12.2.0-14)
- DEV.L. av1 Alliance for Open Media AV1 (decoders: av1_rkmpp_decoder libdav1d libaom-av1 av1 ) (encoders: libaom-av1 libsvtav1 )
- 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 )
- 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 )
- 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 )
- DEV.L. mpeg1video MPEG-1 video (decoders: mpeg1_rkmpp_decoder mpeg1video mpeg1_v4l2m2m )
- DEV.L. mpeg2video MPEG-2 video (decoders: mpeg2_rkmpp_decoder mpeg2video mpegvideo mpeg2_v4l2m2m ) (encoders: mpeg2video mpeg2_vaapi )
- DEV.L. mpeg4 MPEG-4 part 2 (decoders: mpeg4_rkmpp_decoder mpeg4 mpeg4_v4l2m2m ) (encoders: mpeg4 libxvid mpeg4_v4l2m2m )
- DEV.L. vp8 On2 VP8 (decoders: vp8_rkmpp_decoder vp8 vp8_v4l2m2m libvpx ) (encoders: vp8_rkmpp_encoder libvpx vp8_v4l2m2m vp8_vaapi )
- 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格式的视频
- root@lubancat:/home/cat# ffprobe 4k_25fps_h265.mkv
- ffprobe version 6.0 Copyright (c) 2007-2023 the FFmpeg developers
- built with gcc 12 (Debian 12.2.0-14)
- Metadata:
- MINOR_VERSION : 512
- COMPATIBLE_BRANDS: isomiso2avc1mp41
- MAJOR_BRAND : isom
- ENCODER : Lavf60.4.100
- Duration: 00:00:20.40, start: 0.000000, bitrate: 13579 kb/s
- Stream #0:0: Video: hevc (Main), yuv420p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn (default)
- Metadata:
- HANDLER_NAME : VideoHandler
- VENDOR_ID : [0][0][0][0]
- ENCODER : Lavc60.6.101 hevc_qsv
- DURATION : 00:00:20.400000000
- [hevc_rkmpp_decoder [url=home.php?mod=space&uid=5830]@[/url] 0xaaaab3354960] Picture format is yuv420p.
复制代码
- cat@lubancat:~$ ffmpeg -i 4k_25fps_h265.mkv -c:v h264 4k_25fps_h264.mkv
- ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
- built with gcc 12 (Debian 12.2.0-14)
- Input #0, matroska,webm, from '4k_25fps_h265.mkv':
- Metadata:
- MINOR_VERSION : 512
- COMPATIBLE_BRANDS: isomiso2avc1mp41
- MAJOR_BRAND : isom
- ENCODER : Lavf60.4.100
- Duration: 00:00:20.40, start: 0.000000, bitrate: 13579 kb/s
- Stream #0:0: Video: hevc (Main), yuv420p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn (default)
- Metadata:
- HANDLER_NAME : VideoHandler
- VENDOR_ID : [0][0][0][0]
- ENCODER : Lavc60.6.101 hevc_qsv
- DURATION : 00:00:20.400000000
- [hevc_rkmpp_decoder @ 0xaaaac58dd480] Picture format is nv12.
- Stream mapping:
- Stream #0:0 -> #0:0 (hevc (hevc_rkmpp_decoder) -> h264 (h264_rkmpp_encoder))
- Press [q] to stop, [?] for help
- [hevc_rkmpp_decoder @ 0xaaaac58dd480] Decoder noticed an info change
- [h264_rkmpp_encoder @ 0xaaaac58de710] Picture format is nv12.
- [h264_rkmpp_encoder @ 0xaaaac58de710] Rate Control mode is set to CBR
- [h264_rkmpp_encoder @ 0xaaaac58de710] Bitrate Target/Min/Max is set to 6000000/5625000/6375000
- [h264_rkmpp_encoder @ 0xaaaac58de710] Profile is set to HIGH
- [h264_rkmpp_encoder @ 0xaaaac58de710] 8x8 Transform is enabled
- [h264_rkmpp_encoder @ 0xaaaac58de710] Level is set to 0
- [h264_rkmpp_encoder @ 0xaaaac58de710] Coder is set to CABAC
- [h264_rkmpp_encoder @ 0xaaaac58de710] Quality Min/Max is set to 50%(Quant=30) / 100%(Quant=10)
- Output #0, matroska, to '4k_25fps_h264.mkv':
- Metadata:
- MINOR_VERSION : 512
- COMPATIBLE_BRANDS: isomiso2avc1mp41
- MAJOR_BRAND : isom
- encoder : Lavf60.3.100
- Stream #0:0: Video: h264 (High) (H264 / 0x34363248), nv12(tv, bt709, progressive), 3840x2160, q=2-31, 6000 kb/s, 25 fps, 1k tbn (default)
- Metadata:
- HANDLER_NAME : VideoHandler
- VENDOR_ID : [0][0][0][0]
- DURATION : 00:00:20.400000000
- encoder : Lavc60.3.100 h264_rkmpp_encoder
- [h264_rkmpp_encoder @ 0xaaaac58de710] Reconfigured with w=3840, h=2160, format=nv12.
- frame= 509 fps= 18 q=-0.0 Lsize= 19461kB time=00:00:20.32 bitrate=7845.6kbits/s speed=0.709x
- video:19456kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.026206%
复制代码
- cat@lubancat:~$ ffprobe 4k_25fps_h264.mkv
- ffprobe version 6.0 Copyright (c) 2007-2023 the FFmpeg developers
- built with gcc 12 (Debian 12.2.0-14)
- Input #0, matroska,webm, from '4k_25fps_h264.mkv':
- Metadata:
- MAJOR_BRAND : isom
- MINOR_VERSION : 512
- COMPATIBLE_BRANDS: isomiso2avc1mp41
- ENCODER : Lavf60.3.100
- Duration: 00:00:20.36, start: 0.000000, bitrate: 7830 kb/s
- Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 3840x2160, 25 fps, 25 tbr, 1k tbn (default)
- Metadata:
- HANDLER_NAME : VideoHandler
- VENDOR_ID : [0][0][0][0]
- ENCODER : Lavc60.3.100 h264_rkmpp_encoder
- DURATION : 00:00:20.360000000
- [h264_rkmpp_decoder @ 0xaaab1ea24280] Picture format is yuv420p.
复制代码
4. DDnet游戏展示 - 目前知道一款为ddnet的游戏,该游戏需要gpu驱动才能流畅游玩,如果使用纯cpu渲染是会十分的卡顿的
- 可以看视频获得更详细的说明
跑分测试rk356x - gpu跑分- =======================================================
- glmark2 2023.01
- =======================================================
- OpenGL Information
- GL_VENDOR: Panfrost
- GL_RENDERER: Mali-G52 r1 (Panfrost)
- GL_VERSION: 3.1 Mesa 22.3.6
- Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0
- Surface Size: 800x600 windowed
- =======================================================
- [build] use-vbo=false: FPS: 329 FrameTime: 3.042 ms
- [build] use-vbo=true: FPS: 431 FrameTime: 2.322 ms
- [texture] texture-filter=nearest: FPS: 824 FrameTime: 1.215 ms
- [texture] texture-filter=linear: FPS: 827 FrameTime: 1.210 ms
- [texture] texture-filter=mipmap: FPS: 636 FrameTime: 1.573 ms
- [shading] shading=gouraud: FPS: 286 FrameTime: 3.497 ms
- [shading] shading=blinn-phong-inf: FPS: 287 FrameTime: 3.485 ms
- [shading] shading=phong: FPS: 280 FrameTime: 3.575 ms
- [shading] shading=cel: FPS: 281 FrameTime: 3.567 ms
- [bump] bump-render=high-poly: FPS: 102 FrameTime: 9.830 ms
- [bump] bump-render=normals: FPS: 688 FrameTime: 1.454 ms
- [bump] bump-render=height: FPS: 690 FrameTime: 1.451 ms
- [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 538 FrameTime: 1.860 ms
- [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 190 FrameTime: 5.264 ms
- [pulsar] light=false:quads=5:texture=false: FPS: 547 FrameTime: 1.831 ms
- [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 185 FrameTime: 5.414 ms
- [desktop] effect=shadow:windows=4: FPS: 396 FrameTime: 2.526 ms
- [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 46 FrameTime: 21.897 ms
- [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 46 FrameTime: 21.820 ms
- [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 53 FrameTime: 19.060 ms
- [ideas] speed=duration: FPS: 244 FrameTime: 4.103 ms
- [jellyfish] <default>: FPS: 353 FrameTime: 2.833 ms
- [terrain] <default>: FPS: 24 FrameTime: 42.108 ms
- [shadow] <default>: FPS: 191 FrameTime: 5.241 ms
- [refract] <default>: FPS: 26 FrameTime: 39.653 ms
- [conditionals] fragment-steps=0:vertex-steps=0: FPS: 640 FrameTime: 1.564 ms
- [conditionals] fragment-steps=5:vertex-steps=0: FPS: 625 FrameTime: 1.602 ms
- [conditionals] fragment-steps=0:vertex-steps=5: FPS: 620 FrameTime: 1.615 ms
- [function] fragment-complexity=low:fragment-steps=5: FPS: 623 FrameTime: 1.606 ms
- [function] fragment-complexity=medium:fragment-steps=5: FPS: 560 FrameTime: 1.786 ms
- [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 652 FrameTime: 1.535 ms
- [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 463 FrameTime: 2.164 ms
- [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 456 FrameTime: 2.195 ms
- =======================================================
- glmark2 Score: 397
- =======================================================
复制代码
环境构建编译系统需求- 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: - sudo apt-get install -y build-essential gcc-aarch64-linux-gnu bison \
- qemu-user-static qemu-system-arm qemu-efi u-boot-tools binfmt-support \
- debootstrap flex libssl-dev bc rsync kmod cpio xz-utils fakeroot parted \
- udev dosfstools uuid-runtime git-lfs device-tree-compiler python2 python3 \
- python-is-python3 fdisk bc
复制代码
And you need to install genimage - apt-get install pkg-config genext2fs libconfuse-dev
- git clone https://github.com/pengutronix/genimage.git
- cd genimage
- ./autogen.sh
- ./configure CFLAGS='-g -O0' --prefix=/usr
- make install
- 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 中
|