diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..8d9198e --- /dev/null +++ b/404.html @@ -0,0 +1,1172 @@ + + + + + + + + + + + + + + + + + + RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..bfc0408 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.revyos.dev diff --git a/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html b/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html new file mode 100644 index 0000000..4f4e187 --- /dev/null +++ b/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html @@ -0,0 +1,2092 @@ + + + + + + + + + + + + + + + + + + + + + + GStreamer pipeline - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

GStreamer pipeline examples with thead OpenMax-IL lib

+

Some GStreamer pipeline command-line examples with omxil library on TH1520, RevyOS

+

Get ready

+

In this section, the grammer of the gstreamer command-line pipeline and some usefule debug tips are introduced. They have been moved to the end of the article.

+

Pipeline samples

+

Basically, you neet to install gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-omx-generic, gstreamer1.0-omx-bellagio-config,gstreamer1.0-tools.

+

Test

+

videotestsrc

+
# videotestsrc
+gst-launch-1.0 videotestsrc ! autovideosink
+
+# specify the video stream format
+gst-launch-1.0 videotestsrc ! video/x-raw, format=NV12, width=960, height=540, framerate=60/1 ! autovideosink
+
+

fpsdisplaysink

+
# display framerate
+gst-launch-1.0 videotestsrc ! fpsdisplaysink
+
+# no need to sync on the clock - used to test the performance of the pipeline
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sync=false
+
+# stop display on the screen, but redirect the output to stdout
+gst-launch-1.0 videotestsrc ! fpsdisplaysink text-overlay=false -v 2>&1
+
+# specify which sink to use
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sink=glimagesink
+
+# combine the previous examples
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sink=glimagesink sync=false text-overlay=false -v 2>&1
+
+

audiotestsrc

+
# audiotestsrc
+gst-launch-1.0 audiotestsrc ! autoaudiosink
+
+# change volume (0 to 1)
+gst-launch-1.0 audiotestsrc volume=0.1 ! autoaudiosink
+
+# change waveform
+# could be selected among square, silence, pink-noise, etc.
+gst-launch-1.0 audiotestsrc wave=pink-noise ! autoaudiosink
+
+# set fix frequency, such as "do" (262 Hz)
+gst-launch-1.0 audiotestsrc freq=262 ! autoaudiosink
+
+

fakesink

+
# a dummy sink that swallows everything
+gst-launch-1.0 videotestsrc ! fakesink
+
+

Decode

+

Video decode

+
# let decodebin choose which decoder to use,
+# and autovideosink choose which video-sink to use (not recommended)
+gst-launch-1.0 filesrc location=fire.mp4 ! decodebin ! autovideosink
+
+# h264 software decode without opengl display
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h264parse ! avdec_h264 ! xvimagesink
+
+# h264 hardware decode with opengl display
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h264parse ! omxh264dec ! glimagesink
+
+# h265 hardware decode
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h265parse ! omxh265dec ! glimagesink
+
+# vp9 hardware decode 
+gst-launch-1.0 filesrc location=fire.webm ! matroskademux ! omxvp9dec ! glimagesink
+
+# mpeg4 hardware decode 
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! queue ! mpeg4videoparse ! omxmpeg4videodec ! glimagesink
+
+# play mkv/webm file
+gst-launch-1.0 filesrc location=fire.mkv ! matroskademux ! decodebin ! glimagesink
+
+# todo 10-bit h264/h265 decode
+
+

Audio decode

+
# there is no hardware decoder on th1520
+
+# let autoaudiosink choose which audio-sink to use
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! autoaudiosink
+
+# mp3 decode
+gst-launch-1.0 filesrc location=blade.mp3 ! mpegaudioparse ! avdec_mp3 ! audioconvert ! autoaudiosink
+
+# aac decode
+gst-launch-1.0 filesrc location=blade.aac ! aacparse ! avdec_aac ! audioconvert ! autoaudiosink
+gst-launch-1.0 filesrc location=blade.aac ! aacparse ! faad ! audioconvert ! autoaudiosink
+## faad works well without aacparse
+gst-launch-1.0 filesrc location=blade.aac ! faad ! audioconvert ! autoaudiosink
+
+# opus decode
+## ogg file must be demuxed by oggdemux first
+gst-launch-1.0 filesrc location=blade.ogg ! oggdemux ! opusparse ! opusdec ! audioconvert ! autoaudiosink
+gst-launch-1.0 filesrc location=blade.ogg ! oggdemux ! opusparse ! avdec_opus ! audioconvert ! autoaudiosink
+
+# wav decode
+gst-launch-1.0 filesrc location=test.wav ! wavparse ! audioresample ! audioconvert ! autoaudiosink
+
+# use specific audiosink
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! pulsesink
+
+# specify the output device by using alsasink with device property
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! alsasink device=hw:0,2
+
+

demux and decode

+

We play media file in this section.

+
# play mp4 file with both audio and video
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux name=demux \
+  demux.video_0 ! queue  ! decodebin ! videoconvert ! autovideosink \
+  demux.audio_0 ! queue ! decodebin ! audioconvert !  autoaudiosink
+
+

Encode to file

+

Video encode

+
# h264 encode test
+# before import video stream to omxh264dec, data should be transformed to frame with rawvideoparse
+# property and pad of rawvideoparse should be set to the same, so we use 'use-sink-caps=true' here
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc ! fakesink
+
+# h264 hardware encode to file
+## todo: encoded h264 file has seek problem
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc \
+  ! h264parse ! qtmux ! mp4mux ! filesink location=test.mp4
+
+# h264 hardware encode to file with specific bitrate(bit per second)
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true  \
+  ! omxh264enc target-bitrate=3000000 \
+  ! h264parse ! filesink location=test.mp4
+
+
+# h265 hardware encode to file
+## this pipeline produces h265 stream only
+## qtdemux is not needed while decoding
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh265enc \
+  ! h265parse ! filesink location=test.h265
+
+# h264 hardware encode from camera to file
+gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert \
+  ! video/x-raw, format=NV12,width=640,height=480 \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! filesink location=test.mp4 -e
+
+

Audio encode

+
# There is no hardware audio encoder on th1520
+
+# encode aac stream with adts container(.aac file)
+## the unit of the bitrate is 'bit/sec'
+gst-launch-1.0 audiotestsrc ! voaacenc bitrate=128000 ! avmux_adts ! filesink location=test.aac
+
+
+# todo: encode aac stream with adif container(.m4a file)
+
+# encode to mp3 file
+## the unit of the bitrate is 'kbit/sec'
+gst-launch-1.0 audiotestsrc ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=test.mp3
+
+# encode opus stream to .ogg file
+gst-launch-1.0 audiotestsrc ! opusenc ! oggmux ! filesink location=test.opus
+
+
+# todo: encode pcm stream to .wav file
+
+

mux and encode

+

This part has been removed to Video + audio transcode section.

+

Media file transcode

+

Video transcode

+

Since omx...dec cannot fulfill qtdemux and mp4mux, and gst-omx is no longer maintained, it is hard to mux mp4 file with these two plugins. To mux stream from omxh264dec, use avmux_mp4 instead. But there is no h265 or vp9 muxer available for omx...dec

+

The raw video stream should be processed by rawvideoparse before sent to encoder. Because itself cannot scale frame or change framerate, rawvideoparse need to get the stream info of its sink pad(src pad of the backward element). Therefore use-sink-caps must be set to true.

+

To change width and height, set properties output-width and output-height of omx...dec. To modify bitrate and bitrate control method, set properties control-rate and target-bitrate of omx...enc. To change framerate, set properties of videorate.

+
# h265 to h264
+gst-launch-1.0 filesrc location=test_h265.mp4 ! qtdemux ! h265parse ! omxh265dec \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! avmux_mp4 ! filesink location=t_h264.mp4
+
+# vp9 to h264
+gst-launch-1.0 filesrc location=test_vp9.webm ! matroskademux ! omxvp9dec \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! avmux_mp4 ! filesink location=t_h264.mp4
+
+# arbitrary input to h264
+gst-launch-1.0 filesrc location=test_h264.mp4 ! decodebin \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! filesink location=t_h264.mp4
+
+# h264 to h264, with more options
+## set the video width and height to 1280×720, framerate to 15fps, bitrate mode to constant and bitrate to 5Mbps
+gst-launch-1.0 filesrc location=test_h264.mp4 ! qtdemux ! h264parse \
+  ! omxh264dec output-width=1280 output-height=720 \
+  ! videorate ! video/x-raw, framerate=15/1 \
+  ! rawvideoparse use-sink-caps=true  \
+  ! omxh264enc control-rate=constant target-bitrate=5000000 ! h264parse ! filesink location=t_h264.mp4
+
+## there is no vp9 encoder in th1520 omxil lib
+
+

Audio transcode

+
# aac to mp3
+gst-launch-1.0 filesrc location=test.aac ! aacparse ! avdec_aac ! audioconvert ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=t.mp3
+
+# mp3 to aac
+gst-launch-1.0 filesrc location=test.mp3 ! mpegaudioparse ! avdec_mp3 ! audioconvert ! voaacenc bitrate=128000 ! avmux_adts ! filesink location=t.aac
+
+# wav to mp3
+gst-launch-1.0 filesrc location=test.wav ! wavparse ! audioresample ! audioconvert ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=t.mp3
+
+# mp3 to wav
+gst-launch-1.0 filesrc location=test.mp3 ! mpegaudioparse ! avdec_mp3 ! audioresample ! audioconvert \
+  ! audio/x-raw, rate=44100, format=S16LE ! wavenc ! filesink location=t.wav
+
+

Video + audio remux and transcode

+
# mux test
+gst-launch-1.0 audiotestsrc ! autoaudiosink videotestsrc ! autovideosink
+
+# mux the test video and audio stream to a mp4 file
+## be aware that '-e' must be set to this pipeline,
+## and there is no '!' before audiotestsrc
+gst-launch-1.0 -e videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=960, height=540 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc ! h264parse \
+  ! avmux_mp4 name=mux ! filesink location=t_h264.mp4 \
+  audiotestsrc ! lamemp3enc ! mux.
+
+# change container from mkv to mp4 with h264 stream
+## this means demux a mkv file then mux video and audio stream to mp4 file
+gst-launch-1.0 filesrc location=test_h264.mkv \
+  ! matroskademux name=demux mp4mux force-create-timecode-trak=true name=mux ! filesink location=t_h264.mp4 \
+  demux.video_0 ! queue ! video/x-h264 ! mux. \
+  demux.audio_0 ! queue ! audio/mpeg ! mux.
+
+

Media mixing

+

Camera capture

+

You can use command v4l2-ctl, which is included in package v4l-utils to get information of your camera.

+

For more information, read this article

+
# h264 hardware encode from camera to file
+gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert \
+  ! video/x-raw, format=NV12,width=640,height=480 \
+  ! rawvideoparse format=nv12 width=640 height=480 \
+  ! omxh264enc ! h264parse ! filesink location=test.mp4 -e
+
+
+

Stream transfer

+
# capture camera and stream to other machine
+
+## source
+gst-launch-1.0 v4l2src device=/dev/video0 !  videoconvert ! videorate \
+  ! video/x-raw,  format=NV12,width=640,height=480,framerate=20/1 \
+  ! rawvideoparse format=nv12 width=640 height=480  framerate=20/1 \
+  ! omxh264enc ! h264parse config-interval=1 ! video/x-h264,stream-format=byte-stream,alignment=nal \
+  ! rtph264pay ! udpsink  host=192.168.31.27 port=5600
+
+## destination
+gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
+  ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink
+
+

Other tools

+

gst-inspect-1.0

+

gst-inspect-1.0 is a tool to print info about a GStreamer element(factory), which is included in gstreamer1.0-tools.

+
# print the GStreamer element list with a 'less' like paing filter.
+gst-inspect-1.0
+
+# print info of the element
+gst-inspect-1.0 <element_name>
+
+

gst-discover1.0

+

gst-discover-1.0 is a tool to show info about the media file, which is inclucded in gstreamer1.0-plugins-base-apps.

+
gst-discoverer-1.0 -v test.mp4
+
+

gst-play-1.0

+

If you are tired of manually build pipeline for playback by hand. You can use gst-play-1.0 as an alternative, which is included in gstreamer1.0-plugins-base-apps.

+
# play media file
+gst-play-1.0 test.mp4
+
+# play media file with specific sink
+gst-play-1.0 --videosink=glimagesink --audiosink=alsasink
+
+

Left button and right button can be used to seek. For more info, please read this article.

+

Other examples

+

Get ready

+

Debug tips

+

To get the cap info or property of an element, you may need to run gst-inspect-1.0 <element_name>. If gst-inspect-1.0 command not found, install gstreamer1.0-tools.

+

If you want to debug GStreamer, refer to the articles below. +https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html +https://gstreamer.freedesktop.org/documentation/gstreamer/running.html?gi-language=c

+

Grammer

+

Here is a simple command-line pipeline.

+
gst-launch-1.0 videotestsrc ! autovideosink
+
+

! represent a link. The established pipeline looks like

+
videotestsrc => autovideosink
+
+

There are several properties in videotestsrc, which could be lookup by gst-inspect-1.0 videotestsrc.Set some properties:

+
gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink
+
+

NAME=VALUE is a property. pattern and flip are properties of videotestsrc.

+

Sometimes we need to control the behavior of gst-launch-1.0.

+
GST_DEBUG=3 gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink
+gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink --gst-debug-level=3
+
+

There are two ways to achieve this goal. One is setting environment variable. Another one is passing command-line argument to gst-launch-1.0. GST_DEBUG=3 and --gst-debug-level=3 have the same meaning.

+

In most video decoding cases, there is a video-stream and an audio stream. We need to use demuxer to seperate them. Demuxer usually have several src pad. Here is an example.

+
gst-launch-1.0 filesrc location=test-video.mp4 ! qtdemux name=demux demux. ! queue ! h264parse ! omxh264dec ! glimagesink demux. ! queue ! aacparse ! avdec_aac ! audioconvert !  alsasink
+
+

It is hard to read. Add some word wrap:

+
gst-launch-1.0 filesrc location=test-video.mp4 ! qtdemux name=demux \
+  demux. ! queue ! h264parse ! omxh264dec ! glimagesink \
+  demux. ! queue ! aacparse ! avdec_aac ! audioconvert ! pulsesink
+
+

Here we use a demuxer to seperate video and audio, the grammer is:

+
... demuxer name=DEMUXER_NAME \
+DEMUXER_NAME.PIPELINE_NAME_1 ! queue ! ...(the remaining part of pipeline 1) \
+DEMUXER_NAME.PIPELINE_NAME_2 ! queue ! ...(the remaining part of pipeline 2)
+
+

Sometimes we need to set certain properties of the stream at certain nodes in the pipeline, e.g set resolution of the videostream of the videotestsrc.

+
gst-launch-1.0 videotestsrc ! video/x-raw, width=800, height=600 ! glimagesink
+
+

We negotiated the pad properties between videotestsrc and glimagesink. The property names and values must be supported by both element. You can find them in Pad Templates section of gst-inspect-1.0.

+

Reference

+
    +
  1. GStreamer pipeline grammar - StackOverflow
  2. +
  3. GStreamer pipeline samples - GitHub
  4. +
  5. gst-launch-1.0 - GStreamer doc
  6. +
  7. How to display fps of streaming video in gsteramer? - StackOverflow
  8. +
  9. Storing AAC Audio and Retrieving - StackOverflow
  10. +
  11. Accelerated GStreamer User Guide - NVIDIA
  12. +
  13. Storing AAC Audio and Retrieving - StackOverflow
  14. +
  15. Play an opus file with gstreamer and pulseaudio - StackOverflow
  16. +
  17. mp4mux not working with omxh264enc
  18. +
  19. omxh264enc makes qtmux error out with "Buffer has no PTS." - FreeDesktop - Gitlab
  20. +
  21. gst-omx: Retire the whole package - FreeDesktop - Gitlab
  22. +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" "b/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" new file mode 100644 index 0000000..85e7ca9 --- /dev/null +++ "b/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" @@ -0,0 +1,1968 @@ + + + + + + + + + + + + + + + + + + + + + + GStreamer 播放器适配 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

支持 PTG omxil 库的 GStreamer 播放器适配文档

+

适用SDK v1.1.2

+

概述

+

PTG 的 OpenMAX IL 库(下称 vpu-omxil)可使 LicheePi 4A 能够流畅硬解码 4k 60fps 的视频,那么具体应该如何使用该库呢?本文将主要介绍 LicheePi 4A 开发板上 Parole 播放器的集成与使用,用户可根据本文来了解在 LicheePi 4A 上的适配过程 +以 h264 的硬解为例,视频硬解的工作流程如图所示

+
                +-------------------------------------------+
+                |    +------------+       +------------+    |   +--------+
+video stream----+--->| omxh264dec +------>| video-sink +----+-->| player |
+                |    +------+-----+       +------------+    |   +--------+
+                |           |     GStreamer                 |
+                +-----------+-------------------------------+
+                            |
+                      +-----v-----+
+                      | vpu-omxil |
+                      +-----+-----+
+                            |
+                            |
+                    +-------v-------+
+                    | kernel module |
+                    |    (driver)   |
+                    +-------+-------+
+                            |
+                            v
+                        hardware
+
+
    +
  1. 视频流(video stream)由 GStreamer 读入后经过一系列预处理,送到 GStreamer 的解码器omxh264dec
  2. +
  3. omxh264dec 调用动态库,即 PTG 提供的 vpu-omxil 库,该库通过驱动访问硬件(kernel module)进行硬解
  4. +
  5. 解码后的流传输到 GStreamer 的 video-sink 中,并由播放器(player)呈现
  6. +
+

A. GStreamer omxh264dec 解码测试

+

将 omxh264 解码的部分单独拎出来,大体的结构如下

+
  +---+------------+----+
+  |   +------------+    |
+  |   | omxh264dec |    |
+  |   +------------+    |
+  |      GStreamer      |
+  +----------+----------+
+             |
+  +----+-----v-----+----+
+  |    +-----------+    |
+  |    | vpu-omxil |    |
+  |    +-----------+    |
+  |  libomxil-bellagio  |
+  +----------+----------+
+             |
++------------v------------+
+|  - memalloc   - vc8000  |
+|  - hantrodec  - vidmem  |
+|      kernel modules     |
++------------+------------+
+             |
+             v
+          hardware
+
+

我们依照自底向上的顺序构建图示的链条。 +本节的主要目的是使 omxh264dec 解码器能够运行,并不涉及到输出屏幕等内容。

+

1. 驱动编译、安装以及硬件访问权限的设置

+

硬解码需要访问硬件,而访问硬件又需要驱动,所以需要编译并安装驱动

+

1.1 编译驱动

+

PTG 提供的驱动源:

+

https://github.com/revyos/vpu-vc8000e-kernel

+

https://github.com/revyos/vpu-vc8000d-kernel

+

https://github.com/revyos/video_memory

+
1.1.1替代方案
+

revyos/thead-kernel 已经合并了上述三个内核模块, 使用revyos_defconfig 可以无需编译上述内核模块

+

1.2 安装驱动

+
# depmod 分析可载入模块的依赖关系,在 /lib/modules/<kernel-version>中添加modules.dep文件,以便后续 modprobe 使用
+sudo depmod -a
+sudo modprobe vidmem vc8000 hantrodec memalloc
+
+## 如果 modprobe 安装有问题的话,可以尝试使用 insmod 安装
+#cd /usr/lib/modules/$(uname -r)
+#sudo insmod $(find . -name *vidmem.ko*)
+#sudo insmod $(find . -name *vc8000.ko*)
+#sudo insmod $(find . -name *hantrodec.ko*)
+#sudo insmod $(find . -name *memalloc.ko*)
+
+# 可选:设置开机加载模块
+echo -e "\nvidmem\nhantrodec\nmemalloc\nvc8000\n" | sudo tee -a /etc/modules > /dev/null
+
+

1.3 设置硬件访问权限

+

安装内核模块后,/dev 目录下会出现 hantrodec vidmem vc8000 三个设备文件。默认情况下,用户对其没有访问权限,如果不修改权限的话,非 root 用户在打开 omxil 库时会报错。

+
# 生效一次
+cd /dev
+sudo chmod 666 hantrodec vidmem vc8000
+
+# 长期生效
+cat << EOF | sudo tee /lib/udev/rules.d/70-hantro.rules > /dev/null
+KERNEL=="vidmem", MODE="0666"
+KERNEL=="hantrodec", MODE="0666"
+KERNEL=="vc8000", MODE="0666"
+EOF
+
+

RevyOS 适配记录

+

如果要获取 RevyOS 特定版本的内核模块,可进入 revyos/thead-kernel ,并在 GitHub CI 中下载 artifacts

+

2. 安装 vpu-omxil 并调整配置

+

首先,请将 vpu-omxil 下载并解压到 /usr/lib/omxil/中 +vpu-omxil_1.2.1.tar.gz +如下图所示, 需要

+
    +
  1. vpu-omxil 中的 OpenMax 组件注册到 libomxil-bellagio
  2. +
  3. gst-omx(该包提供了 omxh264dec 解码器) 调用 libomxil-bellagio 的时候也需要知道调用的组件名称
  4. +
+
+---------+   +-------------------+   +-----------+
+| gst-omx +-->| libomxil-bellagio +-->| vpu-omxil |
++---------+   +-------------------+   +-----------+
+
+

2.1 将 vpu-omxil 中的组件注册到 libomxil-bellagio

+
sudo apt install libomxil-bellagio-bin libomxil-bellagio0
+# 注册组件
+omxregister-bellagio -v /usr/lib/omxil/
+
+

使用 omxregister-bellagio 生成注册文件,默认路径为 ~/.omxregister

+
2.1.1 RevyOS/Debian 注册组件
+

th1520-vpu 利用了 debian 在 usr/lib/riscv64-linux-gnu/libomxil-bellagio0 安装之后 +触发自动注册行为 结果如下

+
cat /var/lib/libomxil-bellagio0/registry
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.H2.video.encoder.so
+ ==> OMX.hantro.H2.video.encoder ==> OMX.hantro.H2.video.encoder.avc:OMX.hantro.H2.video.encoder.hevc:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.VC8000D.image.decoder.so
+ ==> OMX.hantro.VC8000D.image.decoder ==> OMX.hantro.VC8000D.image.decoder.jpeg:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.H2.image.encoder.so
+ ==> OMX.hantro.H2.image.encoder ==> OMX.hantro.H2.image.encoder.jpeg:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.VC8000D.video.decoder.so
+ ==> OMX.hantro.VC8000D.video.decoder ==> OMX.hantro.VC8000D.video.decoder.mpeg4:OMX.hantro.VC8000D.video.decoder.avc:OMX.hantro.VC8000D.video.decoder.avs:OMX.hantro.VC8000D.video.decoder.h263:OMX.hantro.VC8000D.video.decoder.wmv:OMX.hantro.VC8000D.video.decoder.vp6:OMX.hantro.VC8000D.video.decoder.vp8:OMX.hantro.VC8000D.video.decoder.jpeg:OMX.hantro.VC8000D.video.decoder.hevc:OMX.hantro.VC8000D.video.decoder.vp9:OMX.hantro.VC8000D.video.decoder.avs2:
+
+

2.2 调整 gstomx.conf 的设置

+

调整 gstomx.conf 的设置以使解码器 omxh264dec 调用正确的组件,具体请查看针对 gst-omx 的补丁

+

gst-omx-01-add-libomxil-config.patch

+

3. 添加 dmabuf 补丁

+

请查看 PTG 提供的针对 gst-omx 的 dmabuf 补丁 +gst-omx-02-set-dec-out-port-dmabuf.patch

+

4. GStreamer 解码初步测试

+
sudo apt install gstreamer1.0-omx-generic gstreamer1.0-omx-bellagio-config gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-gl gstreamer1.0-plugins-good gstreamer1.0-tools
+
+# 1 基本解码
+gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fakesink  sync=false
+# 2 在终端中显示 fps
+# 参考:https://stackoverflow.com/questions/73948308
+gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fpsdisplaysink video-sink=fakesink  text-overlay=false sync=false -v 2>&1
+
+

fakesink会把前面的视频流全部吞掉,不输出画面(因而不会在 video-sink 这一环节损失性能),但是结合fpsdisplaysink可以读取到解码的速度。正常日志如下:

+
Setting pipeline to PAUSED ...[DBGT]
+vc8kdec compiled without trace support (ENABLE_DBGT_TRACE switch not enabled)
+Pipeline is PREROLLING ...
+Redistribute latency...
+OMX  ! decoder_get_parameter OMX_ErrorNoMore (2)
+Pipeline is PREROLLED ...
+Setting pipeline to PLAYING ...
+New clock: GstSystemClockRedistribute latency...
+0:01:39.5 / 0:01:49.4 (90.9 %)
+
+

【TIP】如果有 [omxh264dec-omxh264dec0: Could not initialize supporting library.](https://gist.github.com/Sakura286/015fae6792e160268db7ad8a697dd2df) 等字样的报错,可以安装gst-omxlibomxil-bellagiolibc6相关的 debug-symbol 包,使用 gdb 启动上述命令进行调试。调试时,先断DWLInit,然后再断open,具体看是打开哪个地方的时候出错了。

+

RevyOS 适配记录

+

RevyOS 适配过程中对于初始化动态库失败找到了如下三种原因:

+
    +
  1. 编译 vpu-omxil 时使用的工具链与当前系统不兼容
  2. +
  3. 未使用omxregister-bellagio注册 vpu-omxil
  4. +
  5. 未调整 /dev 目录下 hantrodec vc8000 vidmem 等设备的权限
  6. +
+

B. 选用合适的 GStreamer video-sink

+

video-sink 是视频流在整个 GStreamer pipeline 中的最后一步,其作用一般是将视频流输出到屏幕上。 +前文中fakesink只是测试解码器是否正常工作的特殊 video-sink可选的 video-sink非常多,常见的有 autovideosinkximagesinkxvimagesinkfbdevsinkwaylandsinkglimagesinkgtkglsink等,它们各在不同的插件包里,需要酌情安装:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
video-sink所属包名
waylandsinkgstreamer1.0-plugins-bad
fbdevsinkgstreamer1.0-plugins-bad
autovideosinkgstreamer1.0-plugins-good
gtkglsinkgstreamer1.0-plugins-good
ximagesink | xvimagesinkgstreamer1.0-plugins-base
glimagesinkgstreamer1.0-plugins-base | gstreamer1.0-gl
+

【TIP】使用 gst-inspect-1.0 <video-sink-name> 来查看对应 video-sink 可用的选项 +【TIP】添加 --gst-debug-level=<lv> 来获得更多的输出日志,其中 <lv> 代表了从 1 到 6,啰嗦程度从低到高,建议在等级 4 及以下,否则日志会非常长 +请尝试不同的 video-sink ,并尝试不同的插件参数,以及给予不同的环境变量,直至找到可以流畅硬解 H264 的那一个。

+

RevyOS 适配记录

+
    +
  • **waylandsink**:由于现在(20230720)RevyOS 采用了 Xfce 桌面,不可能支持 Wayland,故 waylandsink从原理上无法使用
  • +
  • **fbdevsink****ximagesink**:无法使用
  • +
  • **xvimagesink**:通过流水线图以及日志可以确定,playbin 或 autovideosink 会自动调用 xvimagesink,使用 perf 分析后可以发现,使用xvimagesink 不可避免地会进行大量的 memcpy 操作,严重降低解码性能;该问题在获得PTG的 dmabuf 补丁后依然存在,故无法使用
  • +
  • **gtkglsink**GTK3 不支持 EGL on X11,而 RevyOS 目前基于 x11,且只支持 EGL,故无法使用
  • +
+

剩下的只有glimagesink,根据 Running and debugging GStreamer Applications,并观察其他使用到 glimagesink 的例子,可以猜测需要明确指定环境变量 GST_GL_APIGST_GL_PLATFORM +由于 RevyOS 使用了 gles2+egl 的组合,使用如下的命令,成功硬解。

+
GST_GL_API=gles2 GST_GL_PLATFORM=egl gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fpsdisplaysink video-sink=glimagesink sync=false
+
+

然而 GStreamer 被播放器调用时是无法通过环境变量来传递参数的,所以构建 gst-plugins-base 时应当传递额外的 meson 编译参数:

+
-Dgl_api=[\'gles2\'] -Dgl_platform=[\'egl\']
+
+

C. 播放器支持

+

GStreamer 的 pipeline 没有问题之后,就需要使播放器支持。不同播放器会使用到不同的 video-sink,同样对 gstreamer 有着不同程度的依赖。 +适配播放器时,最重要的工作便是①使播放器适配已验证的 video-sink,或者②使 gstreamer pipeline 支持播放器指定的 video-sink,此次 RevyOS 适配过程采用了①方案。

+
                +-------------------------------------------+
+                |    +------------+       +------------+    |   +--------+
+video stream----+--->| omxh264dec +------>| video-sink +----+-->| player |
+                |    +------------+       +------------+    |   +--------+
+                |                GStreamer                  |
+                +-------------------------------------------+
+
+

RevyOS 适配记录

+

根据 https://gstreamer.freedesktop.org/apps/ 进行简单的排查

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
是否可用是否更新应用名备注
GnashFlash 播放器
GEntransDebian 未收录
20230226Kaffeine❌ 需要大量 KDE 相关组件
✔️ 存在于riscv64 仓库
❌ 在 Debian amd64 Gnome 上,播放窗口与控制窗口分离,且默认调用了 VLC 进行播放
LcdgriloDebian 未收录
✔️20230218Parole✔️ For XFCE
❓ 不支持 Wayland,仅支持 x11
✔️ Debian amd64 Gnome 验证通过
✔️ 存在于riscv64 仓库
SongbirdDebian 未收录
SnappyDebian 未收录
Totem需要 GTK3,然而 GTK3 不支持 EGL on X11
+

最初选择的播放器是 Totem,但是发现 Totem 无法指定除了 gtkglsink 以外的 video-sink,且由于 RevyOS 不支持 gtkglsink,所以支持 Totem 播放器的难度较大。 +对支持 GStreamer 的播放器进行排查后发现了 Parole , Parole 由 GObject 编写,与常见的面向对象编程略有区别。寻找其构建 parole_gst 对象时的方法 parole_gst_constructed,将 video-sink 属性设置为前文已验证的 glimagesink,补丁:

+

parole-01-add-glimagesink-support.patch

+

至此,粗略的适配工作完成。

+

总结:RevyOS 适配工作

+
    +
  1. 编译驱动模块至内核,设置启动加载,设置设备权限
  2. +
  3. 将 PTG 提供的 omxil 二进制动态库文件打包为 th1520-vpu
  4. +
  5. 修改 th1520-vpu 的依赖,使其依赖 gst-omx 、libomxil-bellagio 等包
  6. +
  7. 设置了一些 postinstall 操作,例如使用 omxregister-bellagio 注册组件等
  8. +
  9. 修改 gst-omx
  10. +
  11. 增加 config 中对 vpu-omxil 组件的支持
  12. +
  13. 应用 dmabuf 补丁
  14. +
  15. 增加对 h265 vp9 的支持
  16. +
  17. 修改 gst-base 编译时的 gl 支持,限制为 gles2+egl
  18. +
  19. 修改 parole 以支持 glimagesink
  20. +
+

本文所用资源

+

补丁集合:

+

https://gist.github.com/Sakura286/26777ea8204c1819885e093806a4f7ca

+

PTG omxil 库

+

https://drive.google.com/file/d/1pYgCVI7WltfpskltJ-RqzVUCEC21FS56

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000..1cf13b9 Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.220ee61c.min.js b/assets/javascripts/bundle.220ee61c.min.js new file mode 100644 index 0000000..116072a --- /dev/null +++ b/assets/javascripts/bundle.220ee61c.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Ci=Object.create;var gr=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var ki=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Hi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,nn=Object.prototype.propertyIsEnumerable;var rn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&rn(e,r,t[r]);if(Ht)for(var r of Ht(t))nn.call(t,r)&&rn(e,r,t[r]);return e};var on=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&nn.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Pi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ki(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=Ri(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ci(Hi(e)):{},Pi(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var sn=Pt((xr,an)=>{(function(e,t){typeof xr=="object"&&typeof an!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(O){return!!(O&&O!==document&&O.nodeName!=="HTML"&&O.nodeName!=="BODY"&&"classList"in O&&"contains"in O.classList)}function f(O){var Qe=O.type,De=O.tagName;return!!(De==="INPUT"&&s[Qe]&&!O.readOnly||De==="TEXTAREA"&&!O.readOnly||O.isContentEditable)}function c(O){O.classList.contains("focus-visible")||(O.classList.add("focus-visible"),O.setAttribute("data-focus-visible-added",""))}function u(O){O.hasAttribute("data-focus-visible-added")&&(O.classList.remove("focus-visible"),O.removeAttribute("data-focus-visible-added"))}function p(O){O.metaKey||O.altKey||O.ctrlKey||(a(r.activeElement)&&c(r.activeElement),n=!0)}function m(O){n=!1}function d(O){a(O.target)&&(n||f(O.target))&&c(O.target)}function h(O){a(O.target)&&(O.target.classList.contains("focus-visible")||O.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(O.target))}function v(O){document.visibilityState==="hidden"&&(o&&(n=!0),Y())}function Y(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function B(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(O){O.target.nodeName&&O.target.nodeName.toLowerCase()==="html"||(n=!1,B())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),Y(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var cn=Pt(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},s=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(B,N){d.append(N,B)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(O){throw new Error("URL unable to set base "+c+" due to "+O)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,Y=!0,B=this;["append","delete","set"].forEach(function(O){var Qe=h[O];h[O]=function(){Qe.apply(h,arguments),v&&(Y=!1,B.search=h.toString(),Y=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,Y&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(f){Object.defineProperty(s,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){a(f)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var qr=Pt((Mt,Nr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Mt=="object"&&typeof Nr=="object"?Nr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ai}});var s=i(279),a=i.n(s),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(T){return!1}}var d=function(T){var E=p()(T);return m("cut"),E},h=d;function v(j){var T=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[T?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var Y=function(T,E){var H=v(T);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},B=function(T){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof T=="string"?H=Y(T,E):T instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(T==null?void 0:T.type)?H=Y(T.value,E):(H=p()(T),m("copy")),H},N=B;function O(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?O=function(E){return typeof E}:O=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},O(j)}var Qe=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=T.action,H=E===void 0?"copy":E,I=T.container,q=T.target,Me=T.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&O(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function Ei(j,T){if(!(j instanceof T))throw new TypeError("Cannot call a class as a function")}function tn(j,T){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=c()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",kt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Me,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(kt){Me=Me&&!!document.queryCommandSupported(kt)}),Me}}]),E}(a()),Ai=Li},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,f){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(f))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return c(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),s=f.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var f=this;function c(){f.off(i,c),s.apply(a,arguments)}return c._=s,this.on(i,c,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=a.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var rs=/["'&<>]/;Yo.exports=ns;function ns(e){var t=""+e,r=rs.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof et?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function pn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,f){s=e[i](s),o(a,f,s.done,s.value)})}}function o(i,s,a,f){Promise.resolve(f).then(function(c){i({value:c,done:a})},s)}}function C(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),f=a.next();!f.done;f=a.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(C(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{ln(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)ln(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function jt(e){return e instanceof Ie||e&&"closed"in e&&C(e.remove)&&C(e.add)&&C(e.unsubscribe)}function ln(e){C(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new xn(r,n)},t}(F);var xn=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,f=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var Sn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var Oe=new Sn(wn);var M=new F(function(e){return e.complete()});function Vt(e){return e&&C(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return C(Cr(e))?e.pop():void 0}function Te(e){return Vt(Cr(e))?e.pop():void 0}function zt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return C(e==null?void 0:e.then)}function qt(e){return C(e[ft])}function Kt(e){return Symbol.asyncIterator&&C(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function zi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=zi();function Gt(e){return C(e==null?void 0:e[Yt])}function Bt(e){return un(this,arguments,function(){var r,n,o,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return C(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(qt(e))return Ni(e);if(pt(e))return qi(e);if(Nt(e))return Ki(e);if(Kt(e))return On(e);if(Gt(e))return Qi(e);if(Jt(e))return Yi(e)}throw Qt(e)}function Ni(e){return new F(function(t){var r=e[ft]();if(C(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function qi(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?A(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Dn(function(){return new Zt}))}}function Vn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,f=a===void 0?!0:a;return function(c){var u,p,m,d=0,h=!1,v=!1,Y=function(){p==null||p.unsubscribe(),p=void 0},B=function(){Y(),u=m=void 0,h=v=!1},N=function(){var O=u;B(),O==null||O.unsubscribe()};return y(function(O,Qe){d++,!v&&!h&&Y();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,f))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,Y(),p=$r(B,o,$e),De.error($e)},complete:function(){h=!0,Y(),p=$r(B,s),De.complete()}}),U(O).subscribe(u))})(c)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),J())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Kn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>Xe(e)),V(Xe(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>rr(e)),V(rr(e)))}var Yn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Wr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),va?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Wr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ba.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Gn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Jn=typeof WeakMap!="undefined"?new WeakMap:new Yn,Xn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ga.getInstance(),n=new La(t,r,this);Jn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Xn.prototype[e]=function(){var t;return(t=Jn.get(this))[e].apply(t,arguments)}});var Aa=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:Xn}(),Zn=Aa;var eo=new x,Ca=$(()=>k(new Zn(e=>{for(let t of e)eo.next(t)}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ca.pipe(S(t=>t.observe(e)),g(t=>eo.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var to=new x,Ra=$(()=>k(new IntersectionObserver(e=>{for(let t of e)to.next(t)},{threshold:0}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function sr(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function ro(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),J())}var cr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function no(e){return cr[e].checked}function Ke(e,t){cr[e].checked!==t&&cr[e].click()}function Ue(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function ka(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ha(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function oo(){let e=b(window,"keydown").pipe(A(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:no("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),A(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!ka(n,r)}return!0}),pe());return Ha().pipe(g(t=>t?M:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function io(){return new x}function ao(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)ao(e,r)}function _(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)ao(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function so(){return location.hash.substring(1)}function Dr(e){let t=_("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Pa(e){return L(b(window,"hashchange"),e).pipe(l(so),V(so()),A(t=>t.length>0),X(1))}function co(e){return Pa(e).pipe(l(t=>ce(`[id="${t}"]`)),A(t=>typeof t!="undefined"))}function Vr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function fo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function zr(e,t){return e.pipe(g(r=>r?t():M))}function ur(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>M),g(r=>r.status!==200?Ot(()=>new Error(r.statusText)):k(r)))}function We(e,t){return ur(e,t).pipe(g(r=>r.json()),X(1))}function uo(e,t){let r=new DOMParser;return ur(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),X(1))}function pr(e){let t=_("script",{src:e});return $(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(g(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function po(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function lo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(po),V(po()))}function mo(){return{width:innerWidth,height:innerHeight}}function ho(){return b(window,"resize",{passive:!0}).pipe(l(mo),V(mo()))}function bo(){return G([lo(),ho()]).pipe(l(([e,t])=>({offset:e,size:t})),X(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(ee("size")),o=G([n,r]).pipe(l(()=>Xe(e)));return G([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:f,y:c}])=>({offset:{x:s.x-f,y:s.y-c+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,f,c)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:f,error:c});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Chromium WebGL 测试

+

测试网站地址:https://webglsamples.org/aquarium/aquarium.html

+

直接打开即可,左侧数字是渲染的鱼的数量,数量越多越占性能

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/benchmark/coremark/index.html b/benchmark/coremark/index.html new file mode 100644 index 0000000..27366b0 --- /dev/null +++ b/benchmark/coremark/index.html @@ -0,0 +1,1525 @@ + + + + + + + + + + + + + + + + + + + + + + coremark - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

coremark

+

摘要

+

CoreMark是一个综合基准,用于测量嵌入式系统中使用的中央处理器(CPU)的性能。它是在2009由eembc的shay gal-on开发的,旨在成为一个行业标准,取代过时的dehrystone基准。代码用C编写,包含以下算法:列表处理(增删改查和排序)、矩阵操作(公共矩阵操作)、状态机(确定输入流是否包含有效数字)和CRC。用户可以自由的下载Coremark,并移植到自己的平台上运行,随后就可以看到分数。

+

测试项介绍

+

文件介绍

+
├── barebones    --移植到裸机环境下需要修改的目录
+│   ├── core_portme.c       --移植的目标平台配置信息
+│   ├── core_portme.h       --计时以及板级初始化实现
+│   ├── core_portme.mak     --该子目录的makefile
+│   ├── cvt.c
+│   └── ee_printf.c         --打印函数串口发送实现
+├── core_list_join.c    --列表操作程序
+├── core_main.c         --主程序
+├── coremark.h          --项目配置与数据结构的定义头文件
+├── coremark.md5        
+├── core_matrix.c       --矩阵运算程序
+├── core_state.c        --状态机控制程序
+├── core_util.c         --CRC计算程序
+├── cygwin              --x86 cygwin和gcc 3.4(四核,双核和单核系统)的测试代码
+│   ├── core_portme.c
+│   ├── core_portme.h
+│   └── core_portme.mak
+├── freebsd             --以下同理,是在不同操作系统下的测试代码
+│   ├── ...
+├── LICENSE.md
+├── linux
+│   ├── ...
+├── linux64
+│   ├── ...
+├── macos
+│   ├── ...
+├── Makefile            
+├── README.md           --自述文件,CoreMark项目的基本介绍
+├── rtems
+│   ├── ...
+└── simple
+    ├── ...
+    └──
+
+

make 目标

+
    +
  • run - 默认目标,创建 run1.log 和 run2.log
  • +
  • run1.log - 用性能参数运行基准测试,并输出到 run1.log
  • +
  • run2.log - 用验证参数运行基准测试,并输出到 run2.log
  • +
  • run3.log - 用配置文件生成参数运行基准测试,并输出到 run3.log
  • +
  • compile - 编译基准测试可执行文件
  • +
  • link - 链接基准测试可执行文件
  • +
  • check - 测试可能未修改的源文件的 MD5
  • +
  • clean - 清理临时文件
  • +
+

编译/使用

+

根据 README 说法,只需要在 coremark 文件夹下执行 make 即可进行编译与测试。测试结果会出现在 Results 文件夹中,其中 run1.log 是测试结果。

+

测试计划

+

coremark 总体测试时间较短。 +计划同时测试 10 次取平均数值。

+

操作步骤

+
$ git clone https://github.com/eembc/coremark.git
+$ cd coremark
+$ make
+
+

测试结果

+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 12915
+Total time (secs): 12.915000
+Iterations/Sec   : 8517.228029
+Iterations       : 110000
+Compiler version : GCC13.1.0
+Compiler flags   : -O2 -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+            (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x33ff
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 8517.228029 / GCC13.1.0 -O2 -DPERFORMANCE_RUN=1  -lrt / Heap
+
+
+

GCC 10.4 + xtheadc

+
make XCFLAGS="-march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm"
+
+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 15129
+Total time (secs): 15.129000
+Iterations/Sec   : 13219.644392
+Iterations       : 200000
+Compiler version : GCC10.4.0
+Compiler flags   : -O2 -march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+                        (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x4983
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 13219.644392 / GCC10.4.0 -O2 -march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm -DPERFORMANCE_RUN=1  -lrt / Heap
+
+

GCC 13.1 + xthead matrix

+
make XCFLAGS="-march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -mno-thread-jumps"
+
+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 11897
+Total time (secs): 11.897000
+Iterations/Sec   : 9246.028411
+Iterations       : 110000
+Compiler version : GCC13.1.0
+Compiler flags   : -O2 -march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+            (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x33ff
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 9246.028411 / GCC13.1.0 -O2 -march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -DPERFORMANCE_RUN=1  -lrt / Heap
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/benchmark/glmark2/index.html b/benchmark/glmark2/index.html new file mode 100644 index 0000000..7269b59 --- /dev/null +++ b/benchmark/glmark2/index.html @@ -0,0 +1,1334 @@ + + + + + + + + + + + + + + + + + + + + + + glmark2 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

glmark2

+

glmark2 is an OpenGL 2.0 and ES 2.0 benchmark. +We will only use glmark2-es2 for relevant tests here . This is a testing tool for x11-glesv2.

+

This software package is already pre-installed in the system.

+

th1520 only support glmark-es2.

+

Pre-steps

+

If you need perfect performance, put your device into performance mode before you start, here's how to do it.

+

Please execute the following commands in the terminal. This command requires a root account.

+
echo performance >  /sys/devices/system/cpu/cpufreq/policy0/scaling_governor 
+
+cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
+
+

After the execution is completed, you will see a series of numbers, such as "1848000".

+

Start operation

+

Open a terminal and enter glmark2-es2. This test allows the use of non-root accounts.

+

After entering the command, a new window will appear on your desktop with an active screen.

+

After the test is completed, the additional activity screen will disappear and the score will be output in the terminal in the form of "glmark2 Score: xxx".

+

For example:

+
debian@lpi4a:~/Desktop$ glmark2-es2
+=======================================================
+    glmark2 2021.12
+=======================================================
+    OpenGL Information
+    GL_VENDOR:      Imagination Technologies
+    GL_RENDERER:    PowerVR B-Series BXM-4-64
+    GL_VERSION:     OpenGL ES 3.2 build 1.17@6210866
+    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=8
+    Surface Size:   800x600 windowed
+=======================================================
+[build] use-vbo=false: FPS: 513 FrameTime: 1.949 ms
+[build] use-vbo=true: FPS: 1367 FrameTime: 0.732 ms
+[texture] texture-filter=nearest: FPS: 1449 FrameTime: 0.690 ms
+[texture] texture-filter=linear: FPS: 1454 FrameTime: 0.688 ms
+[texture] texture-filter=mipmap: FPS: 1453 FrameTime: 0.688 ms
+[shading] shading=gouraud: FPS: 1172 FrameTime: 0.853 ms
+[shading] shading=blinn-phong-inf: FPS: 1180 FrameTime: 0.847 ms
+[shading] shading=phong: FPS: 1002 FrameTime: 0.998 ms
+[shading] shading=cel: FPS: 979 FrameTime: 1.021 ms
+[bump] bump-render=high-poly: FPS: 700 FrameTime: 1.429 ms
+[bump] bump-render=normals: FPS: 1354 FrameTime: 0.739 ms
+[bump] bump-render=height: FPS: 1320 FrameTime: 0.758 ms
+[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1059 FrameTime: 0.944 ms
+[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 381 FrameTime: 2.625 ms
+[pulsar] light=false:quads=5:texture=false: FPS: 1484 FrameTime: 0.674 ms
+[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 349 FrameTime: 2.865 ms
+[desktop] effect=shadow:windows=4: FPS: 736 FrameTime: 1.359 ms
+[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 161 FrameTime: 6.211 ms
+[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 173 FrameTime: 5.780 ms
+[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 242 FrameTime: 4.132 ms
+[ideas] speed=duration: FPS: 593 FrameTime: 1.686 ms
+[jellyfish] <default>: FPS: 572 FrameTime: 1.748 ms
+[terrain] <default>: FPS: 42 FrameTime: 23.810 ms
+[shadow] <default>: FPS: 619 FrameTime: 1.616 ms
+[refract] <default>: FPS: 82 FrameTime: 12.195 ms
+[conditionals] fragment-steps=0:vertex-steps=0: FPS: 1539 FrameTime: 0.650 ms
+[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1238 FrameTime: 0.808 ms
+[conditionals] fragment-steps=0:vertex-steps=5: FPS: 1535 FrameTime: 0.651 ms
+[function] fragment-complexity=low:fragment-steps=5: FPS: 1411 FrameTime: 0.709 ms
+[function] fragment-complexity=medium:fragment-steps=5: FPS: 1050 FrameTime: 0.952 ms
+[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1376 FrameTime: 0.727 ms
+[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1394 FrameTime: 0.717 ms
+[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1379 FrameTime: 0.725 ms
+=======================================================
+                                  glmark2 Score: 950 
+=======================================================
+
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/benchmark/images/chromium_webgl_1.png b/benchmark/images/chromium_webgl_1.png new file mode 100644 index 0000000..379bfeb Binary files /dev/null and b/benchmark/images/chromium_webgl_1.png differ diff --git a/benchmark/lmbench/index.html b/benchmark/lmbench/index.html new file mode 100644 index 0000000..071c1eb --- /dev/null +++ b/benchmark/lmbench/index.html @@ -0,0 +1,1601 @@ + + + + + + + + + + + + + + + + + + + + + + lmbench - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

lmbench for Lpi4A

+

软件版本

+
+

lmbench for revyOS

+
+

测试说明

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
带宽测评工具反应时间测评工具其他
读取缓存文件上下文切换\
拷贝内存网络:连接的建立,管道,TCP,UDP 和RPC hot potato\
读内存文件系统的建立和删除\
写内存进程创建处理器时钟比率计算
管道信号处理\
TCP上层的系统调用\
\内存读入反应时间\
+

测试准备

+

下载测试工具:

+
git clone https://github.com/revyos/lmbench3.git
+
+
+

该版本为已为 RevyOS 移植版本。

+
+

在开始测试前,需要先安装依赖:

+
sudo apt install gcc make libntirpc-dev -y
+
+

测试执行

+

执行命令进行编译,配置,并测试

+
cd lmbench3
+cd src
+make results
+
+

编译完成后会有以下选项提示需要设置:

+

以下不需要更改的项目直接回车,会自动设置默认值。

+

MULTIPLE COPIES [default 1]: 设置同时运行 lmbench 的份数,份数多会使 lmbench 运行缓慢,默认是 1,这里设置为默认值 1。

+
=====================================================================
+
+If you are running on an MP machine and you want to try running
+multiple copies of lmbench in parallel, you can specify how many here.
+
+Using this option will make the benchmark run 100x slower (sorry).
+
+NOTE:  WARNING! This feature is experimental and many results are 
+    known to be incorrect or random!
+
+MULTIPLE COPIES [default 1]: 
+=====================================================================
+
+

Job placement selection [default 1]: 作业调度控制方法,默认值是 1,表示允许作业调度,这里设置为默认值。

+
=====================================================================
+
+Options to control job placement
+1) Allow scheduler to place jobs
+2) Assign each benchmark process with any attendent child processes
+   to its own processor
+3) Assign each benchmark process with any attendent child processes
+   to its own processor, except that it will be as far as possible
+   from other processes
+4) Assign each benchmark and attendent processes to their own
+   processors
+5) Assign each benchmark and attendent processes to their own
+   processors, except that they will be as far as possible from
+   each other and other processes
+6) Custom placement: you assign each benchmark process with attendent
+   child processes to processors
+7) Custom placement: you assign each benchmark and attendent
+   processes to processors
+
+Note: some benchmarks, such as bw_pipe, create attendent child
+processes for each benchmark process.  For example, bw_pipe
+needs a second process to send data down the pipe to be read
+by the benchmark process.  If you have three copies of the
+benchmark process running, then you actually have six processes;
+three attendent child processes sending data down the pipes and 
+three benchmark processes reading data and doing the measurements.
+
+Job placement selection [default 1]: 
+=====================================================================
+
+

Memory: 设置测试内存大小,默认是 $MB , 即为程序计算出来的最大可测试内存,也可以手动定义测试值,这里设置为这里使用默认值。

+
=====================================================================
+
+Several benchmarks operate on a range of memory.  This memory should be
+sized such that it is at least 4 times as big as the external cache[s]
+on your system.   It should be no more than 80% of your physical memory.
+
+The bigger the range, the more accurate the results, but larger sizes
+take somewhat longer to run the benchmark.
+
+MB [default 686]: 
+Checking to see if you have 686 MB; please wait for a moment...
+686MB OK
+686MB OK
+686MB OK
+Hang on, we are calculating your cache line size.
+OK, it looks like your cache line is 64 bytes.
+
+=====================================================================
+
+

SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: 要运行的测试集,包含 ALL/HARWARE/OS/DEVELOPMENT,默认选 all,这里选 all

+
=====================================================================
+
+lmbench measures a wide variety of system performance, and the full suite
+of benchmarks can take a long time on some platforms.  Consequently, we
+offer the capability to run only predefined subsets of benchmarks, one
+for operating system specific benchmarks and one for hardware specific
+benchmarks.  We also offer the option of running only selected benchmarks
+which is useful during operating system development.
+
+Please remember that if you intend to publish the results you either need
+to do a full run or one of the predefined OS or hardware subsets.
+
+SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: 
+=====================================================================
+
+

FASTMEM [default no]: 内存 latency 测试,如果跳过该测试,则设置为 yes,如果不跳过则设置为 no,默认是 no,这里设置为默认值。

+
=====================================================================
+
+This benchmark measures, by default, memory latency for a number of
+different strides.  That can take a long time and is most useful if you
+are trying to figure out your cache line size or if your cache line size
+is greater than 128 bytes.
+
+If you are planning on sending in these results, please don't do a fast
+run.
+
+Answering yes means that we measure memory latency with a 128 byte stride.  
+
+FASTMEM [default no]: 
+=====================================================================
+
+

SLOWFS [default no]: 文件系统 latency 测试,如果跳过值设置为 yes,不跳过设置为 no,默认 no,这里设置为默认值。

+
=====================================================================
+
+This benchmark measures, by default, file system latency.  That can
+take a long time on systems with old style file systems (i.e., UFS,
+FFS, etc.).  Linux' ext2fs and Sun's tmpfs are fast enough that this
+test is not painful.
+
+If you are planning on sending in these results, please don't do a fast
+run.
+
+If you want to skip the file system latency tests, answer "yes" below.
+
+SLOWFS [default no]: 
+=====================================================================
+
+

DISKS [default none]: 硬盘带宽和 seek time,需要设置测试硬盘的盘符,例如 /dev/sda,默认不测试(默认 none ),这里设置为默认值。

+
=====================================================================
+
+This benchmark can measure disk zone bandwidths and seek times.  These can
+be turned into whizzy graphs that pretty much tell you everything you might
+need to know about the performance of your disk.  
+
+This takes a while and requires read access to a disk drive.  
+Write is not measured, see disk.c to see how if you want to do so.
+
+If you want to skip the disk tests, hit return below.
+
+If you want to include disk tests, then specify the path to the disk
+device, such as /dev/sda.  For each disk that is readable, you'll be
+prompted for a one line description of the drive, i.e., 
+
+    Iomega IDE ZIP
+or
+    HP C3725S 2GB on 10MB/sec NCR SCSI bus
+
+DISKS [default none]: 
+=====================================================================
+
+

REMOTE [default none]: 网络测试,需要 2 台机器并设置 rsh,是测试机器能 rsh 访问另一台,默认不测试(默认 none ),这里设置为默认值。

+
=====================================================================
+
+If you are running on an idle network and there are other, identically
+configured systems, on the same wire (no gateway between you and them),
+and you have rsh access to them, then you should run the network part
+of the benchmarks to them.  Please specify any such systems as a space
+separated list such as: ether-host fddi-host hippi-host.
+
+REMOTE [default none]: 
+=====================================================================
+
+

Processor mhz [default 999 MHz, 1.0010 nanosec clock]: 测试 cpu,默认 $MHZ,即为程序判断出的频率,也可以根据情况自己设定,例如 3500,单位 MHz,这里设置为默认值。

+
=====================================================================
+
+Calculating mhz, please wait for a moment...
+I think your CPU mhz is 
+
+    999 MHz, 1.0010 nanosec clock
+
+but I am frequently wrong.  If that is the wrong Mhz, type in your
+best guess as to your processor speed.  It doesn't have to be exact,
+but if you know it is around 800, say 800.  
+
+Please note that some processors, such as the P4, have a core which
+is double-clocked, so on those processors the reported clock speed
+will be roughly double the advertised clock rate.  For example, a
+1.8GHz P4 may be reported as a 3592MHz processor.
+
+Processor mhz [default 999 MHz, 1.0010 nanosec clock]: 
+=====================================================================
+
+

FSDIR [default /usr/tmp]: 临时目录用来存放测试文件,可以自己设定,默认 /usr/tmp,这里设置为默认值。

+
=====================================================================
+
+We need a place to store a 686 Mbyte file as well as create and delete a
+large number of small files.  We default to /usr/tmp.  If /usr/tmp is a
+memory resident file system (i.e., tmpfs), pick a different place.
+Please specify a directory that has enough space and is a local file
+system.
+
+FSDIR [default /usr/tmp]: 
+=====================================================================
+
+

Status output file [default /dev/tty]: 测试输出信息文件存放目录,可以自己设定,默认 /dev/tty

+
=====================================================================
+
+lmbench outputs status information as it runs various benchmarks.
+By default this output is sent to /dev/tty, but you may redirect
+it to any file you wish (such as /dev/null...).
+
+Status output file [default /dev/tty]: 
+=====================================================================
+
+

Mail results [default yes]: 是否将测试结果邮件发出来,默认是 yes,这里设置为 no

+
=====================================================================
+
+There is a database of benchmark results that is shipped with new
+releases of lmbench.  Your results can be included in the database
+if you wish.  The more results the better, especially if they include
+remote networking.  If your results are interesting, i.e., for a new
+fast box, they may be made available on the lmbench web page, which is
+
+    http://www.bitmover.com/lmbench
+
+Mail results [default yes]: no
+OK, no results mailed.
+=====================================================================
+
+

以上项目设置完成后,开始自动执行测试。

+

测试结果

+

测试说明

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/benchmark/p7zip/index.html b/benchmark/p7zip/index.html new file mode 100644 index 0000000..1fb8e66 --- /dev/null +++ b/benchmark/p7zip/index.html @@ -0,0 +1,1304 @@ + + + + + + + + + + + + + + + + + + + + + + p7zip - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

p7zip

+

p7zip 测试是用于测试系统解压性能,通过数据直观评估性能,以下是运行 7pzip 测试的操作步骤

+

安装 7zip

+

首先需要在 RevyOS 中 安装 p7zip

+
debian@lpi4a:~/Desktop$ sudo apt update
+debian@lpi4a:~/Desktop$ sudo apt install p7zip-full
+
+

执行性能测试

+

进行 p7zip 测试需要在终端中输入以下命令来执行:

+
debian@lpi4a:~/Desktop$ 7z b
+
+

系统会开始进行测试然后输出性能数据。

+

通过以上步骤,可以在 RevyOS 上安装并测试 7zip 的性能。

+

以下是测试结果参考,使用镜像版本为RevyOS2023121016g版本

+
debian@lpi4a:~/Desktop$ 7z b
+
+7-Zip 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
+p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs LE)
+
+LE
+CPU Freq: - 64000000 64000000 - - - - - -
+
+RAM size:   15739 MB,  # CPU hardware threads:   4
+RAM usage:    882 MB,  # Benchmark threads:      4
+
+                       Compressing  |                  Decompressing
+Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
+         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS
+
+22:       3252   303   1045   3164  |      75268   394   1628   6422
+23:       3092   307   1025   3151  |      74514   399   1617   6447
+24:       3021   318   1022   3249  |      72017   398   1588   6322
+25:       2945   320   1050   3363  |      67801   395   1529   6034
+----------------------------------  | ------------------------------
+Avr:             312   1036   3232  |              396   1591   6306
+Tot:             354   1313   4769
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/benchmark/reboot/index.html b/benchmark/reboot/index.html new file mode 100644 index 0000000..716640f --- /dev/null +++ b/benchmark/reboot/index.html @@ -0,0 +1,1325 @@ + + + + + + + + + + + + + + + + + + + + + + reboot-test - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

重启测试

+

摘要

+

使用脚本对整机进行重启测试。

+

测试项说明

+

测试机器重启会不会出现死机等问题。

+

测试计划

+

进行重启测试 500 次。

+

操作步骤

+

在 /lib/system/system 下创建名为 cycletest.service_ 重启脚本:

+
[Unit]
+Description=Reboots unit after 30s
+
+[Service]
+StandardOutput=syslog+console
+ExecStart=/bin/sh -c "\
+test -f /cycle-count || echo 0 > /cycle-count;\
+echo 'starting cycletest';\
+sleep 30;\
+expr `cat /cycle-count` + 1 > /cycle-count;\
+systemctl reboot;\
+"
+
+[Install]
+WantedBy=multi-user.target
+
+

后根据以下指令安装并开始测试:

+
systemctl daemon-reload
+systemctl enable cycletest.service (enable the service to start on reboot)
+systemctl start cycletest.service (start the service, should reboot in 30s)
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/benchmark/stream/index.html b/benchmark/stream/index.html new file mode 100644 index 0000000..e3d31fc --- /dev/null +++ b/benchmark/stream/index.html @@ -0,0 +1,1312 @@ + + + + + + + + + + + + + + + + + + + + + + stream - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Stream

+

使用说明

+

STREAM 基准测试是一个简单的综合基准测试程序,它测量可持续内存带宽(以 MB/s 为单位)和简单向量内核的相应计算速率。

+

stream 仅有单个文件,在进行测试时只需要对 stream.c 进行编译即可:

+
git clone <https://github.com/microseyuyu/STREAM.git>
+cd STREAM
+gcc -O3 -fopenmp -DN=2000000 -DNTIMES=10 stream.c -o stream
+export OMP_NUM_THREADS=8
+./stream
+
+

参数说明:

+
    +
  • -O3:指定最高编译优化级别,即 3。
  • +
  • fopenmp:启用OpenMP,适应多处理器环境,更能得到内存带宽实际最大值。开启后,程序默认运行线程为CPU线程数
  • +
+

DN=2000000:指定测试数组a[]、b[]、c[]的大小(Array size)。该值对测试结果影响较大(5.9版本默认值2000000,。若stream.c为5.10版本,参数名变为-DSTREAM_ARRAY_SIZE,默认值10000000)。注意:必须设置测试数组大小远大于CPU 最高级缓存(一般为L3 Cache)的大小,否则就是测试CPU缓存的吞吐性能,而非内存吞吐性能。 +- -DNTIMES=10:执行的次数,并从这些结果中选最优值。 +- OMP_NUM_THREADS=8 线程数量。

+

参考结果:

+
debian@lpi4a:~/Desktop/STREAM$ ./stream
+-------------------------------------------------------------
+STREAM version $Revision: 5.10 $
+-------------------------------------------------------------
+This system uses 8 bytes per array element.
+-------------------------------------------------------------
+*****  WARNING: ******
+      It appears that you set the preprocessor variable N when compiling this code.
+      This version of the code uses the preprocesor variable STREAM_ARRAY_SIZE to control the array size
+      Reverting to default value of STREAM_ARRAY_SIZE=10000000
+*****  WARNING: ******
+Array size = 10000000 (elements), Offset = 0 (elements)
+Memory per array = 76.3 MiB (= 0.1 GiB).
+Total memory required = 228.9 MiB (= 0.2 GiB).
+Each kernel will be executed 10 times.
+ The *best* time for each kernel (excluding the first iteration)
+ will be used to compute the reported bandwidth.
+-------------------------------------------------------------
+Number of Threads requested = 8
+Number of Threads counted = 8
+-------------------------------------------------------------
+Your clock granularity/precision appears to be 1 microseconds.
+Each test below will take on the order of 21622 microseconds.
+   (= 21622 clock ticks)
+Increase the size of the arrays if this shows that
+you are not getting at least 20 clock ticks per test.
+-------------------------------------------------------------
+WARNING -- The above is only a rough guideline.
+For best results, please be sure you know the
+precision of your system timer.
+-------------------------------------------------------------
+Function    Best Rate MB/s  Avg time     Min time     Max time
+Copy:            8364.2     0.019258     0.019129     0.019508
+Scale:           8291.0     0.019572     0.019298     0.020162
+Add:             6223.6     0.038835     0.038563     0.040011
+Triad:           6222.5     0.038776     0.038570     0.039470
+-------------------------------------------------------------
+Solution Validates: avg error less than 1.000000e-13 on all three arrays
+-------------------------------------------------------------
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" "b/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" new file mode 100644 index 0000000..d218ac7 --- /dev/null +++ "b/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" @@ -0,0 +1,1383 @@ + + + + + + + + + + + + + + + + + + + + + + Debian 软件包构建流程 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Debian 软件包构建流程

+

宿主 debian

+
# qemu-user 下编译
+sudo apt update
+sudo apt install -y \
+    sbuild buildd qemu-system-misc qemu-user-static binfmt-support \
+    ca-certificates apt-transport-https devscripts mmdebstrap
+
+# native
+sudo apt install -y \
+    sbuild buildd ca-certificates apt-transport-https devscripts mmdebstrap
+
+# 修正宿主的debian-ports证书相关问题 现阶段可能不需要了
+wget https://mirror.sjtu.edu.cn/debian/pool/main/d/debian-ports-archive-keyring/debian-ports-archive-keyring_2023.02.01_all.deb
+sudo dpkg -i ./debian-ports-archive-keyring_2023.02.01_all.deb
+
+
+# sbuild 增加当前用户免root
+sudo sbuild-adduser $USER
+
+

创建打包环境

+

revyos-c910v

+
export SUFFIX=revyos-c910v-sbuild
+sudo sbuild-createchroot --debootstrap=debootstrap --arch=riscv64 \
+    --chroot-suffix=-$SUFFIX \
+    --keyring='' \
+    --no-deb-src \
+    --include=debian-ports-archive-keyring,ca-certificates,apt-transport-https,eatmydata \
+    --extra-repository="deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main contrib non-free" \
+    --extra-repository="deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-addons/ revyos-addons main" \
+    sid /srv/chroot/sid-riscv64-$SUFFIX \
+    https://mirror.iscas.ac.cn/revyos/revyos-base/
+
+# 修正环境相关问题
+sudo sed -i 's/deb http/deb [trusted=yes] http/g' /srv/chroot/sid-riscv64-$SUFFIX/etc/apt/sources.list
+sudo rm -rf /srv/chroot/sid-riscv64-$SUFFIX/var/lib/apt/lists/*
+echo "command-prefix=eatmydata" | sudo tee -a /etc/schroot/chroot.d/sid-riscv64-$SUFFIX-*
+
+# 调整source顺序 - 目的是同版本使用c910v仓库的
+# 编辑sources.list 确保以下顺序
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main contrib non-free
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-addons/ revyos-addons main
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-base/ sid main contrib non-free non-free-firmware
+
+

构建命令

+

revyos-c910v

+
sbuild --arch=riscv64 -d sid -c sid-riscv64-revyos-c910v-sbuild xxx.dsc
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/build/debian/enable_optimization_gcc/index.html b/build/debian/enable_optimization_gcc/index.html new file mode 100644 index 0000000..882b44d --- /dev/null +++ b/build/debian/enable_optimization_gcc/index.html @@ -0,0 +1,1319 @@ + + + + + + + + + + + + + + + + + + + + + + 如何启用优化GCC - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

如何启用 T-Head 优化 GCC

+

实验性 feature 如果发现问题可以进行issue申报

+
# 增加优化源
+sudo sed -i '1ideb https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main' /etc/apt/sources.list
+# 更新软件
+sudo apt update && sudo apt upgrade -y
+# 安装 gcc-10/gcc-13
+sudo apt install -y build-essential gcc-13 g++-13
+# 重启避免其他问题
+sudo reboot
+
+

测试 gcc-10 (gcc10.4 启用xtheadc+v0p7)

+
gcc -v
+Using built-in specs.
+COLLECT_GCC=gcc
+COLLECT_LTO_WRAPPER=/usr/lib/gcc/riscv64-linux-gnu/10/lto-wrapper
+Target: riscv64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 10.4.0-8revyos2.3' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=riscv64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libsanitizer --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-multilib --with-arch=rv64gcv0p7_zfh_xtheadc --with-abi=lp64d --enable-checking=release --build=riscv64-linux-gnu --host=riscv64-linux-gnu --target=riscv64-linux-gnu
+Thread model: posix
+Supported LTO compression algorithms: zlib zstd
+gcc version 10.4.0 (Debian 10.4.0-8revyos2.3)
+
+

测试 gcc-13 (gcc13.2 启用xthead extension)

+
gcc-13 -v
+Using built-in specs.
+COLLECT_GCC=gcc-13
+COLLECT_LTO_WRAPPER=/usr/libexec/gcc/riscv64-linux-gnu/13/lto-wrapper
+Target: riscv64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 13.2.0-1revyos1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=riscv64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-multilib --with-arch=rv64gc_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync --with-abi=lp64d --enable-checking=release --build=riscv64-linux-gnu --host=riscv64-linux-gnu --target=riscv64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=16
+Thread model: posix
+Supported LTO compression algorithms: zlib zstd
+gcc version 13.2.0 (Debian 13.2.0-1revyos1)
+
+

gcc-10/gcc-13 区别

+

除了v0p7 其他优化都可以用 gcc-13 代替 gcc-10

+

后者的优化可以主线报问题 是已经主线化的功能

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" "b/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" new file mode 100644 index 0000000..7bba3c6 --- /dev/null +++ "b/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" @@ -0,0 +1,1414 @@ + + + + + + + + + + + + + + + + + + + + + + 编译器相关说明 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

编译器相关说明

+

RevyOS 会预制相关优化编译器 基本支持rv64gc

+

常规扩展

+ + + + + + + + + + + + + + + + + + + + + + + +
支持的优化gcc-10gcc-13clang-17
Zfh
v0p7
+

THead 厂商扩展

+

xthead 当前版本 v2.2

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
支持的优化1gcc-102gcc-13.2clang-17
XTheadCmo
XTheadSync
XTheadBa
XTheadBb
XTheadBs
XTheadCondMov
XTheadMemIdx
XTheadMemPair
XTheadFMemIdx
XTheadMac
XTheadFmv
XTheadInt
XTHeadVdot3
+

注:

+
    +
  1. gcc-11/gcc-12/clang-14/clang15/clang16 xthead 扩展太少或无 所以未列出
  2. +
  3. gcc-10 使用 xtheadc 覆盖所有的扩展 gcc-10 使用了 thead-gcc 的源码
  4. +
  5. XTHeadVdot c910v/c920 不支持
  6. +
+

参考文档

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" "b/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" new file mode 100644 index 0000000..ac5b311 --- /dev/null +++ "b/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" @@ -0,0 +1,1318 @@ + + + + + + + + + + + + + + + + + + + + + + gcc 编译软件软件说明 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

gcc build programs 说明

+

安装gcc

+

首先确保安装gcc:

+
sudo apt update
+sudo apt install gcc
+
+

运行程序

+

下面以最简单的 'hello,world' 程序为例演示如何编译并运行:

+

编译以下内容并命名为 hello.c:

+
#include <stdio.h>
+
+int main()
+{
+        printf("hello, world\n");
+        return 0;
+}
+
+

编译并执行:

+
debian@lpi4a:~/test$ gcc -g hello.c -o hello
+
+debian@lpi4a:~/test$ ./hello
+hello, world
+
+
+

g++ build programs 说明

+

首先确保安装g++:

+
sudo apt update
+sudo apt install g++
+
+

运行程序

+

下面以最简单的 'hello,world' 程序为例演示如何编译并运行:

+

编译以下内容并命名为 hello.cpp:

+
#include <iostream>
+using namespace std;
+
+int main()
+{
+    cout << "Hello, World!\n";
+    return 0;
+}
+
+
+

编译并执行:

+
debian@lpi4a:~/test$ g++ -g hello.cpp -o hello
+debian@lpi4a:~/test$ ./hello
+Hello, World!
+
+

以上就是gcc/g++ 编译程序并运行的最简单实例,更复杂的应用案例可以参考相应的 +系统编程手册。

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/build/other/manuel_build_kernel/index.html b/build/other/manuel_build_kernel/index.html new file mode 100644 index 0000000..c9fb7c3 --- /dev/null +++ b/build/other/manuel_build_kernel/index.html @@ -0,0 +1,1256 @@ + + + + + + + + + + + + + + + + + + + + + + 手动编译内核 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

手动编译内核

+

内核工具链下载地址:

+

https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1663142514282/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1-20220906.tar.gz

+

这里假设编译环境为 UbuntuDebian

+

安装依赖:

+
sudo apt install -y gdisk dosfstools g++-12-riscv64-linux-gnu build-essential libncurses-dev gawk flex bison openssl libssl-dev tree dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf device-tree-compiler
+
+

解压工具链(这里解压到/opt):

+
tar -xvf Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1-20220906.tar.gz -C /opt
+
+

设置环境变量,将工具链加入环境变量中(假设工具链放在/opt中):

+
export PATH="/opt/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1/bin:$PATH"
+export CROSS_COMPILE=riscv64-unknown-linux-gnu-
+export ARCH=riscv
+
+

使用git下载内核代码:

+
# 内核仓库
+git clone https://github.com/revyos/thead-kernel.git
+
+

编译内核:

+
# 创建安装目标目录
+mkdir rootfs && mkdir rootfs/boot
+
+# 目录创建完成后,目录结构应该看起来是这样:
+# .. << 当前工作路径
+# |-- rootfs
+#     |-- boot
+# |-- thead-kernel
+#     |-- ...
+
+# 进入内核代码目录,开始构建
+cd thead-kernel
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv revyos_defconfig
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv -j$(nproc)
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv -j$(nproc) dtbs
+sudo make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv INSTALL_MOD_PATH=../rootfs/ modules_install -j$(nproc)
+sudo make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv INSTALL_PATH=../rootfs/boot zinstall -j$(nproc)
+# 构建perf(如果需要的话)
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv LDFLAGS=-static NO_LIBELF=1 NO_JVMTI=1 VF=1 -C tools/perf/
+sudo cp -v tools/perf/perf ../rootfs/sbin/perf-thead
+# 安装内核到安装目标目录
+sudo cp -v arch/riscv/boot/Image ../rootfs/boot/
+# 安装设备树到安装目标目录
+sudo cp -v arch/riscv/boot/dts/thead/light-lpi4a.dtb ../rootfs/boot/
+sudo cp -v arch/riscv/boot/dts/thead/light-lpi4a-dsi0-hdmi.dtb ../rootfs/boot/
+
+

之后只需要把rootfs中内容拷贝或覆盖到对应目录即可,注意内核Image和内核module目录一定要对应,不然会因缺失内核模块导致外设功能失效。

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" "b/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" new file mode 100644 index 0000000..bbf9974 --- /dev/null +++ "b/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" @@ -0,0 +1,1247 @@ + + + + + + + + + + + + + + + + + + + + + + T-Head QEMU 编译流程 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

T-Head QEMU 编译流程

+

C910V强制cpu指定补丁

+
From 5164bca5a4bcde4534dc1a9aa3a7f619719874cf Mon Sep 17 00:00:00 2001
+From: Han Gao <gaohan@iscas.ac.cn>
+Date: Sun, 23 Apr 2023 22:11:35 +0800
+Subject: [PATCH] qemu-user-riscv64 default cpu is c910v
+
+Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
+---
+ linux-user/riscv/target_elf.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/linux-user/riscv/target_elf.h b/linux-user/riscv/target_elf.h
+index 9dd65652ee45..3195cfa71408 100644
+--- a/linux-user/riscv/target_elf.h
++++ b/linux-user/riscv/target_elf.h
+@@ -9,7 +9,7 @@
+ #define RISCV_TARGET_ELF_H
+ static inline const char *cpu_get_model(uint32_t eflags)
+ {
+-    /* TYPE_RISCV_CPU_ANY */
+-    return "any";
++    /* TYPE_RISCV_CPU_C910V */
++    return "c910v";
+ }
+ #endif
+
+

编译流程

+
./configure \
+  --prefix=$HOME/qemu-install \
+  --static \
+  --target-list=riscv64-linux-user \
+  --disable-system \
+  --disable-pie \
+  --interp-prefix=/etc/qemu-binfmt/%M
+
+make -j20
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" "b/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" new file mode 100644 index 0000000..a943747 --- /dev/null +++ "b/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" @@ -0,0 +1,1191 @@ + + + + + + + + + + + + + + + + + + 构建文档 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

构建文档

+

这里描述了 RevyOS 相关的构建文档

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/ahead/20230802/index.html b/changelog/ahead/20230802/index.html new file mode 100644 index 0000000..ac1d0f3 --- /dev/null +++ b/changelog/ahead/20230802/index.html @@ -0,0 +1,1278 @@ + + + + + + + + + + + + + + + + + + + + 20230802 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230802

+

测试版镜像

+

基于 lpi4a 20230614 版本 +增加 ahead 支持 混合新 20230820 改动

+

下载地址

+

https://mirror.iscas.ac.cn/revyos/extra/images/beagle/test/20230802/

+

其余参见

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20230412/index.html b/changelog/lpi4a/20230412/index.html new file mode 100644 index 0000000..7517858 --- /dev/null +++ b/changelog/lpi4a/20230412/index.html @@ -0,0 +1,1376 @@ + + + + + + + + + + + + + + + + + + + + + + 20230412 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230412

+ +

系统版本

+

RevyOS 20230412 版本

+

桌面环境相关

+
    +
  • 默认桌面环境为xfce4桌面
  • +
  • 使用pulseaudio作为音频服务
  • +
+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • xfce4: 4.18
  • +
  • Debian GCC:13 (13-20230320-1)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • Go:1.19.8 (1.19.8-2)
  • +
  • Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-g7b352f5ac2ba)
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持 WIFI/BT 模块 RTL8723DS
  • +
+

系统服务

+
    +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 需要手动安装 wpasupplicant 才可连接无线网
  • +
  • xfce声音控制面板无法显示声音设备
  • +
  • 系统桌面不支持GPU硬件加速
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20230425/index.html b/changelog/lpi4a/20230425/index.html new file mode 100644 index 0000000..5d7a0e6 --- /dev/null +++ b/changelog/lpi4a/20230425/index.html @@ -0,0 +1,1395 @@ + + + + + + + + + + + + + + + + + + + + + + 20230425 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+ + + +
+
+ + + + + + + +

20230425

+ +

系统版本

+

RevyOS 20230425 版本

+

桌面环境相关

+
    +
  • 默认桌面环境为xfce4桌面
  • +
  • 使用pulseaudio作为音频服务
  • +
  • 使用wpasupplicant作为无线网络服务
  • +
+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • xfce4: 4.18
  • +
  • Debian GCC:13 (13-20230320-1)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • Go:1.19.8 (1.19.8-2)
  • +
  • Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-g7b352f5ac2ba)
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持WIFI/BT模块RTL8723DS
  • +
+

系统服务

+
    +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
+

已修复的问题

+
    +
  • xfce声音控制面板无法显示声音设备
  • +
  • 系统桌面不支持GPU硬件加速
  • +
  • 需要手动安装 wpasupplicant 才可连接无线网
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20230511/index.html b/changelog/lpi4a/20230511/index.html new file mode 100644 index 0000000..7faa41c --- /dev/null +++ b/changelog/lpi4a/20230511/index.html @@ -0,0 +1,1395 @@ + + + + + + + + + + + + + + + + + + + + + + 20230511 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+ + + +
+
+ + + + + + + +

20230511

+ +

系统版本

+

RevyOS 20230511 版本

+

桌面环境相关

+

添加了gnome桌面支持

+
    +
  • 支持gnome 桌面
  • +
  • 支持xfce4 桌面
  • +
+

支持应用相关

+
    +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • GNOME: 42.4 (预装在 gnome版本)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
  • 未支持 chromium(计划推进中)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-gbb4691fe5572)
  • +
  • 打开了 iotop 相关选项
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持 WIFI/BT 模块RTL8723DS
  • +
  • 加入风扇调速功能,风扇转速随CPU温度调整
  • +
+

系统服务

+
    +
  • 添加了查询版本时间戳功能,在终端输入'cat /etc/revyos-release' 即可获取
  • +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
  • 不支持2K分辨率
  • +
+

已修复的问题

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20230614/index.html b/changelog/lpi4a/20230614/index.html new file mode 100644 index 0000000..8b351ca --- /dev/null +++ b/changelog/lpi4a/20230614/index.html @@ -0,0 +1,1399 @@ + + + + + + + + + + + + + + + + + + + + + + 20230614 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+ + + +
+
+ + + + + + + +

20230614

+ +

系统版本

+

RevyOS 20230614 版本

+

桌面环境相关

+

当前版本只提供xfce4桌面支持

+
    +
  • 支持xfce4 桌面
  • +
+

支持应用相关

+

提供了chromium支持

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-gfac22a756532)
  • +
  • 打开exfat支持
  • +
  • 加入了HDMI音频支持
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

系统服务

+
    +
  • 添加了查询版本时间戳功能,在终端输入'cat /etc/revyos-release' 即可获取
  • +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 不支持2K分辨率
  • +
  • 鼠标拖动滞后
  • +
+

已修复的问题

+
    +
  • 修复了WI-FI和蓝牙功能
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20230810/index.html b/changelog/lpi4a/20230810/index.html new file mode 100644 index 0000000..66bdc6e --- /dev/null +++ b/changelog/lpi4a/20230810/index.html @@ -0,0 +1,1453 @@ + + + + + + + + + + + + + + + + + + + + + + 20230810 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+ + + +
+
+ + + + + + + +

20230810

+

系统版本

+

RevyOS 20230810 版本

+

版本下载

+

RevyOS 20230810 lpi4a

+
    +
  • boot-20230810-222415.ext4
  • +
  • root-20230810-222415.ext4
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本需要刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本需要刷写
  • +
+

破坏性更新

+

重新设计了启动流程 所以需要重新刷写所有分区

+

更新之后启动遇到错误

+
Retrieving file: /dtbs/linux-image-5.10.113-lpi4a/<NULL>-light-c910.
+Skipping l0r for failure retrieving fdt
+Light LPI4A#
+
+遇见这种情况需要执行</br>
+env default -a -f;env save;reset
+
+

桌面环境相关

+

当前版本只提供xfce4桌面支持

+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 firefox:114.0 (114.0-1revyos1)
  • +
  • 未预装 code-oss: 1.80.1 (1.80.1-1+electron23)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
+

内核相关

+

内核 commit ID: #2023.08.10.02.31+c130cdb21

+
    +
  • 内核版本号:5.10.113 (2023.08.10.02.31+c130cdb21)
  • +
  • 加入对USB串口设备的支持
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

系统服务

+
    +
  • 版本时间戳(/etc/revyos-release)- xfce 桌面: 20230810-222415
  • +
+

当前版本存在问题

+
    +
  • 不支持2K分辨率
  • +
  • 鼠标拖动滞后
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20230916/index.html b/changelog/lpi4a/20230916/index.html new file mode 100644 index 0000000..3edefd8 --- /dev/null +++ b/changelog/lpi4a/20230916/index.html @@ -0,0 +1,1337 @@ + + + + + + + + + + + + + + + + + + + + + + 20230916 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230916

+

系统版本

+

RevyOS 20230916 版本

+

版本下载

+

RevyOS 20230916 lpi4a

+
    +
  • boot-20230916-231502.ext4
  • +
  • root-20230916-231502.ext4
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本需要刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本需要刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

内核 commit ID

+
    +
  • +

    2023.09.11.06.54+b4d73b48a

    +
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20230916-231502
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:114.0 (114.0-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.66.0 (1.66.0+dfsg1-1~exp1)
  • +
  • 未预装 GCC:13 (13.1.0-1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2023.09.11.06.54+b4d73b48a
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 只开启了HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

存在问题

+
    +
  • 不支持2K分辨率
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20231026/index.html b/changelog/lpi4a/20231026/index.html new file mode 100644 index 0000000..fa2ea5a --- /dev/null +++ b/changelog/lpi4a/20231026/index.html @@ -0,0 +1,1420 @@ + + + + + + + + + + + + + + + + + + + + + + 20231026 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20231026

+

系统版本

+

RevyOS 20231026 版本

+

版本下载

+

RevyOS 20231026 lpi4a

+
    +
  • boot-20231026_181638.ext4.zst
  • +
  • root-20231026_181638.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:114.0 (114.0-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.66.0 (1.66.0+dfsg1-1~exp1)
  • +
  • 未预装 GCC:13 (13.1.0-1)
  • +
  • 支持 mpv:0.35.1
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 只开启了HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+
    +
  • 解决了HDMI音频爆音的问题
  • +
  • 添加了鼠标指针偏移的临时解决方案
  • +
+

存在问题

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20231210/index.html b/changelog/lpi4a/20231210/index.html new file mode 100644 index 0000000..dfdf895 --- /dev/null +++ b/changelog/lpi4a/20231210/index.html @@ -0,0 +1,1452 @@ + + + + + + + + + + + + + + + + + + + + + + 20231210 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20231210

+

系统版本

+

RevyOS 20231210 版本

+

版本下载

+

RevyOS 20231210 lpi4a

+
    +
  • boot-lpi4a-20231210_134926.ext4.zst
  • +
  • root-lpi4a-20231210_134926.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

内核 commit ID

+
    +
  • 2023.12.08.03.26+b8c5d3546
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20231210-134926
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2revyos1)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.4 (3.11.4-1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-4revyos1)
  • +
  • 支持 mpv:0.35.1
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2023.12.08.03.26+b8c5d3546
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+
    +
  • 改善了在menu上鼠标移动有延迟的问题
  • +
+

存在问题

+
    +
  • WIFI/BT模块AIC8800的蓝牙功能暂不可用
  • +
  • AIC8800内核支持已经存在,但对应设备树和固件暂时没有
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20240202/index.html b/changelog/lpi4a/20240202/index.html new file mode 100644 index 0000000..87df2e4 --- /dev/null +++ b/changelog/lpi4a/20240202/index.html @@ -0,0 +1,1449 @@ + + + + + + + + + + + + + + + + + + + + + + 20240202 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20240202

+

系统版本

+

RevyOS 20240202 版本

+

版本下载

+

RevyOS 20240202 lpi4a

+
    +
  • boot-lpi4a-20240202_141632.ext4.zst
  • +
  • root-lpi4a-20240202_141632.ext4.zst
  • +
  • u-boot-with-spl-lpi4a-main.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g-main.bin 16g版本刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g69d7d3cd (Jan 31 2024 - 12:58:20 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g69d7d3cd (Jan 31 2024 - 12:58:20 +0000)
  • +
+

内核 commit ID

+
    +
  • lpi4a:#2024.01.31.14.11+384c5e9e2
  • +
  • ahead:#2023.12.08.03.31+62225503f
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20240202-141632
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2revyos1)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.4 (3.11.4-1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-4revyos1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2024.01.31.14.11+384c5e9e2
  • +
  • 内核版本号:5.10.113-ahead #2024.01.31.14.11+384c5e9e2
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+

存在问题

+
    +
  • WIFI/BT模块RTL8723的蓝牙功能在重启/睡眠后不可用
  • +
  • AIC8800暂时不可用
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/changelog/lpi4a/20240601/index.html b/changelog/lpi4a/20240601/index.html new file mode 100644 index 0000000..3aa3e21 --- /dev/null +++ b/changelog/lpi4a/20240601/index.html @@ -0,0 +1,1348 @@ + + + + + + + + + + + + + + + + + + 20240202 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20240202

+

系统版本

+

RevyOS 20240601 版本

+

版本下载

+

RevyOS 20240601 lpi4a

+
    +
  • boot-lpi4a-20240601_180941.ext4.zst
  • +
  • root-lpi4a-20240601_180941.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
  • sdcard-lpi4a-20240601_180941.img.zst SD卡刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g96627087 (May 29 2024 - 08:30:59 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g96627087 (May 29 2024 - 08:30:59 +0000)
  • +
+

内核 commit ID

+
    +
  • lpi4a:#2024.01.31.14.11+384c5e9e2
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20240601_180941
  • +
+

RevyOS 20240601 meles

+
    +
  • boot-meles-20240601_180943.ext4.zst
  • +
  • iw-single-line.bin
  • +
  • root-meles-20240601_180943.ext4.zst
  • +
  • sdcard-meles-20240601_180943.img.zst
  • +
  • u-boot-with-spl-meles-4g.bin
  • +
  • u-boot-with-spl-meles.bin
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.21-1revyos1
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2-1+b1
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-23revyos1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2024.05.31.16.27+2dec14431
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
  • 支持从sd卡启动
  • +
+

已修复的问题

+
    +
  • str部分已修复
  • +
+

存在问题

+
    +
  • std存在部分问题
  • +
  • WIFI/BT模块RTL8723的蓝牙功能在重启/睡眠后不可用
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" "b/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" new file mode 100644 index 0000000..545f107 --- /dev/null +++ "b/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" @@ -0,0 +1,1278 @@ + + + + + + + + + + + + + + + + + + + + + + OpenTTD 游戏 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

OpenTTD

+

状态: +可以运行,软解图形

+

资料: +https://github.com/OpenTTD/OpenTTD/blob/master/COMPILING.md +https://salsa.debian.org/openttd-team/openttd/-/blob/master/debian/control

+

步骤

+
# 安装依赖
+sudo apt install libsdl2-dev zlib1g-dev libpng-dev libfreetype-dev libfontconfig-dev libicu-dev liblzo2-dev liblzma-dev libfluidsynth-dev libopengl-dev grfcodec openttd-opengfx cmake
+
+# 下载代码&编译
+git clone https://github.com/OpenTTD/OpenTTD.git
+cd OpenTTD
+mkdir build
+cd build
+cmake ..
+make
+
+# 运行
+./openttd
+
+

图形和音频资源文件通过游戏内功能下载,支持中文

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/desktop/games/images/openttd_1.png b/desktop/games/images/openttd_1.png new file mode 100644 index 0000000..76b400e Binary files /dev/null and b/desktop/games/images/openttd_1.png differ diff --git a/desktop/games/images/yquake2_1.png b/desktop/games/images/yquake2_1.png new file mode 100644 index 0000000..fba9a2e Binary files /dev/null and b/desktop/games/images/yquake2_1.png differ diff --git a/desktop/games/yquake2/index.html b/desktop/games/yquake2/index.html new file mode 100644 index 0000000..5b7d71b --- /dev/null +++ b/desktop/games/yquake2/index.html @@ -0,0 +1,1297 @@ + + + + + + + + + + + + + + + + + + + + + + yquake2 游戏 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

yquake2

+

状态: +可以运行,支持GLES加速

+

资料: +https://github.com/yquake2/yquake2/blob/master/doc/020_installation.md +https://github.com/yquake2/yquake2/blob/master/doc/030_configuration.md

+

安装步骤

+
# 安装依赖
+sudo apt install build-essential libgl1-mesa-dev libsdl2-dev libopenal-dev libcurl4-openssl-dev
+
+# 下载代码&编译
+git clone https://github.com/yquake2/yquake2.git
+mkdir build
+cd build
+cmake ..
+make
+
+# 运行
+#(需要准备好游戏原始资源文件夹baseq2)
+cd ..
+cd release
+cp -r ~/baseq2 .
+./quake2
+
+

展示

+

需要将原始游戏资源文件夹baseq2放到和quake2程序同一个目录中(Steam版可用)

+

分辨率和图形加速选项在游戏内设置菜单修改,不修改默认是软渲染,硬渲染设置请改为“OpenGL ES3”(参见下图)

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/desktop/install/index.html b/desktop/install/index.html new file mode 100644 index 0000000..51edfd8 --- /dev/null +++ b/desktop/install/index.html @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + 安装 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

包安装

+

在RevyOS中安装包只需要在 terminal 中输入

+
apt install + 包名
+
+

即可安装

+

以下以安装 git作为演示

+
debian@lpi4a:~$ sudo apt install git
+[sudo] password for debian: 
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+The following additional packages will be installed:
+  git-man liberror-perl patch
+Suggested packages:
+  gettext-base git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui
+  gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
+The following NEW packages will be installed:
+  git git-man liberror-perl patch
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Need to get 8605 kB of archives.
+After this operation, 39.4 MB of additional disk space will be used.
+Do you want to continue? [Y/n] y
+Get:1 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 liberror-perl all 0.17029-2 [29.0 kB]
+Get:2 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 git-man all 1:2.40.1-1 [2072 kB]
+Get:3 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 git riscv64 1:2.40.1-1 [6390 kB]
+Get:4 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 patch riscv64 2.7.6-7+b1 [114 kB]
+Fetched 8605 kB in 1s (6656 kB/s)
+Selecting previously unselected package liberror-perl.
+(Reading database ... 75688 files and directories currently installed.)
+Preparing to unpack .../liberror-perl_0.17029-2_all.deb ...
+Unpacking liberror-perl (0.17029-2) ...
+Selecting previously unselected package git-man.
+Preparing to unpack .../git-man_1%3a2.40.1-1_all.deb ...
+Unpacking git-man (1:2.40.1-1) ...
+Selecting previously unselected package git.
+Preparing to unpack .../git_1%3a2.40.1-1_riscv64.deb ...
+Unpacking git (1:2.40.1-1) ...
+Selecting previously unselected package patch.
+Preparing to unpack .../patch_2.7.6-7+b1_riscv64.deb ...
+Unpacking patch (2.7.6-7+b1) ...
+Setting up liberror-perl (0.17029-2) ...
+Setting up patch (2.7.6-7+b1) ...
+Setting up git-man (1:2.40.1-1) ...
+Setting up git (1:2.40.1-1) ...
+Processing triggers for man-db (2.11.2-2) ...
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/desktop/revyos-use-docker/index.html b/desktop/revyos-use-docker/index.html new file mode 100644 index 0000000..f94b2de --- /dev/null +++ b/desktop/revyos-use-docker/index.html @@ -0,0 +1,1237 @@ + + + + + + + + + + + + + + + + + + + + + + docker - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

安装 golang

+
sudo apt install golang-go
+
+

测试安装是否成功:

+
debian@lpi4a:~$ go version
+go version go1.19.8 linux/riscv64
+
+

安装 riscv64 docker

+

源中已有 riscv64 的docker安装包,名为 docker.io,可以直接使用:

+
sudo apt install docker.io
+
+

测试 docker

+
sudo docker pull riscv64/debian:unstable
+
+

issues

+

如果使用命令sudo docker pull riscv64/debian:unstable 出现以下错误:

+
debian@lpi4a:~$ docker pull riscv64/debian:unstable
+Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=riscv64%2Fdebian&tag=unstable": dial unix /var/run/docker.sock: connect: permission denied
+
+
+

需要执行以下命令进行修复:

+
# 1. 
+sudo chmod 666 /var/run/docker.sock
+
+# 2.
+sudo systemctl start docker
+
+# 3.
+sudo docker run hello-world
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/desktop/software/gimp/index.html b/desktop/software/gimp/index.html new file mode 100644 index 0000000..19e01ad --- /dev/null +++ b/desktop/software/gimp/index.html @@ -0,0 +1,1281 @@ + + + + + + + + + + + + + + + + + + + + + + GIMP 图像编辑工具 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

GIMP图像处理软件

+

状态:可以运行

+

官方资料页:https://docs.gimp.org/2.10/en/

+

软件说明

+

GIMP 是一个多平台工具,用于创建和编辑各种图像。 GIMP 是 GNU Image Manipulation Program 的首字母缩写。 GIMP 有很多功能。它可以用作简单的绘画程序、专家级的照片修饰程序、创建数字艺术的工具、在线批处理系统、批量生产的图像渲染器、图像格式转换器等。 GIMP 是可扩展和可扩展的。它旨在通过插件和扩展来增强以执行任何操作。先进的脚本界面允许从最简单的任务到最复杂的图像处理程序的所有内容都可以轻松编写脚本。

+

使用说明

+

GIMP是 RevyOS 预安装图形处理软件,如想使用 GIMP,在terminal中输入

+
gimp
+
+

在等待资源加载后就会弹出 GIMP 主界面

+

+

使用功能参考官方资料页

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/desktop/software/iBus/index.html b/desktop/software/iBus/index.html new file mode 100644 index 0000000..3738573 --- /dev/null +++ b/desktop/software/iBus/index.html @@ -0,0 +1,1269 @@ + + + + + + + + + + + + + + + + + + + + + + iBus 输入法 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

iBus 输入法

+

状态:可以运行

+

资料:https://wiki.debian.org/I18n/ibus

+

步骤(没有使用im-config)

+
sudo apt install ibus ibus-libpinyin
+sudo reboot
+
+

重启后需要手动将中文输入法添加到输入选项中:

+

托盘图标->右击->Preference +

+

点击选项卡Input Method->Add,打开下图窗口 +

+

点击Chinese->Intelligent Pinyin->Add +

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/CNAME b/en/CNAME new file mode 100644 index 0000000..bfc0408 --- /dev/null +++ b/en/CNAME @@ -0,0 +1 @@ +docs.revyos.dev diff --git a/en/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html b/en/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html new file mode 100644 index 0000000..9ceefef --- /dev/null +++ b/en/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html @@ -0,0 +1,2092 @@ + + + + + + + + + + + + + + + + + + + + + + GStreamer pipeline - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

GStreamer pipeline examples with thead OpenMax-IL lib

+

Some GStreamer pipeline command-line examples with omxil library on TH1520, RevyOS

+

Get ready

+

In this section, the grammer of the gstreamer command-line pipeline and some usefule debug tips are introduced. They have been moved to the end of the article.

+

Pipeline samples

+

Basically, you neet to install gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-omx-generic, gstreamer1.0-omx-bellagio-config,gstreamer1.0-tools.

+

Test

+

videotestsrc

+
# videotestsrc
+gst-launch-1.0 videotestsrc ! autovideosink
+
+# specify the video stream format
+gst-launch-1.0 videotestsrc ! video/x-raw, format=NV12, width=960, height=540, framerate=60/1 ! autovideosink
+
+

fpsdisplaysink

+
# display framerate
+gst-launch-1.0 videotestsrc ! fpsdisplaysink
+
+# no need to sync on the clock - used to test the performance of the pipeline
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sync=false
+
+# stop display on the screen, but redirect the output to stdout
+gst-launch-1.0 videotestsrc ! fpsdisplaysink text-overlay=false -v 2>&1
+
+# specify which sink to use
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sink=glimagesink
+
+# combine the previous examples
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sink=glimagesink sync=false text-overlay=false -v 2>&1
+
+

audiotestsrc

+
# audiotestsrc
+gst-launch-1.0 audiotestsrc ! autoaudiosink
+
+# change volume (0 to 1)
+gst-launch-1.0 audiotestsrc volume=0.1 ! autoaudiosink
+
+# change waveform
+# could be selected among square, silence, pink-noise, etc.
+gst-launch-1.0 audiotestsrc wave=pink-noise ! autoaudiosink
+
+# set fix frequency, such as "do" (262 Hz)
+gst-launch-1.0 audiotestsrc freq=262 ! autoaudiosink
+
+

fakesink

+
# a dummy sink that swallows everything
+gst-launch-1.0 videotestsrc ! fakesink
+
+

Decode

+

Video decode

+
# let decodebin choose which decoder to use,
+# and autovideosink choose which video-sink to use (not recommended)
+gst-launch-1.0 filesrc location=fire.mp4 ! decodebin ! autovideosink
+
+# h264 software decode without opengl display
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h264parse ! avdec_h264 ! xvimagesink
+
+# h264 hardware decode with opengl display
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h264parse ! omxh264dec ! glimagesink
+
+# h265 hardware decode
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h265parse ! omxh265dec ! glimagesink
+
+# vp9 hardware decode 
+gst-launch-1.0 filesrc location=fire.webm ! matroskademux ! omxvp9dec ! glimagesink
+
+# mpeg4 hardware decode 
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! queue ! mpeg4videoparse ! omxmpeg4videodec ! glimagesink
+
+# play mkv/webm file
+gst-launch-1.0 filesrc location=fire.mkv ! matroskademux ! decodebin ! glimagesink
+
+# todo 10-bit h264/h265 decode
+
+

Audio decode

+
# there is no hardware decoder on th1520
+
+# let autoaudiosink choose which audio-sink to use
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! autoaudiosink
+
+# mp3 decode
+gst-launch-1.0 filesrc location=blade.mp3 ! mpegaudioparse ! avdec_mp3 ! audioconvert ! autoaudiosink
+
+# aac decode
+gst-launch-1.0 filesrc location=blade.aac ! aacparse ! avdec_aac ! audioconvert ! autoaudiosink
+gst-launch-1.0 filesrc location=blade.aac ! aacparse ! faad ! audioconvert ! autoaudiosink
+## faad works well without aacparse
+gst-launch-1.0 filesrc location=blade.aac ! faad ! audioconvert ! autoaudiosink
+
+# opus decode
+## ogg file must be demuxed by oggdemux first
+gst-launch-1.0 filesrc location=blade.ogg ! oggdemux ! opusparse ! opusdec ! audioconvert ! autoaudiosink
+gst-launch-1.0 filesrc location=blade.ogg ! oggdemux ! opusparse ! avdec_opus ! audioconvert ! autoaudiosink
+
+# wav decode
+gst-launch-1.0 filesrc location=test.wav ! wavparse ! audioresample ! audioconvert ! autoaudiosink
+
+# use specific audiosink
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! pulsesink
+
+# specify the output device by using alsasink with device property
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! alsasink device=hw:0,2
+
+

demux and decode

+

We play media file in this section.

+
# play mp4 file with both audio and video
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux name=demux \
+  demux.video_0 ! queue  ! decodebin ! videoconvert ! autovideosink \
+  demux.audio_0 ! queue ! decodebin ! audioconvert !  autoaudiosink
+
+

Encode to file

+

Video encode

+
# h264 encode test
+# before import video stream to omxh264dec, data should be transformed to frame with rawvideoparse
+# property and pad of rawvideoparse should be set to the same, so we use 'use-sink-caps=true' here
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc ! fakesink
+
+# h264 hardware encode to file
+## todo: encoded h264 file has seek problem
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc \
+  ! h264parse ! qtmux ! mp4mux ! filesink location=test.mp4
+
+# h264 hardware encode to file with specific bitrate(bit per second)
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true  \
+  ! omxh264enc target-bitrate=3000000 \
+  ! h264parse ! filesink location=test.mp4
+
+
+# h265 hardware encode to file
+## this pipeline produces h265 stream only
+## qtdemux is not needed while decoding
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh265enc \
+  ! h265parse ! filesink location=test.h265
+
+# h264 hardware encode from camera to file
+gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert \
+  ! video/x-raw, format=NV12,width=640,height=480 \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! filesink location=test.mp4 -e
+
+

Audio encode

+
# There is no hardware audio encoder on th1520
+
+# encode aac stream with adts container(.aac file)
+## the unit of the bitrate is 'bit/sec'
+gst-launch-1.0 audiotestsrc ! voaacenc bitrate=128000 ! avmux_adts ! filesink location=test.aac
+
+
+# todo: encode aac stream with adif container(.m4a file)
+
+# encode to mp3 file
+## the unit of the bitrate is 'kbit/sec'
+gst-launch-1.0 audiotestsrc ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=test.mp3
+
+# encode opus stream to .ogg file
+gst-launch-1.0 audiotestsrc ! opusenc ! oggmux ! filesink location=test.opus
+
+
+# todo: encode pcm stream to .wav file
+
+

mux and encode

+

This part has been removed to Video + audio transcode section.

+

Media file transcode

+

Video transcode

+

Since omx...dec cannot fulfill qtdemux and mp4mux, and gst-omx is no longer maintained, it is hard to mux mp4 file with these two plugins. To mux stream from omxh264dec, use avmux_mp4 instead. But there is no h265 or vp9 muxer available for omx...dec

+

The raw video stream should be processed by rawvideoparse before sent to encoder. Because itself cannot scale frame or change framerate, rawvideoparse need to get the stream info of its sink pad(src pad of the backward element). Therefore use-sink-caps must be set to true.

+

To change width and height, set properties output-width and output-height of omx...dec. To modify bitrate and bitrate control method, set properties control-rate and target-bitrate of omx...enc. To change framerate, set properties of videorate.

+
# h265 to h264
+gst-launch-1.0 filesrc location=test_h265.mp4 ! qtdemux ! h265parse ! omxh265dec \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! avmux_mp4 ! filesink location=t_h264.mp4
+
+# vp9 to h264
+gst-launch-1.0 filesrc location=test_vp9.webm ! matroskademux ! omxvp9dec \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! avmux_mp4 ! filesink location=t_h264.mp4
+
+# arbitrary input to h264
+gst-launch-1.0 filesrc location=test_h264.mp4 ! decodebin \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! filesink location=t_h264.mp4
+
+# h264 to h264, with more options
+## set the video width and height to 1280×720, framerate to 15fps, bitrate mode to constant and bitrate to 5Mbps
+gst-launch-1.0 filesrc location=test_h264.mp4 ! qtdemux ! h264parse \
+  ! omxh264dec output-width=1280 output-height=720 \
+  ! videorate ! video/x-raw, framerate=15/1 \
+  ! rawvideoparse use-sink-caps=true  \
+  ! omxh264enc control-rate=constant target-bitrate=5000000 ! h264parse ! filesink location=t_h264.mp4
+
+## there is no vp9 encoder in th1520 omxil lib
+
+

Audio transcode

+
# aac to mp3
+gst-launch-1.0 filesrc location=test.aac ! aacparse ! avdec_aac ! audioconvert ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=t.mp3
+
+# mp3 to aac
+gst-launch-1.0 filesrc location=test.mp3 ! mpegaudioparse ! avdec_mp3 ! audioconvert ! voaacenc bitrate=128000 ! avmux_adts ! filesink location=t.aac
+
+# wav to mp3
+gst-launch-1.0 filesrc location=test.wav ! wavparse ! audioresample ! audioconvert ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=t.mp3
+
+# mp3 to wav
+gst-launch-1.0 filesrc location=test.mp3 ! mpegaudioparse ! avdec_mp3 ! audioresample ! audioconvert \
+  ! audio/x-raw, rate=44100, format=S16LE ! wavenc ! filesink location=t.wav
+
+

Video + audio remux and transcode

+
# mux test
+gst-launch-1.0 audiotestsrc ! autoaudiosink videotestsrc ! autovideosink
+
+# mux the test video and audio stream to a mp4 file
+## be aware that '-e' must be set to this pipeline,
+## and there is no '!' before audiotestsrc
+gst-launch-1.0 -e videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=960, height=540 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc ! h264parse \
+  ! avmux_mp4 name=mux ! filesink location=t_h264.mp4 \
+  audiotestsrc ! lamemp3enc ! mux.
+
+# change container from mkv to mp4 with h264 stream
+## this means demux a mkv file then mux video and audio stream to mp4 file
+gst-launch-1.0 filesrc location=test_h264.mkv \
+  ! matroskademux name=demux mp4mux force-create-timecode-trak=true name=mux ! filesink location=t_h264.mp4 \
+  demux.video_0 ! queue ! video/x-h264 ! mux. \
+  demux.audio_0 ! queue ! audio/mpeg ! mux.
+
+

Media mixing

+

Camera capture

+

You can use command v4l2-ctl, which is included in package v4l-utils to get information of your camera.

+

For more information, read this article

+
# h264 hardware encode from camera to file
+gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert \
+  ! video/x-raw, format=NV12,width=640,height=480 \
+  ! rawvideoparse format=nv12 width=640 height=480 \
+  ! omxh264enc ! h264parse ! filesink location=test.mp4 -e
+
+
+

Stream transfer

+
# capture camera and stream to other machine
+
+## source
+gst-launch-1.0 v4l2src device=/dev/video0 !  videoconvert ! videorate \
+  ! video/x-raw,  format=NV12,width=640,height=480,framerate=20/1 \
+  ! rawvideoparse format=nv12 width=640 height=480  framerate=20/1 \
+  ! omxh264enc ! h264parse config-interval=1 ! video/x-h264,stream-format=byte-stream,alignment=nal \
+  ! rtph264pay ! udpsink  host=192.168.31.27 port=5600
+
+## destination
+gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
+  ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink
+
+

Other tools

+

gst-inspect-1.0

+

gst-inspect-1.0 is a tool to print info about a GStreamer element(factory), which is included in gstreamer1.0-tools.

+
# print the GStreamer element list with a 'less' like paing filter.
+gst-inspect-1.0
+
+# print info of the element
+gst-inspect-1.0 <element_name>
+
+

gst-discover1.0

+

gst-discover-1.0 is a tool to show info about the media file, which is inclucded in gstreamer1.0-plugins-base-apps.

+
gst-discoverer-1.0 -v test.mp4
+
+

gst-play-1.0

+

If you are tired of manually build pipeline for playback by hand. You can use gst-play-1.0 as an alternative, which is included in gstreamer1.0-plugins-base-apps.

+
# play media file
+gst-play-1.0 test.mp4
+
+# play media file with specific sink
+gst-play-1.0 --videosink=glimagesink --audiosink=alsasink
+
+

Left button and right button can be used to seek. For more info, please read this article.

+

Other examples

+

Get ready

+

Debug tips

+

To get the cap info or property of an element, you may need to run gst-inspect-1.0 <element_name>. If gst-inspect-1.0 command not found, install gstreamer1.0-tools.

+

If you want to debug GStreamer, refer to the articles below. +https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html +https://gstreamer.freedesktop.org/documentation/gstreamer/running.html?gi-language=c

+

Grammer

+

Here is a simple command-line pipeline.

+
gst-launch-1.0 videotestsrc ! autovideosink
+
+

! represent a link. The established pipeline looks like

+
videotestsrc => autovideosink
+
+

There are several properties in videotestsrc, which could be lookup by gst-inspect-1.0 videotestsrc.Set some properties:

+
gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink
+
+

NAME=VALUE is a property. pattern and flip are properties of videotestsrc.

+

Sometimes we need to control the behavior of gst-launch-1.0.

+
GST_DEBUG=3 gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink
+gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink --gst-debug-level=3
+
+

There are two ways to achieve this goal. One is setting environment variable. Another one is passing command-line argument to gst-launch-1.0. GST_DEBUG=3 and --gst-debug-level=3 have the same meaning.

+

In most video decoding cases, there is a video-stream and an audio stream. We need to use demuxer to seperate them. Demuxer usually have several src pad. Here is an example.

+
gst-launch-1.0 filesrc location=test-video.mp4 ! qtdemux name=demux demux. ! queue ! h264parse ! omxh264dec ! glimagesink demux. ! queue ! aacparse ! avdec_aac ! audioconvert !  alsasink
+
+

It is hard to read. Add some word wrap:

+
gst-launch-1.0 filesrc location=test-video.mp4 ! qtdemux name=demux \
+  demux. ! queue ! h264parse ! omxh264dec ! glimagesink \
+  demux. ! queue ! aacparse ! avdec_aac ! audioconvert ! pulsesink
+
+

Here we use a demuxer to seperate video and audio, the grammer is:

+
... demuxer name=DEMUXER_NAME \
+DEMUXER_NAME.PIPELINE_NAME_1 ! queue ! ...(the remaining part of pipeline 1) \
+DEMUXER_NAME.PIPELINE_NAME_2 ! queue ! ...(the remaining part of pipeline 2)
+
+

Sometimes we need to set certain properties of the stream at certain nodes in the pipeline, e.g set resolution of the videostream of the videotestsrc.

+
gst-launch-1.0 videotestsrc ! video/x-raw, width=800, height=600 ! glimagesink
+
+

We negotiated the pad properties between videotestsrc and glimagesink. The property names and values must be supported by both element. You can find them in Pad Templates section of gst-inspect-1.0.

+

Reference

+
    +
  1. GStreamer pipeline grammar - StackOverflow
  2. +
  3. GStreamer pipeline samples - GitHub
  4. +
  5. gst-launch-1.0 - GStreamer doc
  6. +
  7. How to display fps of streaming video in gsteramer? - StackOverflow
  8. +
  9. Storing AAC Audio and Retrieving - StackOverflow
  10. +
  11. Accelerated GStreamer User Guide - NVIDIA
  12. +
  13. Storing AAC Audio and Retrieving - StackOverflow
  14. +
  15. Play an opus file with gstreamer and pulseaudio - StackOverflow
  16. +
  17. mp4mux not working with omxh264enc
  18. +
  19. omxh264enc makes qtmux error out with "Buffer has no PTS." - FreeDesktop - Gitlab
  20. +
  21. gst-omx: Retire the whole package - FreeDesktop - Gitlab
  22. +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/en/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" "b/en/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" new file mode 100644 index 0000000..fa0a5ca --- /dev/null +++ "b/en/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" @@ -0,0 +1,1968 @@ + + + + + + + + + + + + + + + + + + + + + + GStreamer 播放器适配 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

支持 PTG omxil 库的 GStreamer 播放器适配文档

+

适用SDK v1.1.2

+

概述

+

PTG 的 OpenMAX IL 库(下称 vpu-omxil)可使 LicheePi 4A 能够流畅硬解码 4k 60fps 的视频,那么具体应该如何使用该库呢?本文将主要介绍 LicheePi 4A 开发板上 Parole 播放器的集成与使用,用户可根据本文来了解在 LicheePi 4A 上的适配过程 +以 h264 的硬解为例,视频硬解的工作流程如图所示

+
                +-------------------------------------------+
+                |    +------------+       +------------+    |   +--------+
+video stream----+--->| omxh264dec +------>| video-sink +----+-->| player |
+                |    +------+-----+       +------------+    |   +--------+
+                |           |     GStreamer                 |
+                +-----------+-------------------------------+
+                            |
+                      +-----v-----+
+                      | vpu-omxil |
+                      +-----+-----+
+                            |
+                            |
+                    +-------v-------+
+                    | kernel module |
+                    |    (driver)   |
+                    +-------+-------+
+                            |
+                            v
+                        hardware
+
+
    +
  1. 视频流(video stream)由 GStreamer 读入后经过一系列预处理,送到 GStreamer 的解码器omxh264dec
  2. +
  3. omxh264dec 调用动态库,即 PTG 提供的 vpu-omxil 库,该库通过驱动访问硬件(kernel module)进行硬解
  4. +
  5. 解码后的流传输到 GStreamer 的 video-sink 中,并由播放器(player)呈现
  6. +
+

A. GStreamer omxh264dec 解码测试

+

将 omxh264 解码的部分单独拎出来,大体的结构如下

+
  +---+------------+----+
+  |   +------------+    |
+  |   | omxh264dec |    |
+  |   +------------+    |
+  |      GStreamer      |
+  +----------+----------+
+             |
+  +----+-----v-----+----+
+  |    +-----------+    |
+  |    | vpu-omxil |    |
+  |    +-----------+    |
+  |  libomxil-bellagio  |
+  +----------+----------+
+             |
++------------v------------+
+|  - memalloc   - vc8000  |
+|  - hantrodec  - vidmem  |
+|      kernel modules     |
++------------+------------+
+             |
+             v
+          hardware
+
+

我们依照自底向上的顺序构建图示的链条。 +本节的主要目的是使 omxh264dec 解码器能够运行,并不涉及到输出屏幕等内容。

+

1. 驱动编译、安装以及硬件访问权限的设置

+

硬解码需要访问硬件,而访问硬件又需要驱动,所以需要编译并安装驱动

+

1.1 编译驱动

+

PTG 提供的驱动源:

+

https://github.com/revyos/vpu-vc8000e-kernel

+

https://github.com/revyos/vpu-vc8000d-kernel

+

https://github.com/revyos/video_memory

+
1.1.1替代方案
+

revyos/thead-kernel 已经合并了上述三个内核模块, 使用revyos_defconfig 可以无需编译上述内核模块

+

1.2 安装驱动

+
# depmod 分析可载入模块的依赖关系,在 /lib/modules/<kernel-version>中添加modules.dep文件,以便后续 modprobe 使用
+sudo depmod -a
+sudo modprobe vidmem vc8000 hantrodec memalloc
+
+## 如果 modprobe 安装有问题的话,可以尝试使用 insmod 安装
+#cd /usr/lib/modules/$(uname -r)
+#sudo insmod $(find . -name *vidmem.ko*)
+#sudo insmod $(find . -name *vc8000.ko*)
+#sudo insmod $(find . -name *hantrodec.ko*)
+#sudo insmod $(find . -name *memalloc.ko*)
+
+# 可选:设置开机加载模块
+echo -e "\nvidmem\nhantrodec\nmemalloc\nvc8000\n" | sudo tee -a /etc/modules > /dev/null
+
+

1.3 设置硬件访问权限

+

安装内核模块后,/dev 目录下会出现 hantrodec vidmem vc8000 三个设备文件。默认情况下,用户对其没有访问权限,如果不修改权限的话,非 root 用户在打开 omxil 库时会报错。

+
# 生效一次
+cd /dev
+sudo chmod 666 hantrodec vidmem vc8000
+
+# 长期生效
+cat << EOF | sudo tee /lib/udev/rules.d/70-hantro.rules > /dev/null
+KERNEL=="vidmem", MODE="0666"
+KERNEL=="hantrodec", MODE="0666"
+KERNEL=="vc8000", MODE="0666"
+EOF
+
+

RevyOS 适配记录

+

如果要获取 RevyOS 特定版本的内核模块,可进入 revyos/thead-kernel ,并在 GitHub CI 中下载 artifacts

+

2. 安装 vpu-omxil 并调整配置

+

首先,请将 vpu-omxil 下载并解压到 /usr/lib/omxil/中 +vpu-omxil_1.2.1.tar.gz +如下图所示, 需要

+
    +
  1. vpu-omxil 中的 OpenMax 组件注册到 libomxil-bellagio
  2. +
  3. gst-omx(该包提供了 omxh264dec 解码器) 调用 libomxil-bellagio 的时候也需要知道调用的组件名称
  4. +
+
+---------+   +-------------------+   +-----------+
+| gst-omx +-->| libomxil-bellagio +-->| vpu-omxil |
++---------+   +-------------------+   +-----------+
+
+

2.1 将 vpu-omxil 中的组件注册到 libomxil-bellagio

+
sudo apt install libomxil-bellagio-bin libomxil-bellagio0
+# 注册组件
+omxregister-bellagio -v /usr/lib/omxil/
+
+

使用 omxregister-bellagio 生成注册文件,默认路径为 ~/.omxregister

+
2.1.1 RevyOS/Debian 注册组件
+

th1520-vpu 利用了 debian 在 usr/lib/riscv64-linux-gnu/libomxil-bellagio0 安装之后 +触发自动注册行为 结果如下

+
cat /var/lib/libomxil-bellagio0/registry
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.H2.video.encoder.so
+ ==> OMX.hantro.H2.video.encoder ==> OMX.hantro.H2.video.encoder.avc:OMX.hantro.H2.video.encoder.hevc:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.VC8000D.image.decoder.so
+ ==> OMX.hantro.VC8000D.image.decoder ==> OMX.hantro.VC8000D.image.decoder.jpeg:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.H2.image.encoder.so
+ ==> OMX.hantro.H2.image.encoder ==> OMX.hantro.H2.image.encoder.jpeg:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.VC8000D.video.decoder.so
+ ==> OMX.hantro.VC8000D.video.decoder ==> OMX.hantro.VC8000D.video.decoder.mpeg4:OMX.hantro.VC8000D.video.decoder.avc:OMX.hantro.VC8000D.video.decoder.avs:OMX.hantro.VC8000D.video.decoder.h263:OMX.hantro.VC8000D.video.decoder.wmv:OMX.hantro.VC8000D.video.decoder.vp6:OMX.hantro.VC8000D.video.decoder.vp8:OMX.hantro.VC8000D.video.decoder.jpeg:OMX.hantro.VC8000D.video.decoder.hevc:OMX.hantro.VC8000D.video.decoder.vp9:OMX.hantro.VC8000D.video.decoder.avs2:
+
+

2.2 调整 gstomx.conf 的设置

+

调整 gstomx.conf 的设置以使解码器 omxh264dec 调用正确的组件,具体请查看针对 gst-omx 的补丁

+

gst-omx-01-add-libomxil-config.patch

+

3. 添加 dmabuf 补丁

+

请查看 PTG 提供的针对 gst-omx 的 dmabuf 补丁 +gst-omx-02-set-dec-out-port-dmabuf.patch

+

4. GStreamer 解码初步测试

+
sudo apt install gstreamer1.0-omx-generic gstreamer1.0-omx-bellagio-config gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-gl gstreamer1.0-plugins-good gstreamer1.0-tools
+
+# 1 基本解码
+gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fakesink  sync=false
+# 2 在终端中显示 fps
+# 参考:https://stackoverflow.com/questions/73948308
+gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fpsdisplaysink video-sink=fakesink  text-overlay=false sync=false -v 2>&1
+
+

fakesink会把前面的视频流全部吞掉,不输出画面(因而不会在 video-sink 这一环节损失性能),但是结合fpsdisplaysink可以读取到解码的速度。正常日志如下:

+
Setting pipeline to PAUSED ...[DBGT]
+vc8kdec compiled without trace support (ENABLE_DBGT_TRACE switch not enabled)
+Pipeline is PREROLLING ...
+Redistribute latency...
+OMX  ! decoder_get_parameter OMX_ErrorNoMore (2)
+Pipeline is PREROLLED ...
+Setting pipeline to PLAYING ...
+New clock: GstSystemClockRedistribute latency...
+0:01:39.5 / 0:01:49.4 (90.9 %)
+
+

【TIP】如果有 [omxh264dec-omxh264dec0: Could not initialize supporting library.](https://gist.github.com/Sakura286/015fae6792e160268db7ad8a697dd2df) 等字样的报错,可以安装gst-omxlibomxil-bellagiolibc6相关的 debug-symbol 包,使用 gdb 启动上述命令进行调试。调试时,先断DWLInit,然后再断open,具体看是打开哪个地方的时候出错了。

+

RevyOS 适配记录

+

RevyOS 适配过程中对于初始化动态库失败找到了如下三种原因:

+
    +
  1. 编译 vpu-omxil 时使用的工具链与当前系统不兼容
  2. +
  3. 未使用omxregister-bellagio注册 vpu-omxil
  4. +
  5. 未调整 /dev 目录下 hantrodec vc8000 vidmem 等设备的权限
  6. +
+

B. 选用合适的 GStreamer video-sink

+

video-sink 是视频流在整个 GStreamer pipeline 中的最后一步,其作用一般是将视频流输出到屏幕上。 +前文中fakesink只是测试解码器是否正常工作的特殊 video-sink可选的 video-sink非常多,常见的有 autovideosinkximagesinkxvimagesinkfbdevsinkwaylandsinkglimagesinkgtkglsink等,它们各在不同的插件包里,需要酌情安装:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
video-sink所属包名
waylandsinkgstreamer1.0-plugins-bad
fbdevsinkgstreamer1.0-plugins-bad
autovideosinkgstreamer1.0-plugins-good
gtkglsinkgstreamer1.0-plugins-good
ximagesink | xvimagesinkgstreamer1.0-plugins-base
glimagesinkgstreamer1.0-plugins-base | gstreamer1.0-gl
+

【TIP】使用 gst-inspect-1.0 <video-sink-name> 来查看对应 video-sink 可用的选项 +【TIP】添加 --gst-debug-level=<lv> 来获得更多的输出日志,其中 <lv> 代表了从 1 到 6,啰嗦程度从低到高,建议在等级 4 及以下,否则日志会非常长 +请尝试不同的 video-sink ,并尝试不同的插件参数,以及给予不同的环境变量,直至找到可以流畅硬解 H264 的那一个。

+

RevyOS 适配记录

+
    +
  • **waylandsink**:由于现在(20230720)RevyOS 采用了 Xfce 桌面,不可能支持 Wayland,故 waylandsink从原理上无法使用
  • +
  • **fbdevsink****ximagesink**:无法使用
  • +
  • **xvimagesink**:通过流水线图以及日志可以确定,playbin 或 autovideosink 会自动调用 xvimagesink,使用 perf 分析后可以发现,使用xvimagesink 不可避免地会进行大量的 memcpy 操作,严重降低解码性能;该问题在获得PTG的 dmabuf 补丁后依然存在,故无法使用
  • +
  • **gtkglsink**GTK3 不支持 EGL on X11,而 RevyOS 目前基于 x11,且只支持 EGL,故无法使用
  • +
+

剩下的只有glimagesink,根据 Running and debugging GStreamer Applications,并观察其他使用到 glimagesink 的例子,可以猜测需要明确指定环境变量 GST_GL_APIGST_GL_PLATFORM +由于 RevyOS 使用了 gles2+egl 的组合,使用如下的命令,成功硬解。

+
GST_GL_API=gles2 GST_GL_PLATFORM=egl gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fpsdisplaysink video-sink=glimagesink sync=false
+
+

然而 GStreamer 被播放器调用时是无法通过环境变量来传递参数的,所以构建 gst-plugins-base 时应当传递额外的 meson 编译参数:

+
-Dgl_api=[\'gles2\'] -Dgl_platform=[\'egl\']
+
+

C. 播放器支持

+

GStreamer 的 pipeline 没有问题之后,就需要使播放器支持。不同播放器会使用到不同的 video-sink,同样对 gstreamer 有着不同程度的依赖。 +适配播放器时,最重要的工作便是①使播放器适配已验证的 video-sink,或者②使 gstreamer pipeline 支持播放器指定的 video-sink,此次 RevyOS 适配过程采用了①方案。

+
                +-------------------------------------------+
+                |    +------------+       +------------+    |   +--------+
+video stream----+--->| omxh264dec +------>| video-sink +----+-->| player |
+                |    +------------+       +------------+    |   +--------+
+                |                GStreamer                  |
+                +-------------------------------------------+
+
+

RevyOS 适配记录

+

根据 https://gstreamer.freedesktop.org/apps/ 进行简单的排查

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
是否可用是否更新应用名备注
GnashFlash 播放器
GEntransDebian 未收录
20230226Kaffeine❌ 需要大量 KDE 相关组件
✔️ 存在于riscv64 仓库
❌ 在 Debian amd64 Gnome 上,播放窗口与控制窗口分离,且默认调用了 VLC 进行播放
LcdgriloDebian 未收录
✔️20230218Parole✔️ For XFCE
❓ 不支持 Wayland,仅支持 x11
✔️ Debian amd64 Gnome 验证通过
✔️ 存在于riscv64 仓库
SongbirdDebian 未收录
SnappyDebian 未收录
Totem需要 GTK3,然而 GTK3 不支持 EGL on X11
+

最初选择的播放器是 Totem,但是发现 Totem 无法指定除了 gtkglsink 以外的 video-sink,且由于 RevyOS 不支持 gtkglsink,所以支持 Totem 播放器的难度较大。 +对支持 GStreamer 的播放器进行排查后发现了 Parole , Parole 由 GObject 编写,与常见的面向对象编程略有区别。寻找其构建 parole_gst 对象时的方法 parole_gst_constructed,将 video-sink 属性设置为前文已验证的 glimagesink,补丁:

+

parole-01-add-glimagesink-support.patch

+

至此,粗略的适配工作完成。

+

总结:RevyOS 适配工作

+
    +
  1. 编译驱动模块至内核,设置启动加载,设置设备权限
  2. +
  3. 将 PTG 提供的 omxil 二进制动态库文件打包为 th1520-vpu
  4. +
  5. 修改 th1520-vpu 的依赖,使其依赖 gst-omx 、libomxil-bellagio 等包
  6. +
  7. 设置了一些 postinstall 操作,例如使用 omxregister-bellagio 注册组件等
  8. +
  9. 修改 gst-omx
  10. +
  11. 增加 config 中对 vpu-omxil 组件的支持
  12. +
  13. 应用 dmabuf 补丁
  14. +
  15. 增加对 h265 vp9 的支持
  16. +
  17. 修改 gst-base 编译时的 gl 支持,限制为 gles2+egl
  18. +
  19. 修改 parole 以支持 glimagesink
  20. +
+

本文所用资源

+

补丁集合:

+

https://gist.github.com/Sakura286/26777ea8204c1819885e093806a4f7ca

+

PTG omxil 库

+

https://drive.google.com/file/d/1pYgCVI7WltfpskltJ-RqzVUCEC21FS56

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/en/benchmark/Chromium\351\261\274\347\274\270GPU\346\265\213\350\257\225/index.html" "b/en/benchmark/Chromium\351\261\274\347\274\270GPU\346\265\213\350\257\225/index.html" new file mode 100644 index 0000000..83c857e --- /dev/null +++ "b/en/benchmark/Chromium\351\261\274\347\274\270GPU\346\265\213\350\257\225/index.html" @@ -0,0 +1,1193 @@ + + + + + + + + + + + + + + + + + + Chromium WebGL 测试 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Chromium WebGL 测试

+

测试网站地址:https://webglsamples.org/aquarium/aquarium.html

+

直接打开即可,左侧数字是渲染的鱼的数量,数量越多越占性能

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/benchmark/coremark/index.html b/en/benchmark/coremark/index.html new file mode 100644 index 0000000..94caffd --- /dev/null +++ b/en/benchmark/coremark/index.html @@ -0,0 +1,1525 @@ + + + + + + + + + + + + + + + + + + + + + + coremark - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

coremark

+

摘要

+

CoreMark是一个综合基准,用于测量嵌入式系统中使用的中央处理器(CPU)的性能。它是在2009由eembc的shay gal-on开发的,旨在成为一个行业标准,取代过时的dehrystone基准。代码用C编写,包含以下算法:列表处理(增删改查和排序)、矩阵操作(公共矩阵操作)、状态机(确定输入流是否包含有效数字)和CRC。用户可以自由的下载Coremark,并移植到自己的平台上运行,随后就可以看到分数。

+

测试项介绍

+

文件介绍

+
├── barebones    --移植到裸机环境下需要修改的目录
+│   ├── core_portme.c       --移植的目标平台配置信息
+│   ├── core_portme.h       --计时以及板级初始化实现
+│   ├── core_portme.mak     --该子目录的makefile
+│   ├── cvt.c
+│   └── ee_printf.c         --打印函数串口发送实现
+├── core_list_join.c    --列表操作程序
+├── core_main.c         --主程序
+├── coremark.h          --项目配置与数据结构的定义头文件
+├── coremark.md5        
+├── core_matrix.c       --矩阵运算程序
+├── core_state.c        --状态机控制程序
+├── core_util.c         --CRC计算程序
+├── cygwin              --x86 cygwin和gcc 3.4(四核,双核和单核系统)的测试代码
+│   ├── core_portme.c
+│   ├── core_portme.h
+│   └── core_portme.mak
+├── freebsd             --以下同理,是在不同操作系统下的测试代码
+│   ├── ...
+├── LICENSE.md
+├── linux
+│   ├── ...
+├── linux64
+│   ├── ...
+├── macos
+│   ├── ...
+├── Makefile            
+├── README.md           --自述文件,CoreMark项目的基本介绍
+├── rtems
+│   ├── ...
+└── simple
+    ├── ...
+    └──
+
+

make 目标

+
    +
  • run - 默认目标,创建 run1.log 和 run2.log
  • +
  • run1.log - 用性能参数运行基准测试,并输出到 run1.log
  • +
  • run2.log - 用验证参数运行基准测试,并输出到 run2.log
  • +
  • run3.log - 用配置文件生成参数运行基准测试,并输出到 run3.log
  • +
  • compile - 编译基准测试可执行文件
  • +
  • link - 链接基准测试可执行文件
  • +
  • check - 测试可能未修改的源文件的 MD5
  • +
  • clean - 清理临时文件
  • +
+

编译/使用

+

根据 README 说法,只需要在 coremark 文件夹下执行 make 即可进行编译与测试。测试结果会出现在 Results 文件夹中,其中 run1.log 是测试结果。

+

测试计划

+

coremark 总体测试时间较短。 +计划同时测试 10 次取平均数值。

+

操作步骤

+
$ git clone https://github.com/eembc/coremark.git
+$ cd coremark
+$ make
+
+

测试结果

+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 12915
+Total time (secs): 12.915000
+Iterations/Sec   : 8517.228029
+Iterations       : 110000
+Compiler version : GCC13.1.0
+Compiler flags   : -O2 -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+            (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x33ff
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 8517.228029 / GCC13.1.0 -O2 -DPERFORMANCE_RUN=1  -lrt / Heap
+
+
+

GCC 10.4 + xtheadc

+
make XCFLAGS="-march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm"
+
+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 15129
+Total time (secs): 15.129000
+Iterations/Sec   : 13219.644392
+Iterations       : 200000
+Compiler version : GCC10.4.0
+Compiler flags   : -O2 -march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+                        (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x4983
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 13219.644392 / GCC10.4.0 -O2 -march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm -DPERFORMANCE_RUN=1  -lrt / Heap
+
+

GCC 13.1 + xthead matrix

+
make XCFLAGS="-march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -mno-thread-jumps"
+
+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 11897
+Total time (secs): 11.897000
+Iterations/Sec   : 9246.028411
+Iterations       : 110000
+Compiler version : GCC13.1.0
+Compiler flags   : -O2 -march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+            (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x33ff
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 9246.028411 / GCC13.1.0 -O2 -march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -DPERFORMANCE_RUN=1  -lrt / Heap
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/benchmark/glmark2/index.html b/en/benchmark/glmark2/index.html new file mode 100644 index 0000000..c5d4d83 --- /dev/null +++ b/en/benchmark/glmark2/index.html @@ -0,0 +1,1334 @@ + + + + + + + + + + + + + + + + + + + + + + glmark2 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

glmark2

+

glmark2 is an OpenGL 2.0 and ES 2.0 benchmark. +We will only use glmark2-es2 for relevant tests here . This is a testing tool for x11-glesv2.

+

This software package is already pre-installed in the system.

+

th1520 only support glmark-es2.

+

Pre-steps

+

If you need perfect performance, put your device into performance mode before you start, here's how to do it.

+

Please execute the following commands in the terminal. This command requires a root account.

+
echo performance >  /sys/devices/system/cpu/cpufreq/policy0/scaling_governor 
+
+cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
+
+

After the execution is completed, you will see a series of numbers, such as "1848000".

+

Start operation

+

Open a terminal and enter glmark2-es2. This test allows the use of non-root accounts.

+

After entering the command, a new window will appear on your desktop with an active screen.

+

After the test is completed, the additional activity screen will disappear and the score will be output in the terminal in the form of "glmark2 Score: xxx".

+

For example:

+
debian@lpi4a:~/Desktop$ glmark2-es2
+=======================================================
+    glmark2 2021.12
+=======================================================
+    OpenGL Information
+    GL_VENDOR:      Imagination Technologies
+    GL_RENDERER:    PowerVR B-Series BXM-4-64
+    GL_VERSION:     OpenGL ES 3.2 build 1.17@6210866
+    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=8
+    Surface Size:   800x600 windowed
+=======================================================
+[build] use-vbo=false: FPS: 513 FrameTime: 1.949 ms
+[build] use-vbo=true: FPS: 1367 FrameTime: 0.732 ms
+[texture] texture-filter=nearest: FPS: 1449 FrameTime: 0.690 ms
+[texture] texture-filter=linear: FPS: 1454 FrameTime: 0.688 ms
+[texture] texture-filter=mipmap: FPS: 1453 FrameTime: 0.688 ms
+[shading] shading=gouraud: FPS: 1172 FrameTime: 0.853 ms
+[shading] shading=blinn-phong-inf: FPS: 1180 FrameTime: 0.847 ms
+[shading] shading=phong: FPS: 1002 FrameTime: 0.998 ms
+[shading] shading=cel: FPS: 979 FrameTime: 1.021 ms
+[bump] bump-render=high-poly: FPS: 700 FrameTime: 1.429 ms
+[bump] bump-render=normals: FPS: 1354 FrameTime: 0.739 ms
+[bump] bump-render=height: FPS: 1320 FrameTime: 0.758 ms
+[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1059 FrameTime: 0.944 ms
+[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 381 FrameTime: 2.625 ms
+[pulsar] light=false:quads=5:texture=false: FPS: 1484 FrameTime: 0.674 ms
+[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 349 FrameTime: 2.865 ms
+[desktop] effect=shadow:windows=4: FPS: 736 FrameTime: 1.359 ms
+[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 161 FrameTime: 6.211 ms
+[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 173 FrameTime: 5.780 ms
+[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 242 FrameTime: 4.132 ms
+[ideas] speed=duration: FPS: 593 FrameTime: 1.686 ms
+[jellyfish] <default>: FPS: 572 FrameTime: 1.748 ms
+[terrain] <default>: FPS: 42 FrameTime: 23.810 ms
+[shadow] <default>: FPS: 619 FrameTime: 1.616 ms
+[refract] <default>: FPS: 82 FrameTime: 12.195 ms
+[conditionals] fragment-steps=0:vertex-steps=0: FPS: 1539 FrameTime: 0.650 ms
+[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1238 FrameTime: 0.808 ms
+[conditionals] fragment-steps=0:vertex-steps=5: FPS: 1535 FrameTime: 0.651 ms
+[function] fragment-complexity=low:fragment-steps=5: FPS: 1411 FrameTime: 0.709 ms
+[function] fragment-complexity=medium:fragment-steps=5: FPS: 1050 FrameTime: 0.952 ms
+[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1376 FrameTime: 0.727 ms
+[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1394 FrameTime: 0.717 ms
+[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1379 FrameTime: 0.725 ms
+=======================================================
+                                  glmark2 Score: 950 
+=======================================================
+
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/benchmark/images/chromium_webgl_1.png b/en/benchmark/images/chromium_webgl_1.png new file mode 100644 index 0000000..379bfeb Binary files /dev/null and b/en/benchmark/images/chromium_webgl_1.png differ diff --git a/en/benchmark/lmbench/index.html b/en/benchmark/lmbench/index.html new file mode 100644 index 0000000..a8948e7 --- /dev/null +++ b/en/benchmark/lmbench/index.html @@ -0,0 +1,1601 @@ + + + + + + + + + + + + + + + + + + + + + + lmbench - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

lmbench for Lpi4A

+

软件版本

+
+

lmbench for revyOS

+
+

测试说明

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
带宽测评工具反应时间测评工具其他
读取缓存文件上下文切换\
拷贝内存网络:连接的建立,管道,TCP,UDP 和RPC hot potato\
读内存文件系统的建立和删除\
写内存进程创建处理器时钟比率计算
管道信号处理\
TCP上层的系统调用\
\内存读入反应时间\
+

测试准备

+

下载测试工具:

+
git clone https://github.com/revyos/lmbench3.git
+
+
+

该版本为已为 RevyOS 移植版本。

+
+

在开始测试前,需要先安装依赖:

+
sudo apt install gcc make libntirpc-dev -y
+
+

测试执行

+

执行命令进行编译,配置,并测试

+
cd lmbench3
+cd src
+make results
+
+

编译完成后会有以下选项提示需要设置:

+

以下不需要更改的项目直接回车,会自动设置默认值。

+

MULTIPLE COPIES [default 1]: 设置同时运行 lmbench 的份数,份数多会使 lmbench 运行缓慢,默认是 1,这里设置为默认值 1。

+
=====================================================================
+
+If you are running on an MP machine and you want to try running
+multiple copies of lmbench in parallel, you can specify how many here.
+
+Using this option will make the benchmark run 100x slower (sorry).
+
+NOTE:  WARNING! This feature is experimental and many results are 
+    known to be incorrect or random!
+
+MULTIPLE COPIES [default 1]: 
+=====================================================================
+
+

Job placement selection [default 1]: 作业调度控制方法,默认值是 1,表示允许作业调度,这里设置为默认值。

+
=====================================================================
+
+Options to control job placement
+1) Allow scheduler to place jobs
+2) Assign each benchmark process with any attendent child processes
+   to its own processor
+3) Assign each benchmark process with any attendent child processes
+   to its own processor, except that it will be as far as possible
+   from other processes
+4) Assign each benchmark and attendent processes to their own
+   processors
+5) Assign each benchmark and attendent processes to their own
+   processors, except that they will be as far as possible from
+   each other and other processes
+6) Custom placement: you assign each benchmark process with attendent
+   child processes to processors
+7) Custom placement: you assign each benchmark and attendent
+   processes to processors
+
+Note: some benchmarks, such as bw_pipe, create attendent child
+processes for each benchmark process.  For example, bw_pipe
+needs a second process to send data down the pipe to be read
+by the benchmark process.  If you have three copies of the
+benchmark process running, then you actually have six processes;
+three attendent child processes sending data down the pipes and 
+three benchmark processes reading data and doing the measurements.
+
+Job placement selection [default 1]: 
+=====================================================================
+
+

Memory: 设置测试内存大小,默认是 $MB , 即为程序计算出来的最大可测试内存,也可以手动定义测试值,这里设置为这里使用默认值。

+
=====================================================================
+
+Several benchmarks operate on a range of memory.  This memory should be
+sized such that it is at least 4 times as big as the external cache[s]
+on your system.   It should be no more than 80% of your physical memory.
+
+The bigger the range, the more accurate the results, but larger sizes
+take somewhat longer to run the benchmark.
+
+MB [default 686]: 
+Checking to see if you have 686 MB; please wait for a moment...
+686MB OK
+686MB OK
+686MB OK
+Hang on, we are calculating your cache line size.
+OK, it looks like your cache line is 64 bytes.
+
+=====================================================================
+
+

SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: 要运行的测试集,包含 ALL/HARWARE/OS/DEVELOPMENT,默认选 all,这里选 all

+
=====================================================================
+
+lmbench measures a wide variety of system performance, and the full suite
+of benchmarks can take a long time on some platforms.  Consequently, we
+offer the capability to run only predefined subsets of benchmarks, one
+for operating system specific benchmarks and one for hardware specific
+benchmarks.  We also offer the option of running only selected benchmarks
+which is useful during operating system development.
+
+Please remember that if you intend to publish the results you either need
+to do a full run or one of the predefined OS or hardware subsets.
+
+SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: 
+=====================================================================
+
+

FASTMEM [default no]: 内存 latency 测试,如果跳过该测试,则设置为 yes,如果不跳过则设置为 no,默认是 no,这里设置为默认值。

+
=====================================================================
+
+This benchmark measures, by default, memory latency for a number of
+different strides.  That can take a long time and is most useful if you
+are trying to figure out your cache line size or if your cache line size
+is greater than 128 bytes.
+
+If you are planning on sending in these results, please don't do a fast
+run.
+
+Answering yes means that we measure memory latency with a 128 byte stride.  
+
+FASTMEM [default no]: 
+=====================================================================
+
+

SLOWFS [default no]: 文件系统 latency 测试,如果跳过值设置为 yes,不跳过设置为 no,默认 no,这里设置为默认值。

+
=====================================================================
+
+This benchmark measures, by default, file system latency.  That can
+take a long time on systems with old style file systems (i.e., UFS,
+FFS, etc.).  Linux' ext2fs and Sun's tmpfs are fast enough that this
+test is not painful.
+
+If you are planning on sending in these results, please don't do a fast
+run.
+
+If you want to skip the file system latency tests, answer "yes" below.
+
+SLOWFS [default no]: 
+=====================================================================
+
+

DISKS [default none]: 硬盘带宽和 seek time,需要设置测试硬盘的盘符,例如 /dev/sda,默认不测试(默认 none ),这里设置为默认值。

+
=====================================================================
+
+This benchmark can measure disk zone bandwidths and seek times.  These can
+be turned into whizzy graphs that pretty much tell you everything you might
+need to know about the performance of your disk.  
+
+This takes a while and requires read access to a disk drive.  
+Write is not measured, see disk.c to see how if you want to do so.
+
+If you want to skip the disk tests, hit return below.
+
+If you want to include disk tests, then specify the path to the disk
+device, such as /dev/sda.  For each disk that is readable, you'll be
+prompted for a one line description of the drive, i.e., 
+
+    Iomega IDE ZIP
+or
+    HP C3725S 2GB on 10MB/sec NCR SCSI bus
+
+DISKS [default none]: 
+=====================================================================
+
+

REMOTE [default none]: 网络测试,需要 2 台机器并设置 rsh,是测试机器能 rsh 访问另一台,默认不测试(默认 none ),这里设置为默认值。

+
=====================================================================
+
+If you are running on an idle network and there are other, identically
+configured systems, on the same wire (no gateway between you and them),
+and you have rsh access to them, then you should run the network part
+of the benchmarks to them.  Please specify any such systems as a space
+separated list such as: ether-host fddi-host hippi-host.
+
+REMOTE [default none]: 
+=====================================================================
+
+

Processor mhz [default 999 MHz, 1.0010 nanosec clock]: 测试 cpu,默认 $MHZ,即为程序判断出的频率,也可以根据情况自己设定,例如 3500,单位 MHz,这里设置为默认值。

+
=====================================================================
+
+Calculating mhz, please wait for a moment...
+I think your CPU mhz is 
+
+    999 MHz, 1.0010 nanosec clock
+
+but I am frequently wrong.  If that is the wrong Mhz, type in your
+best guess as to your processor speed.  It doesn't have to be exact,
+but if you know it is around 800, say 800.  
+
+Please note that some processors, such as the P4, have a core which
+is double-clocked, so on those processors the reported clock speed
+will be roughly double the advertised clock rate.  For example, a
+1.8GHz P4 may be reported as a 3592MHz processor.
+
+Processor mhz [default 999 MHz, 1.0010 nanosec clock]: 
+=====================================================================
+
+

FSDIR [default /usr/tmp]: 临时目录用来存放测试文件,可以自己设定,默认 /usr/tmp,这里设置为默认值。

+
=====================================================================
+
+We need a place to store a 686 Mbyte file as well as create and delete a
+large number of small files.  We default to /usr/tmp.  If /usr/tmp is a
+memory resident file system (i.e., tmpfs), pick a different place.
+Please specify a directory that has enough space and is a local file
+system.
+
+FSDIR [default /usr/tmp]: 
+=====================================================================
+
+

Status output file [default /dev/tty]: 测试输出信息文件存放目录,可以自己设定,默认 /dev/tty

+
=====================================================================
+
+lmbench outputs status information as it runs various benchmarks.
+By default this output is sent to /dev/tty, but you may redirect
+it to any file you wish (such as /dev/null...).
+
+Status output file [default /dev/tty]: 
+=====================================================================
+
+

Mail results [default yes]: 是否将测试结果邮件发出来,默认是 yes,这里设置为 no

+
=====================================================================
+
+There is a database of benchmark results that is shipped with new
+releases of lmbench.  Your results can be included in the database
+if you wish.  The more results the better, especially if they include
+remote networking.  If your results are interesting, i.e., for a new
+fast box, they may be made available on the lmbench web page, which is
+
+    http://www.bitmover.com/lmbench
+
+Mail results [default yes]: no
+OK, no results mailed.
+=====================================================================
+
+

以上项目设置完成后,开始自动执行测试。

+

测试结果

+

测试说明

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/benchmark/p7zip/index.html b/en/benchmark/p7zip/index.html new file mode 100644 index 0000000..97275ed --- /dev/null +++ b/en/benchmark/p7zip/index.html @@ -0,0 +1,1304 @@ + + + + + + + + + + + + + + + + + + + + + + p7zip - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

p7zip

+

p7zip 测试是用于测试系统解压性能,通过数据直观评估性能,以下是运行 7pzip 测试的操作步骤

+

安装 7zip

+

首先需要在 RevyOS 中 安装 p7zip

+
debian@lpi4a:~/Desktop$ sudo apt update
+debian@lpi4a:~/Desktop$ sudo apt install p7zip-full
+
+

执行性能测试

+

进行 p7zip 测试需要在终端中输入以下命令来执行:

+
debian@lpi4a:~/Desktop$ 7z b
+
+

系统会开始进行测试然后输出性能数据。

+

通过以上步骤,可以在 RevyOS 上安装并测试 7zip 的性能。

+

以下是测试结果参考,使用镜像版本为RevyOS2023121016g版本

+
debian@lpi4a:~/Desktop$ 7z b
+
+7-Zip 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
+p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs LE)
+
+LE
+CPU Freq: - 64000000 64000000 - - - - - -
+
+RAM size:   15739 MB,  # CPU hardware threads:   4
+RAM usage:    882 MB,  # Benchmark threads:      4
+
+                       Compressing  |                  Decompressing
+Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
+         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS
+
+22:       3252   303   1045   3164  |      75268   394   1628   6422
+23:       3092   307   1025   3151  |      74514   399   1617   6447
+24:       3021   318   1022   3249  |      72017   398   1588   6322
+25:       2945   320   1050   3363  |      67801   395   1529   6034
+----------------------------------  | ------------------------------
+Avr:             312   1036   3232  |              396   1591   6306
+Tot:             354   1313   4769
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/benchmark/reboot/index.html b/en/benchmark/reboot/index.html new file mode 100644 index 0000000..c5fcabb --- /dev/null +++ b/en/benchmark/reboot/index.html @@ -0,0 +1,1325 @@ + + + + + + + + + + + + + + + + + + + + + + reboot-test - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

重启测试

+

摘要

+

使用脚本对整机进行重启测试。

+

测试项说明

+

测试机器重启会不会出现死机等问题。

+

测试计划

+

进行重启测试 500 次。

+

操作步骤

+

在 /lib/system/system 下创建名为 cycletest.service_ 重启脚本:

+
[Unit]
+Description=Reboots unit after 30s
+
+[Service]
+StandardOutput=syslog+console
+ExecStart=/bin/sh -c "\
+test -f /cycle-count || echo 0 > /cycle-count;\
+echo 'starting cycletest';\
+sleep 30;\
+expr `cat /cycle-count` + 1 > /cycle-count;\
+systemctl reboot;\
+"
+
+[Install]
+WantedBy=multi-user.target
+
+

后根据以下指令安装并开始测试:

+
systemctl daemon-reload
+systemctl enable cycletest.service (enable the service to start on reboot)
+systemctl start cycletest.service (start the service, should reboot in 30s)
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/benchmark/stream/index.html b/en/benchmark/stream/index.html new file mode 100644 index 0000000..35acb15 --- /dev/null +++ b/en/benchmark/stream/index.html @@ -0,0 +1,1312 @@ + + + + + + + + + + + + + + + + + + + + + + stream - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Stream

+

使用说明

+

STREAM 基准测试是一个简单的综合基准测试程序,它测量可持续内存带宽(以 MB/s 为单位)和简单向量内核的相应计算速率。

+

stream 仅有单个文件,在进行测试时只需要对 stream.c 进行编译即可:

+
git clone <https://github.com/microseyuyu/STREAM.git>
+cd STREAM
+gcc -O3 -fopenmp -DN=2000000 -DNTIMES=10 stream.c -o stream
+export OMP_NUM_THREADS=8
+./stream
+
+

参数说明:

+
    +
  • -O3:指定最高编译优化级别,即 3。
  • +
  • fopenmp:启用OpenMP,适应多处理器环境,更能得到内存带宽实际最大值。开启后,程序默认运行线程为CPU线程数
  • +
+

DN=2000000:指定测试数组a[]、b[]、c[]的大小(Array size)。该值对测试结果影响较大(5.9版本默认值2000000,。若stream.c为5.10版本,参数名变为-DSTREAM_ARRAY_SIZE,默认值10000000)。注意:必须设置测试数组大小远大于CPU 最高级缓存(一般为L3 Cache)的大小,否则就是测试CPU缓存的吞吐性能,而非内存吞吐性能。 +- -DNTIMES=10:执行的次数,并从这些结果中选最优值。 +- OMP_NUM_THREADS=8 线程数量。

+

参考结果:

+
debian@lpi4a:~/Desktop/STREAM$ ./stream
+-------------------------------------------------------------
+STREAM version $Revision: 5.10 $
+-------------------------------------------------------------
+This system uses 8 bytes per array element.
+-------------------------------------------------------------
+*****  WARNING: ******
+      It appears that you set the preprocessor variable N when compiling this code.
+      This version of the code uses the preprocesor variable STREAM_ARRAY_SIZE to control the array size
+      Reverting to default value of STREAM_ARRAY_SIZE=10000000
+*****  WARNING: ******
+Array size = 10000000 (elements), Offset = 0 (elements)
+Memory per array = 76.3 MiB (= 0.1 GiB).
+Total memory required = 228.9 MiB (= 0.2 GiB).
+Each kernel will be executed 10 times.
+ The *best* time for each kernel (excluding the first iteration)
+ will be used to compute the reported bandwidth.
+-------------------------------------------------------------
+Number of Threads requested = 8
+Number of Threads counted = 8
+-------------------------------------------------------------
+Your clock granularity/precision appears to be 1 microseconds.
+Each test below will take on the order of 21622 microseconds.
+   (= 21622 clock ticks)
+Increase the size of the arrays if this shows that
+you are not getting at least 20 clock ticks per test.
+-------------------------------------------------------------
+WARNING -- The above is only a rough guideline.
+For best results, please be sure you know the
+precision of your system timer.
+-------------------------------------------------------------
+Function    Best Rate MB/s  Avg time     Min time     Max time
+Copy:            8364.2     0.019258     0.019129     0.019508
+Scale:           8291.0     0.019572     0.019298     0.020162
+Add:             6223.6     0.038835     0.038563     0.040011
+Triad:           6222.5     0.038776     0.038570     0.039470
+-------------------------------------------------------------
+Solution Validates: avg error less than 1.000000e-13 on all three arrays
+-------------------------------------------------------------
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/en/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" "b/en/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" new file mode 100644 index 0000000..63a034a --- /dev/null +++ "b/en/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" @@ -0,0 +1,1383 @@ + + + + + + + + + + + + + + + + + + + + + + Debian 软件包构建流程 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Debian 软件包构建流程

+

宿主 debian

+
# qemu-user 下编译
+sudo apt update
+sudo apt install -y \
+    sbuild buildd qemu-system-misc qemu-user-static binfmt-support \
+    ca-certificates apt-transport-https devscripts mmdebstrap
+
+# native
+sudo apt install -y \
+    sbuild buildd ca-certificates apt-transport-https devscripts mmdebstrap
+
+# 修正宿主的debian-ports证书相关问题 现阶段可能不需要了
+wget https://mirror.sjtu.edu.cn/debian/pool/main/d/debian-ports-archive-keyring/debian-ports-archive-keyring_2023.02.01_all.deb
+sudo dpkg -i ./debian-ports-archive-keyring_2023.02.01_all.deb
+
+
+# sbuild 增加当前用户免root
+sudo sbuild-adduser $USER
+
+

创建打包环境

+

revyos-c910v

+
export SUFFIX=revyos-c910v-sbuild
+sudo sbuild-createchroot --debootstrap=debootstrap --arch=riscv64 \
+    --chroot-suffix=-$SUFFIX \
+    --keyring='' \
+    --no-deb-src \
+    --include=debian-ports-archive-keyring,ca-certificates,apt-transport-https,eatmydata \
+    --extra-repository="deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main contrib non-free" \
+    --extra-repository="deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-addons/ revyos-addons main" \
+    sid /srv/chroot/sid-riscv64-$SUFFIX \
+    https://mirror.iscas.ac.cn/revyos/revyos-base/
+
+# 修正环境相关问题
+sudo sed -i 's/deb http/deb [trusted=yes] http/g' /srv/chroot/sid-riscv64-$SUFFIX/etc/apt/sources.list
+sudo rm -rf /srv/chroot/sid-riscv64-$SUFFIX/var/lib/apt/lists/*
+echo "command-prefix=eatmydata" | sudo tee -a /etc/schroot/chroot.d/sid-riscv64-$SUFFIX-*
+
+# 调整source顺序 - 目的是同版本使用c910v仓库的
+# 编辑sources.list 确保以下顺序
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main contrib non-free
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-addons/ revyos-addons main
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-base/ sid main contrib non-free non-free-firmware
+
+

构建命令

+

revyos-c910v

+
sbuild --arch=riscv64 -d sid -c sid-riscv64-revyos-c910v-sbuild xxx.dsc
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/build/debian/enable_optimization_gcc/index.html b/en/build/debian/enable_optimization_gcc/index.html new file mode 100644 index 0000000..c3b95a2 --- /dev/null +++ b/en/build/debian/enable_optimization_gcc/index.html @@ -0,0 +1,1319 @@ + + + + + + + + + + + + + + + + + + + + + + Enable Optimization GCC - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+ + + +
+
+ + + + + + + +

Enable T-Head Optimization GCC

+

Experimental feature 如果发现问题可以进行issue report

+
# Add Optimization deb source
+sudo sed -i '1ideb https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main' /etc/apt/sources.list
+# Update
+sudo apt update && sudo apt upgrade -y
+# Install gcc-10/gcc-13
+sudo apt install -y build-essential gcc-13 g++-13
+# Reboot to avoid other problems
+sudo reboot
+
+

Test gcc-10 (gcc10.4 enable xtheadc+v0p7)

+
gcc -v
+Using built-in specs.
+COLLECT_GCC=gcc
+COLLECT_LTO_WRAPPER=/usr/lib/gcc/riscv64-linux-gnu/10/lto-wrapper
+Target: riscv64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 10.4.0-8revyos2.3' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=riscv64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libsanitizer --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-multilib --with-arch=rv64gcv0p7_zfh_xtheadc --with-abi=lp64d --enable-checking=release --build=riscv64-linux-gnu --host=riscv64-linux-gnu --target=riscv64-linux-gnu
+Thread model: posix
+Supported LTO compression algorithms: zlib zstd
+gcc version 10.4.0 (Debian 10.4.0-8revyos2.3)
+
+

Test gcc-13 (gcc13.2 enable xthead extension)

+
gcc-13 -v
+Using built-in specs.
+COLLECT_GCC=gcc-13
+COLLECT_LTO_WRAPPER=/usr/libexec/gcc/riscv64-linux-gnu/13/lto-wrapper
+Target: riscv64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 13.2.0-1revyos1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=riscv64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-multilib --with-arch=rv64gc_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync --with-abi=lp64d --enable-checking=release --build=riscv64-linux-gnu --host=riscv64-linux-gnu --target=riscv64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=16
+Thread model: posix
+Supported LTO compression algorithms: zlib zstd
+gcc version 13.2.0 (Debian 13.2.0-1revyos1)
+
+

gcc-10/gcc-13 difference

+

除了v0p7 其他优化都可以用 gcc-13 代替 gcc-10

+

后者的优化可以主线报问题 是已经主线化的功能

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/en/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" "b/en/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" new file mode 100644 index 0000000..bb9168b --- /dev/null +++ "b/en/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" @@ -0,0 +1,1414 @@ + + + + + + + + + + + + + + + + + + + + + + 编译器相关说明 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

编译器相关说明

+

RevyOS 会预制相关优化编译器 基本支持rv64gc

+

常规扩展

+ + + + + + + + + + + + + + + + + + + + + + + +
支持的优化gcc-10gcc-13clang-17
Zfh
v0p7
+

THead 厂商扩展

+

xthead 当前版本 v2.2

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
支持的优化1gcc-102gcc-13.2clang-17
XTheadCmo
XTheadSync
XTheadBa
XTheadBb
XTheadBs
XTheadCondMov
XTheadMemIdx
XTheadMemPair
XTheadFMemIdx
XTheadMac
XTheadFmv
XTheadInt
XTHeadVdot3
+

注:

+
    +
  1. gcc-11/gcc-12/clang-14/clang15/clang16 xthead 扩展太少或无 所以未列出
  2. +
  3. gcc-10 使用 xtheadc 覆盖所有的扩展 gcc-10 使用了 thead-gcc 的源码
  4. +
  5. XTHeadVdot c910v/c920 不支持
  6. +
+

参考文档

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/en/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" "b/en/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" new file mode 100644 index 0000000..b639820 --- /dev/null +++ "b/en/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" @@ -0,0 +1,1318 @@ + + + + + + + + + + + + + + + + + + + + + + gcc 编译软件软件说明 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

gcc build programs 说明

+

安装gcc

+

首先确保安装gcc:

+
sudo apt update
+sudo apt install gcc
+
+

运行程序

+

下面以最简单的 'hello,world' 程序为例演示如何编译并运行:

+

编译以下内容并命名为 hello.c:

+
#include <stdio.h>
+
+int main()
+{
+        printf("hello, world\n");
+        return 0;
+}
+
+

编译并执行:

+
debian@lpi4a:~/test$ gcc -g hello.c -o hello
+
+debian@lpi4a:~/test$ ./hello
+hello, world
+
+
+

g++ build programs 说明

+

首先确保安装g++:

+
sudo apt update
+sudo apt install g++
+
+

运行程序

+

下面以最简单的 'hello,world' 程序为例演示如何编译并运行:

+

编译以下内容并命名为 hello.cpp:

+
#include <iostream>
+using namespace std;
+
+int main()
+{
+    cout << "Hello, World!\n";
+    return 0;
+}
+
+
+

编译并执行:

+
debian@lpi4a:~/test$ g++ -g hello.cpp -o hello
+debian@lpi4a:~/test$ ./hello
+Hello, World!
+
+

以上就是gcc/g++ 编译程序并运行的最简单实例,更复杂的应用案例可以参考相应的 +系统编程手册。

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/build/other/manuel_build_kernel/index.html b/en/build/other/manuel_build_kernel/index.html new file mode 100644 index 0000000..c887e2c --- /dev/null +++ b/en/build/other/manuel_build_kernel/index.html @@ -0,0 +1,1256 @@ + + + + + + + + + + + + + + + + + + + + + + Manuel Build Kernel - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Manuel Build Kernel

+

Build Toolchain Download link:

+

https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1663142514282/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1-20220906.tar.gz

+

Assuming Build environment is Ubuntu or Debian

+

Install dependency:

+
sudo apt install -y gdisk dosfstools g++-12-riscv64-linux-gnu build-essential libncurses-dev gawk flex bison openssl libssl-dev tree dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf device-tree-compiler
+
+

Uncompress Toolchain (Assuming install to /opt):

+
tar -xvf Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1-20220906.tar.gz -C /opt
+
+

Setup environment variables (Assuming Toolchain is in /opt):

+
export PATH="/opt/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1/bin:$PATH"
+export CROSS_COMPILE=riscv64-unknown-linux-gnu-
+export ARCH=riscv
+
+

Download code using git:

+
# Kernel repo
+git clone https://github.com/revyos/thead-kernel.git
+
+

Build Kernel:

+
# make install target directory
+mkdir rootfs && mkdir rootfs/boot
+
+# after mkdir, the directory tree should look like this:
+# .. << current workdir
+# |-- rootfs
+#     |-- boot
+# |-- thead-kernel
+#     |-- ...
+
+# enter kernel directory and start build
+cd thead-kernel
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv revyos_defconfig
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv -j$(nproc)
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv -j$(nproc) dtbs
+sudo make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv INSTALL_MOD_PATH=../rootfs/ modules_install -j$(nproc)
+sudo make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv INSTALL_PATH=../rootfs/boot zinstall -j$(nproc)
+# build perf (if needed)
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv LDFLAGS=-static NO_LIBELF=1 NO_JVMTI=1 VF=1 -C tools/perf/
+sudo cp -v tools/perf/perf ../rootfs/sbin/perf-thead
+# Install Kernel
+sudo cp -v arch/riscv/boot/Image ../rootfs/boot/
+# Install DTB
+sudo cp -v arch/riscv/boot/dts/thead/light-lpi4a.dtb ../rootfs/boot/
+sudo cp -v arch/riscv/boot/dts/thead/light-lpi4a-dsi0-hdmi.dtb ../rootfs/boot/
+
+

After all build steps, you can copy or override kernel and module files on your board using files in "rootfs", If you replace kernel with new one please make sure you also replace with corresponding kernel module folder.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/en/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" "b/en/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" new file mode 100644 index 0000000..5823dab --- /dev/null +++ "b/en/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" @@ -0,0 +1,1247 @@ + + + + + + + + + + + + + + + + + + + + + + T-Head QEMU 编译流程 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

T-Head QEMU 编译流程

+

C910V强制cpu指定补丁

+
From 5164bca5a4bcde4534dc1a9aa3a7f619719874cf Mon Sep 17 00:00:00 2001
+From: Han Gao <gaohan@iscas.ac.cn>
+Date: Sun, 23 Apr 2023 22:11:35 +0800
+Subject: [PATCH] qemu-user-riscv64 default cpu is c910v
+
+Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
+---
+ linux-user/riscv/target_elf.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/linux-user/riscv/target_elf.h b/linux-user/riscv/target_elf.h
+index 9dd65652ee45..3195cfa71408 100644
+--- a/linux-user/riscv/target_elf.h
++++ b/linux-user/riscv/target_elf.h
+@@ -9,7 +9,7 @@
+ #define RISCV_TARGET_ELF_H
+ static inline const char *cpu_get_model(uint32_t eflags)
+ {
+-    /* TYPE_RISCV_CPU_ANY */
+-    return "any";
++    /* TYPE_RISCV_CPU_C910V */
++    return "c910v";
+ }
+ #endif
+
+

编译流程

+
./configure \
+  --prefix=$HOME/qemu-install \
+  --static \
+  --target-list=riscv64-linux-user \
+  --disable-system \
+  --disable-pie \
+  --interp-prefix=/etc/qemu-binfmt/%M
+
+make -j20
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/en/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" "b/en/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" new file mode 100644 index 0000000..3ef958e --- /dev/null +++ "b/en/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" @@ -0,0 +1,1191 @@ + + + + + + + + + + + + + + + + + + Build - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

构建文档

+

这里描述了 RevyOS 相关的构建文档

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/ahead/20230802/index.html b/en/changelog/ahead/20230802/index.html new file mode 100644 index 0000000..0121554 --- /dev/null +++ b/en/changelog/ahead/20230802/index.html @@ -0,0 +1,1278 @@ + + + + + + + + + + + + + + + + + + + + 20230802 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230802

+

Test Image

+

Based on lpi4a 20230614 +Add ahead support & mixed 20230820 changes

+

Download

+

https://mirror.iscas.ac.cn/revyos/extra/images/beagle/test/20230802/

+

Other

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20230412/index.html b/en/changelog/lpi4a/20230412/index.html new file mode 100644 index 0000000..f82ad89 --- /dev/null +++ b/en/changelog/lpi4a/20230412/index.html @@ -0,0 +1,1376 @@ + + + + + + + + + + + + + + + + + + + + + + 20230412 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230412

+ +

系统版本

+

RevyOS 20230412 版本

+

桌面环境相关

+
    +
  • 默认桌面环境为xfce4桌面
  • +
  • 使用pulseaudio作为音频服务
  • +
+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • xfce4: 4.18
  • +
  • Debian GCC:13 (13-20230320-1)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • Go:1.19.8 (1.19.8-2)
  • +
  • Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-g7b352f5ac2ba)
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持 WIFI/BT 模块 RTL8723DS
  • +
+

系统服务

+
    +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 需要手动安装 wpasupplicant 才可连接无线网
  • +
  • xfce声音控制面板无法显示声音设备
  • +
  • 系统桌面不支持GPU硬件加速
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20230425/index.html b/en/changelog/lpi4a/20230425/index.html new file mode 100644 index 0000000..c2baa18 --- /dev/null +++ b/en/changelog/lpi4a/20230425/index.html @@ -0,0 +1,1395 @@ + + + + + + + + + + + + + + + + + + + + + + 20230425 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230425

+ +

系统版本

+

RevyOS 20230425 版本

+

桌面环境相关

+
    +
  • 默认桌面环境为xfce4桌面
  • +
  • 使用pulseaudio作为音频服务
  • +
  • 使用wpasupplicant作为无线网络服务
  • +
+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • xfce4: 4.18
  • +
  • Debian GCC:13 (13-20230320-1)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • Go:1.19.8 (1.19.8-2)
  • +
  • Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-g7b352f5ac2ba)
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持WIFI/BT模块RTL8723DS
  • +
+

系统服务

+
    +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
+

已修复的问题

+
    +
  • xfce声音控制面板无法显示声音设备
  • +
  • 系统桌面不支持GPU硬件加速
  • +
  • 需要手动安装 wpasupplicant 才可连接无线网
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20230511/index.html b/en/changelog/lpi4a/20230511/index.html new file mode 100644 index 0000000..238d4b1 --- /dev/null +++ b/en/changelog/lpi4a/20230511/index.html @@ -0,0 +1,1395 @@ + + + + + + + + + + + + + + + + + + + + + + 20230511 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230511

+ +

系统版本

+

RevyOS 20230511 版本

+

桌面环境相关

+

添加了gnome桌面支持

+
    +
  • 支持gnome 桌面
  • +
  • 支持xfce4 桌面
  • +
+

支持应用相关

+
    +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • GNOME: 42.4 (预装在 gnome版本)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
  • 未支持 chromium(计划推进中)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-gbb4691fe5572)
  • +
  • 打开了 iotop 相关选项
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持 WIFI/BT 模块RTL8723DS
  • +
  • 加入风扇调速功能,风扇转速随CPU温度调整
  • +
+

系统服务

+
    +
  • 添加了查询版本时间戳功能,在终端输入'cat /etc/revyos-release' 即可获取
  • +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
  • 不支持2K分辨率
  • +
+

已修复的问题

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20230614/index.html b/en/changelog/lpi4a/20230614/index.html new file mode 100644 index 0000000..2cd8163 --- /dev/null +++ b/en/changelog/lpi4a/20230614/index.html @@ -0,0 +1,1399 @@ + + + + + + + + + + + + + + + + + + + + + + 20230614 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230614

+ +

系统版本

+

RevyOS 20230614 版本

+

桌面环境相关

+

当前版本只提供xfce4桌面支持

+
    +
  • 支持xfce4 桌面
  • +
+

支持应用相关

+

提供了chromium支持

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-gfac22a756532)
  • +
  • 打开exfat支持
  • +
  • 加入了HDMI音频支持
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

系统服务

+
    +
  • 添加了查询版本时间戳功能,在终端输入'cat /etc/revyos-release' 即可获取
  • +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 不支持2K分辨率
  • +
  • 鼠标拖动滞后
  • +
+

已修复的问题

+
    +
  • 修复了WI-FI和蓝牙功能
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20230810/index.html b/en/changelog/lpi4a/20230810/index.html new file mode 100644 index 0000000..19b9a3f --- /dev/null +++ b/en/changelog/lpi4a/20230810/index.html @@ -0,0 +1,1453 @@ + + + + + + + + + + + + + + + + + + + + + + 20230810 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230810

+

系统版本

+

RevyOS 20230810 版本

+

版本下载

+

RevyOS 20230810 lpi4a

+
    +
  • boot-20230810-222415.ext4
  • +
  • root-20230810-222415.ext4
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本需要刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本需要刷写
  • +
+

破坏性更新

+

重新设计了启动流程 所以需要重新刷写所有分区

+

更新之后启动遇到错误

+
Retrieving file: /dtbs/linux-image-5.10.113-lpi4a/<NULL>-light-c910.
+Skipping l0r for failure retrieving fdt
+Light LPI4A#
+
+遇见这种情况需要执行</br>
+env default -a -f;env save;reset
+
+

桌面环境相关

+

当前版本只提供xfce4桌面支持

+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 firefox:114.0 (114.0-1revyos1)
  • +
  • 未预装 code-oss: 1.80.1 (1.80.1-1+electron23)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
+

内核相关

+

内核 commit ID: #2023.08.10.02.31+c130cdb21

+
    +
  • 内核版本号:5.10.113 (2023.08.10.02.31+c130cdb21)
  • +
  • 加入对USB串口设备的支持
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

系统服务

+
    +
  • 版本时间戳(/etc/revyos-release)- xfce 桌面: 20230810-222415
  • +
+

当前版本存在问题

+
    +
  • 不支持2K分辨率
  • +
  • 鼠标拖动滞后
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20230916/index.html b/en/changelog/lpi4a/20230916/index.html new file mode 100644 index 0000000..3c222c0 --- /dev/null +++ b/en/changelog/lpi4a/20230916/index.html @@ -0,0 +1,1337 @@ + + + + + + + + + + + + + + + + + + + + + + 20230916 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230916

+

系统版本

+

RevyOS 20230916 版本

+

版本下载

+

RevyOS 20230916 lpi4a

+
    +
  • boot-20230916-231502.ext4
  • +
  • root-20230916-231502.ext4
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本需要刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本需要刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

内核 commit ID

+
    +
  • +

    2023.09.11.06.54+b4d73b48a

    +
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20230916-231502
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:114.0 (114.0-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.66.0 (1.66.0+dfsg1-1~exp1)
  • +
  • 未预装 GCC:13 (13.1.0-1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2023.09.11.06.54+b4d73b48a
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 只开启了HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

存在问题

+
    +
  • 不支持2K分辨率
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20231026/index.html b/en/changelog/lpi4a/20231026/index.html new file mode 100644 index 0000000..f5c6050 --- /dev/null +++ b/en/changelog/lpi4a/20231026/index.html @@ -0,0 +1,1420 @@ + + + + + + + + + + + + + + + + + + + + + + 20231026 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20231026

+

系统版本

+

RevyOS 20231026 版本

+

版本下载

+

RevyOS 20231026 lpi4a

+
    +
  • boot-20231026_181638.ext4.zst
  • +
  • root-20231026_181638.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:114.0 (114.0-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.66.0 (1.66.0+dfsg1-1~exp1)
  • +
  • 未预装 GCC:13 (13.1.0-1)
  • +
  • 支持 mpv:0.35.1
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 只开启了HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+
    +
  • 解决了HDMI音频爆音的问题
  • +
  • 添加了鼠标指针偏移的临时解决方案
  • +
+

存在问题

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20231210/index.html b/en/changelog/lpi4a/20231210/index.html new file mode 100644 index 0000000..9cf8508 --- /dev/null +++ b/en/changelog/lpi4a/20231210/index.html @@ -0,0 +1,1452 @@ + + + + + + + + + + + + + + + + + + + + + + 20231210 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20231210

+

系统版本

+

RevyOS 20231210 版本

+

版本下载

+

RevyOS 20231210 lpi4a

+
    +
  • boot-lpi4a-20231210_134926.ext4.zst
  • +
  • root-lpi4a-20231210_134926.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

内核 commit ID

+
    +
  • 2023.12.08.03.26+b8c5d3546
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20231210-134926
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2revyos1)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.4 (3.11.4-1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-4revyos1)
  • +
  • 支持 mpv:0.35.1
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2023.12.08.03.26+b8c5d3546
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+
    +
  • 改善了在menu上鼠标移动有延迟的问题
  • +
+

存在问题

+
    +
  • WIFI/BT模块AIC8800的蓝牙功能暂不可用
  • +
  • AIC8800内核支持已经存在,但对应设备树和固件暂时没有
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20240202/index.html b/en/changelog/lpi4a/20240202/index.html new file mode 100644 index 0000000..f4c9c96 --- /dev/null +++ b/en/changelog/lpi4a/20240202/index.html @@ -0,0 +1,1449 @@ + + + + + + + + + + + + + + + + + + + + + + 20240202 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20240202

+

系统版本

+

RevyOS 20240202 版本

+

版本下载

+

RevyOS 20240202 lpi4a

+
    +
  • boot-lpi4a-20240202_141632.ext4.zst
  • +
  • root-lpi4a-20240202_141632.ext4.zst
  • +
  • u-boot-with-spl-lpi4a-main.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g-main.bin 16g版本刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g69d7d3cd (Jan 31 2024 - 12:58:20 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g69d7d3cd (Jan 31 2024 - 12:58:20 +0000)
  • +
+

内核 commit ID

+
    +
  • lpi4a:#2024.01.31.14.11+384c5e9e2
  • +
  • ahead:#2023.12.08.03.31+62225503f
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20240202-141632
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2revyos1)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.4 (3.11.4-1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-4revyos1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2024.01.31.14.11+384c5e9e2
  • +
  • 内核版本号:5.10.113-ahead #2024.01.31.14.11+384c5e9e2
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+

存在问题

+
    +
  • WIFI/BT模块RTL8723的蓝牙功能在重启/睡眠后不可用
  • +
  • AIC8800暂时不可用
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/changelog/lpi4a/20240601/index.html b/en/changelog/lpi4a/20240601/index.html new file mode 100644 index 0000000..f4f5df7 --- /dev/null +++ b/en/changelog/lpi4a/20240601/index.html @@ -0,0 +1,1348 @@ + + + + + + + + + + + + + + + + + + 20240202 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20240202

+

系统版本

+

RevyOS 20240601 版本

+

版本下载

+

RevyOS 20240601 lpi4a

+
    +
  • boot-lpi4a-20240601_180941.ext4.zst
  • +
  • root-lpi4a-20240601_180941.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
  • sdcard-lpi4a-20240601_180941.img.zst SD卡刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g96627087 (May 29 2024 - 08:30:59 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g96627087 (May 29 2024 - 08:30:59 +0000)
  • +
+

内核 commit ID

+
    +
  • lpi4a:#2024.01.31.14.11+384c5e9e2
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20240601_180941
  • +
+

RevyOS 20240601 meles

+
    +
  • boot-meles-20240601_180943.ext4.zst
  • +
  • iw-single-line.bin
  • +
  • root-meles-20240601_180943.ext4.zst
  • +
  • sdcard-meles-20240601_180943.img.zst
  • +
  • u-boot-with-spl-meles-4g.bin
  • +
  • u-boot-with-spl-meles.bin
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.21-1revyos1
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2-1+b1
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-23revyos1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2024.05.31.16.27+2dec14431
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
  • 支持从sd卡启动
  • +
+

已修复的问题

+
    +
  • str部分已修复
  • +
+

存在问题

+
    +
  • std存在部分问题
  • +
  • WIFI/BT模块RTL8723的蓝牙功能在重启/睡眠后不可用
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/en/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" "b/en/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" new file mode 100644 index 0000000..8fb762a --- /dev/null +++ "b/en/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" @@ -0,0 +1,1278 @@ + + + + + + + + + + + + + + + + + + + + + + OpenTTD 游戏 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

OpenTTD

+

状态: +可以运行,软解图形

+

资料: +https://github.com/OpenTTD/OpenTTD/blob/master/COMPILING.md +https://salsa.debian.org/openttd-team/openttd/-/blob/master/debian/control

+

步骤

+
# 安装依赖
+sudo apt install libsdl2-dev zlib1g-dev libpng-dev libfreetype-dev libfontconfig-dev libicu-dev liblzo2-dev liblzma-dev libfluidsynth-dev libopengl-dev grfcodec openttd-opengfx cmake
+
+# 下载代码&编译
+git clone https://github.com/OpenTTD/OpenTTD.git
+cd OpenTTD
+mkdir build
+cd build
+cmake ..
+make
+
+# 运行
+./openttd
+
+

图形和音频资源文件通过游戏内功能下载,支持中文

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/desktop/games/images/openttd_1.png b/en/desktop/games/images/openttd_1.png new file mode 100644 index 0000000..76b400e Binary files /dev/null and b/en/desktop/games/images/openttd_1.png differ diff --git a/en/desktop/games/images/yquake2_1.png b/en/desktop/games/images/yquake2_1.png new file mode 100644 index 0000000..fba9a2e Binary files /dev/null and b/en/desktop/games/images/yquake2_1.png differ diff --git a/en/desktop/games/yquake2/index.html b/en/desktop/games/yquake2/index.html new file mode 100644 index 0000000..5a9b2de --- /dev/null +++ b/en/desktop/games/yquake2/index.html @@ -0,0 +1,1297 @@ + + + + + + + + + + + + + + + + + + + + + + yquake2 游戏 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

yquake2

+

状态: +可以运行,支持GLES加速

+

资料: +https://github.com/yquake2/yquake2/blob/master/doc/020_installation.md +https://github.com/yquake2/yquake2/blob/master/doc/030_configuration.md

+

安装步骤

+
# 安装依赖
+sudo apt install build-essential libgl1-mesa-dev libsdl2-dev libopenal-dev libcurl4-openssl-dev
+
+# 下载代码&编译
+git clone https://github.com/yquake2/yquake2.git
+mkdir build
+cd build
+cmake ..
+make
+
+# 运行
+#(需要准备好游戏原始资源文件夹baseq2)
+cd ..
+cd release
+cp -r ~/baseq2 .
+./quake2
+
+

展示

+

需要将原始游戏资源文件夹baseq2放到和quake2程序同一个目录中(Steam版可用)

+

分辨率和图形加速选项在游戏内设置菜单修改,不修改默认是软渲染,硬渲染设置请改为“OpenGL ES3”(参见下图)

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/desktop/install/index.html b/en/desktop/install/index.html new file mode 100644 index 0000000..6853c4b --- /dev/null +++ b/en/desktop/install/index.html @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + 安装 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

包安装

+

在RevyOS中安装包只需要在 terminal 中输入

+
apt install + 包名
+
+

即可安装

+

以下以安装 git作为演示

+
debian@lpi4a:~$ sudo apt install git
+[sudo] password for debian: 
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+The following additional packages will be installed:
+  git-man liberror-perl patch
+Suggested packages:
+  gettext-base git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui
+  gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
+The following NEW packages will be installed:
+  git git-man liberror-perl patch
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Need to get 8605 kB of archives.
+After this operation, 39.4 MB of additional disk space will be used.
+Do you want to continue? [Y/n] y
+Get:1 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 liberror-perl all 0.17029-2 [29.0 kB]
+Get:2 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 git-man all 1:2.40.1-1 [2072 kB]
+Get:3 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 git riscv64 1:2.40.1-1 [6390 kB]
+Get:4 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 patch riscv64 2.7.6-7+b1 [114 kB]
+Fetched 8605 kB in 1s (6656 kB/s)
+Selecting previously unselected package liberror-perl.
+(Reading database ... 75688 files and directories currently installed.)
+Preparing to unpack .../liberror-perl_0.17029-2_all.deb ...
+Unpacking liberror-perl (0.17029-2) ...
+Selecting previously unselected package git-man.
+Preparing to unpack .../git-man_1%3a2.40.1-1_all.deb ...
+Unpacking git-man (1:2.40.1-1) ...
+Selecting previously unselected package git.
+Preparing to unpack .../git_1%3a2.40.1-1_riscv64.deb ...
+Unpacking git (1:2.40.1-1) ...
+Selecting previously unselected package patch.
+Preparing to unpack .../patch_2.7.6-7+b1_riscv64.deb ...
+Unpacking patch (2.7.6-7+b1) ...
+Setting up liberror-perl (0.17029-2) ...
+Setting up patch (2.7.6-7+b1) ...
+Setting up git-man (1:2.40.1-1) ...
+Setting up git (1:2.40.1-1) ...
+Processing triggers for man-db (2.11.2-2) ...
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/desktop/revyos-use-docker/index.html b/en/desktop/revyos-use-docker/index.html new file mode 100644 index 0000000..b0d0585 --- /dev/null +++ b/en/desktop/revyos-use-docker/index.html @@ -0,0 +1,1237 @@ + + + + + + + + + + + + + + + + + + + + + + docker - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

安装 golang

+
sudo apt install golang-go
+
+

测试安装是否成功:

+
debian@lpi4a:~$ go version
+go version go1.19.8 linux/riscv64
+
+

安装 riscv64 docker

+

源中已有 riscv64 的docker安装包,名为 docker.io,可以直接使用:

+
sudo apt install docker.io
+
+

测试 docker

+
sudo docker pull riscv64/debian:unstable
+
+

issues

+

如果使用命令sudo docker pull riscv64/debian:unstable 出现以下错误:

+
debian@lpi4a:~$ docker pull riscv64/debian:unstable
+Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=riscv64%2Fdebian&tag=unstable": dial unix /var/run/docker.sock: connect: permission denied
+
+
+

需要执行以下命令进行修复:

+
# 1. 
+sudo chmod 666 /var/run/docker.sock
+
+# 2.
+sudo systemctl start docker
+
+# 3.
+sudo docker run hello-world
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/desktop/software/gimp/index.html b/en/desktop/software/gimp/index.html new file mode 100644 index 0000000..aecc175 --- /dev/null +++ b/en/desktop/software/gimp/index.html @@ -0,0 +1,1281 @@ + + + + + + + + + + + + + + + + + + + + + + GIMP 图像编辑工具 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

GIMP图像处理软件

+

状态:可以运行

+

官方资料页:https://docs.gimp.org/2.10/en/

+

软件说明

+

GIMP 是一个多平台工具,用于创建和编辑各种图像。 GIMP 是 GNU Image Manipulation Program 的首字母缩写。 GIMP 有很多功能。它可以用作简单的绘画程序、专家级的照片修饰程序、创建数字艺术的工具、在线批处理系统、批量生产的图像渲染器、图像格式转换器等。 GIMP 是可扩展和可扩展的。它旨在通过插件和扩展来增强以执行任何操作。先进的脚本界面允许从最简单的任务到最复杂的图像处理程序的所有内容都可以轻松编写脚本。

+

使用说明

+

GIMP是 RevyOS 预安装图形处理软件,如想使用 GIMP,在terminal中输入

+
gimp
+
+

在等待资源加载后就会弹出 GIMP 主界面

+

+

使用功能参考官方资料页

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/desktop/software/iBus/index.html b/en/desktop/software/iBus/index.html new file mode 100644 index 0000000..0788313 --- /dev/null +++ b/en/desktop/software/iBus/index.html @@ -0,0 +1,1269 @@ + + + + + + + + + + + + + + + + + + + + + + iBus 输入法 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

iBus 输入法

+

状态:可以运行

+

资料:https://wiki.debian.org/I18n/ibus

+

步骤(没有使用im-config)

+
sudo apt install ibus ibus-libpinyin
+sudo reboot
+
+

重启后需要手动将中文输入法添加到输入选项中:

+

托盘图标->右击->Preference +

+

点击选项卡Input Method->Add,打开下图窗口 +

+

点击Chinese->Intelligent Pinyin->Add +

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/en/index.html b/en/index.html new file mode 100644 index 0000000..ab29d96 --- /dev/null +++ b/en/index.html @@ -0,0 +1,1372 @@ + + + + + + + + + + + + + + + + + + + + Home - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

RevyOS

+

Intro

+

RevyOS是由RuyiSDK团队的RevyOS小队支持开发的一款针对T-Head芯片生态的Debian优化定制发行版。

+

RevyOS 围绕 c910v/c920/c906fdv/c908 等芯片提供了完整而全面的适配和优化支持,默认集成支持 RVV0.7.1 和 XThead 的 GCC 工具链,并搭载使用 RVV0.7.1 指令集优化过的 glibc 和 thead-kernel。

+

目前,RevyOS 在办公、网页浏览、观看视频等方面已经能满足用户的基本使用需求。

+

基于上述定制和优化的 RevyOS,在 Lichee Pi 4A,beaglev-ahead,milkv-pioneer 等硬件平台上,能够提供优秀的性能和极佳的体验。

+

Image Download & Flash

+

RevyOS 的用户版镜像目前在 ISCAS(INSTITUTE OF SOFTWARE CHINESE ACADEMY OF SCIENCES) / felix Finland Mirror 开源镜像站进行更新。

+

如您想获取 RevyOS 最新版镜像请选择对应板子获取对应的U-Boot/boo分区/root分区文件:

+ + + + + + + + + + + + + + + + + + + + +
Support Hardwarelpi4a/vala(荔枝派4a/评估板a)ahead(beaglev-ahead)
Latest Imagelpi4a 20231210ahead 202301210
Changeloglpi4a 20231210ahead 20231210
+

镜像刷写请参考:镜像刷写教程

+

在完成镜像刷写后用户在登录界面,输入用户名 debian,密码 debian 就可以登录进入系统了。

+

如何启用 T-Head 优化 GCC

+

详见这篇文档Enable Optimization GCC

+

更新与预告

+

镜像版本更新后我们会公布当前版本镜像支持内容,如您想查看镜像支持内容请点击RevyOS版本更新日志后选择您所需要的版本进行查看。

+

同时我们会在此界面发布下版本预期更新内容,您可在该页面进行查看。

+

issue相关

+

如果您在使用过程中遇到问题,可以进行issue申报

+

用户文档

+

在本仓库中,我们拥有相关的使用构建与适配文档以及测试文档方便让用户对部分内容进行参考,完善的文档支持加快了用户对于系统的上手时间。

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..13b4774 --- /dev/null +++ b/index.html @@ -0,0 +1,1381 @@ + + + + + + + + + + + + + + + + + + + + RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

RevyOS

+

简介

+

RevyOS是由RuyiSDK团队的RevyOS小队支持开发的一款针对T-Head芯片生态的Debian优化定制发行版。

+

RevyOS 围绕 c910v/c920/c906fdv/c908 等芯片提供了完整而全面的适配和优化支持,默认集成支持 RVV0.7.1 和 XThead 的 GCC 工具链,并搭载使用 RVV0.7.1 指令集优化过的 glibc 和 thead-kernel。

+

目前,RevyOS 在办公、网页浏览、观看视频等方面已经能满足用户的基本使用需求。

+

基于上述定制和优化的 RevyOS,在 Lichee Pi 4A,beaglev-ahead,milkv-pioneer 等硬件平台上,能够提供优秀的性能和极佳的体验。

+

镜像下载及刷写

+

RevyOS 的用户版镜像目前在 ISCAS(中国科学院软件研究所) / felix 芬兰源 开源镜像站进行更新。

+

如您想获取 RevyOS 最新版镜像请选择对应板子获取对应的U-Boot/boo分区/root分区文件:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
支持设备LicheePi 4A/vala(荔枝派4a/评估板a)LicheePi Cluster 4Aahead(beaglev-ahead)Milk-V PioneerMilk-V Meles
最新镜像lpi4a 20240601LicheePi Cluster 4A 20240601ahead 20240529pioneer20240327meles20240601
更新日志lpi4a 20240529lc4a 20240529ahead 20240529pioneer20240327Meles20240601
+

RevyOS 0529版本U-boot文件下载:链接

+

镜像刷写请参考:镜像刷写教程

+

在完成镜像刷写后用户在登录界面,输入用户名 debian,密码 debian 就可以登录进入系统了。

+

如何启用 T-Head 优化 GCC

+

详见这篇文档如何启用优化GCC

+

更新日志

+

镜像版本更新后我们会公布当前版本镜像支持内容,如您想查看镜像支持内容请点击RevyOS版本更新日志后选择您所需要的版本进行查看。

+

issue相关

+

如果您在使用过程中遇到问题,可以进行issue申报

+

用户文档

+

在本DOCS中,我们拥有相关的使用构建与适配文档以及测试文档方便让用户对部分内容进行参考,完善的文档支持加快了用户对于系统的上手时间。

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..7988e1a --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,275 @@ + + + + None./ + 2024-06-18 + daily + + + + + + Noneadaptation/GStreamer-pipeline-example-with-thead-omxil-lib/ + 2024-06-18 + daily + + + + + + Noneadaptation/GStreamer%E6%92%AD%E6%94%BE%E5%99%A8%E9%80%82%E9%85%8D/ + 2024-06-18 + daily + + + + + + Nonebenchmark/Chromium%E9%B1%BC%E7%BC%B8GPU%E6%B5%8B%E8%AF%95/ + 2024-06-18 + daily + + + + + + Nonebenchmark/coremark/ + 2024-06-18 + daily + + + + + + Nonebenchmark/glmark2/ + 2024-06-18 + daily + + + + + + Nonebenchmark/lmbench/ + 2024-06-18 + daily + + + + + + Nonebenchmark/p7zip/ + 2024-06-18 + daily + + + + + + Nonebenchmark/reboot/ + 2024-06-18 + daily + + + + + + Nonebenchmark/stream/ + 2024-06-18 + daily + + + + + + Nonebuild/%E6%9E%84%E5%BB%BA%E6%96%87%E6%A1%A3/ + 2024-06-18 + daily + + + + + + Nonebuild/debian/Debian%E8%BD%AF%E4%BB%B6%E5%8C%85%E6%9E%84%E5%BB%BA%E6%B5%81%E7%A8%8B/ + 2024-06-18 + daily + + + + + + Nonebuild/debian/enable_optimization_gcc/ + 2024-06-18 + daily + + + + + + Nonebuild/debian/%E7%BC%96%E8%AF%91%E5%99%A8%E7%9B%B8%E5%85%B3%E8%AF%B4%E6%98%8E/ + 2024-06-18 + daily + + + + + + Nonebuild/other/gcc%E7%BC%96%E8%AF%91%E8%BD%AF%E4%BB%B6%E8%AF%B4%E6%98%8E/ + 2024-06-18 + daily + + + + + + Nonebuild/other/manuel_build_kernel/ + 2024-06-18 + daily + + + + + + Nonebuild/other/thead-qemu%E7%BC%96%E8%AF%91%E6%B5%81%E7%A8%8B/ + 2024-06-18 + daily + + + + + + Nonechangelog/ahead/20230802/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20230412/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20230425/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20230511/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20230614/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20230810/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20230916/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20231026/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20231210/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20240202/ + 2024-06-18 + daily + + + + + + Nonechangelog/lpi4a/20240601/ + 2024-06-18 + daily + + + + + + Nonedesktop/install/ + 2024-06-18 + daily + + + + + + Nonedesktop/revyos-use-docker/ + 2024-06-18 + daily + + + + + + Nonedesktop/games/OpenTTD%E6%B8%B8%E6%88%8F/ + 2024-06-18 + daily + + + + + + Nonedesktop/games/yquake2/ + 2024-06-18 + daily + + + + + + Nonedesktop/software/gimp/ + 2024-06-18 + daily + + + + + + Nonedesktop/software/iBus/ + 2024-06-18 + daily + + + + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000..9d073bb Binary files /dev/null and b/sitemap.xml.gz differ diff --git a/zh/CNAME b/zh/CNAME new file mode 100644 index 0000000..bfc0408 --- /dev/null +++ b/zh/CNAME @@ -0,0 +1 @@ +docs.revyos.dev diff --git a/zh/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html b/zh/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html new file mode 100644 index 0000000..f397b83 --- /dev/null +++ b/zh/adaptation/GStreamer-pipeline-example-with-thead-omxil-lib/index.html @@ -0,0 +1,2092 @@ + + + + + + + + + + + + + + + + + + + + + + GStreamer pipeline - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

GStreamer pipeline examples with thead OpenMax-IL lib

+

Some GStreamer pipeline command-line examples with omxil library on TH1520, RevyOS

+

Get ready

+

In this section, the grammer of the gstreamer command-line pipeline and some usefule debug tips are introduced. They have been moved to the end of the article.

+

Pipeline samples

+

Basically, you neet to install gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-omx-generic, gstreamer1.0-omx-bellagio-config,gstreamer1.0-tools.

+

Test

+

videotestsrc

+
# videotestsrc
+gst-launch-1.0 videotestsrc ! autovideosink
+
+# specify the video stream format
+gst-launch-1.0 videotestsrc ! video/x-raw, format=NV12, width=960, height=540, framerate=60/1 ! autovideosink
+
+

fpsdisplaysink

+
# display framerate
+gst-launch-1.0 videotestsrc ! fpsdisplaysink
+
+# no need to sync on the clock - used to test the performance of the pipeline
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sync=false
+
+# stop display on the screen, but redirect the output to stdout
+gst-launch-1.0 videotestsrc ! fpsdisplaysink text-overlay=false -v 2>&1
+
+# specify which sink to use
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sink=glimagesink
+
+# combine the previous examples
+gst-launch-1.0 videotestsrc ! fpsdisplaysink sink=glimagesink sync=false text-overlay=false -v 2>&1
+
+

audiotestsrc

+
# audiotestsrc
+gst-launch-1.0 audiotestsrc ! autoaudiosink
+
+# change volume (0 to 1)
+gst-launch-1.0 audiotestsrc volume=0.1 ! autoaudiosink
+
+# change waveform
+# could be selected among square, silence, pink-noise, etc.
+gst-launch-1.0 audiotestsrc wave=pink-noise ! autoaudiosink
+
+# set fix frequency, such as "do" (262 Hz)
+gst-launch-1.0 audiotestsrc freq=262 ! autoaudiosink
+
+

fakesink

+
# a dummy sink that swallows everything
+gst-launch-1.0 videotestsrc ! fakesink
+
+

Decode

+

Video decode

+
# let decodebin choose which decoder to use,
+# and autovideosink choose which video-sink to use (not recommended)
+gst-launch-1.0 filesrc location=fire.mp4 ! decodebin ! autovideosink
+
+# h264 software decode without opengl display
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h264parse ! avdec_h264 ! xvimagesink
+
+# h264 hardware decode with opengl display
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h264parse ! omxh264dec ! glimagesink
+
+# h265 hardware decode
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! h265parse ! omxh265dec ! glimagesink
+
+# vp9 hardware decode 
+gst-launch-1.0 filesrc location=fire.webm ! matroskademux ! omxvp9dec ! glimagesink
+
+# mpeg4 hardware decode 
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux ! queue ! mpeg4videoparse ! omxmpeg4videodec ! glimagesink
+
+# play mkv/webm file
+gst-launch-1.0 filesrc location=fire.mkv ! matroskademux ! decodebin ! glimagesink
+
+# todo 10-bit h264/h265 decode
+
+

Audio decode

+
# there is no hardware decoder on th1520
+
+# let autoaudiosink choose which audio-sink to use
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! autoaudiosink
+
+# mp3 decode
+gst-launch-1.0 filesrc location=blade.mp3 ! mpegaudioparse ! avdec_mp3 ! audioconvert ! autoaudiosink
+
+# aac decode
+gst-launch-1.0 filesrc location=blade.aac ! aacparse ! avdec_aac ! audioconvert ! autoaudiosink
+gst-launch-1.0 filesrc location=blade.aac ! aacparse ! faad ! audioconvert ! autoaudiosink
+## faad works well without aacparse
+gst-launch-1.0 filesrc location=blade.aac ! faad ! audioconvert ! autoaudiosink
+
+# opus decode
+## ogg file must be demuxed by oggdemux first
+gst-launch-1.0 filesrc location=blade.ogg ! oggdemux ! opusparse ! opusdec ! audioconvert ! autoaudiosink
+gst-launch-1.0 filesrc location=blade.ogg ! oggdemux ! opusparse ! avdec_opus ! audioconvert ! autoaudiosink
+
+# wav decode
+gst-launch-1.0 filesrc location=test.wav ! wavparse ! audioresample ! audioconvert ! autoaudiosink
+
+# use specific audiosink
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! pulsesink
+
+# specify the output device by using alsasink with device property
+gst-launch-1.0 filesrc location=blade.mp3 ! decodebin ! audioconvert ! alsasink device=hw:0,2
+
+

demux and decode

+

We play media file in this section.

+
# play mp4 file with both audio and video
+gst-launch-1.0 filesrc location=fire.mp4 ! qtdemux name=demux \
+  demux.video_0 ! queue  ! decodebin ! videoconvert ! autovideosink \
+  demux.audio_0 ! queue ! decodebin ! audioconvert !  autoaudiosink
+
+

Encode to file

+

Video encode

+
# h264 encode test
+# before import video stream to omxh264dec, data should be transformed to frame with rawvideoparse
+# property and pad of rawvideoparse should be set to the same, so we use 'use-sink-caps=true' here
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc ! fakesink
+
+# h264 hardware encode to file
+## todo: encoded h264 file has seek problem
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc \
+  ! h264parse ! qtmux ! mp4mux ! filesink location=test.mp4
+
+# h264 hardware encode to file with specific bitrate(bit per second)
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true  \
+  ! omxh264enc target-bitrate=3000000 \
+  ! h264parse ! filesink location=test.mp4
+
+
+# h265 hardware encode to file
+## this pipeline produces h265 stream only
+## qtdemux is not needed while decoding
+gst-launch-1.0 videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=640, height=480 \
+  ! rawvideoparse use-sink-caps=true ! omxh265enc \
+  ! h265parse ! filesink location=test.h265
+
+# h264 hardware encode from camera to file
+gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert \
+  ! video/x-raw, format=NV12,width=640,height=480 \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! filesink location=test.mp4 -e
+
+

Audio encode

+
# There is no hardware audio encoder on th1520
+
+# encode aac stream with adts container(.aac file)
+## the unit of the bitrate is 'bit/sec'
+gst-launch-1.0 audiotestsrc ! voaacenc bitrate=128000 ! avmux_adts ! filesink location=test.aac
+
+
+# todo: encode aac stream with adif container(.m4a file)
+
+# encode to mp3 file
+## the unit of the bitrate is 'kbit/sec'
+gst-launch-1.0 audiotestsrc ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=test.mp3
+
+# encode opus stream to .ogg file
+gst-launch-1.0 audiotestsrc ! opusenc ! oggmux ! filesink location=test.opus
+
+
+# todo: encode pcm stream to .wav file
+
+

mux and encode

+

This part has been removed to Video + audio transcode section.

+

Media file transcode

+

Video transcode

+

Since omx...dec cannot fulfill qtdemux and mp4mux, and gst-omx is no longer maintained, it is hard to mux mp4 file with these two plugins. To mux stream from omxh264dec, use avmux_mp4 instead. But there is no h265 or vp9 muxer available for omx...dec

+

The raw video stream should be processed by rawvideoparse before sent to encoder. Because itself cannot scale frame or change framerate, rawvideoparse need to get the stream info of its sink pad(src pad of the backward element). Therefore use-sink-caps must be set to true.

+

To change width and height, set properties output-width and output-height of omx...dec. To modify bitrate and bitrate control method, set properties control-rate and target-bitrate of omx...enc. To change framerate, set properties of videorate.

+
# h265 to h264
+gst-launch-1.0 filesrc location=test_h265.mp4 ! qtdemux ! h265parse ! omxh265dec \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! avmux_mp4 ! filesink location=t_h264.mp4
+
+# vp9 to h264
+gst-launch-1.0 filesrc location=test_vp9.webm ! matroskademux ! omxvp9dec \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! avmux_mp4 ! filesink location=t_h264.mp4
+
+# arbitrary input to h264
+gst-launch-1.0 filesrc location=test_h264.mp4 ! decodebin \
+  ! rawvideoparse use-sink-caps=true \
+  ! omxh264enc ! h264parse ! filesink location=t_h264.mp4
+
+# h264 to h264, with more options
+## set the video width and height to 1280×720, framerate to 15fps, bitrate mode to constant and bitrate to 5Mbps
+gst-launch-1.0 filesrc location=test_h264.mp4 ! qtdemux ! h264parse \
+  ! omxh264dec output-width=1280 output-height=720 \
+  ! videorate ! video/x-raw, framerate=15/1 \
+  ! rawvideoparse use-sink-caps=true  \
+  ! omxh264enc control-rate=constant target-bitrate=5000000 ! h264parse ! filesink location=t_h264.mp4
+
+## there is no vp9 encoder in th1520 omxil lib
+
+

Audio transcode

+
# aac to mp3
+gst-launch-1.0 filesrc location=test.aac ! aacparse ! avdec_aac ! audioconvert ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=t.mp3
+
+# mp3 to aac
+gst-launch-1.0 filesrc location=test.mp3 ! mpegaudioparse ! avdec_mp3 ! audioconvert ! voaacenc bitrate=128000 ! avmux_adts ! filesink location=t.aac
+
+# wav to mp3
+gst-launch-1.0 filesrc location=test.wav ! wavparse ! audioresample ! audioconvert ! lamemp3enc quality=2 target=bitrate bitrate=192 cbr=true ! id3v2mux ! filesink location=t.mp3
+
+# mp3 to wav
+gst-launch-1.0 filesrc location=test.mp3 ! mpegaudioparse ! avdec_mp3 ! audioresample ! audioconvert \
+  ! audio/x-raw, rate=44100, format=S16LE ! wavenc ! filesink location=t.wav
+
+

Video + audio remux and transcode

+
# mux test
+gst-launch-1.0 audiotestsrc ! autoaudiosink videotestsrc ! autovideosink
+
+# mux the test video and audio stream to a mp4 file
+## be aware that '-e' must be set to this pipeline,
+## and there is no '!' before audiotestsrc
+gst-launch-1.0 -e videotestsrc ! videoconvert \
+  ! video/x-raw, format=NV12, width=960, height=540 \
+  ! rawvideoparse use-sink-caps=true ! omxh264enc ! h264parse \
+  ! avmux_mp4 name=mux ! filesink location=t_h264.mp4 \
+  audiotestsrc ! lamemp3enc ! mux.
+
+# change container from mkv to mp4 with h264 stream
+## this means demux a mkv file then mux video and audio stream to mp4 file
+gst-launch-1.0 filesrc location=test_h264.mkv \
+  ! matroskademux name=demux mp4mux force-create-timecode-trak=true name=mux ! filesink location=t_h264.mp4 \
+  demux.video_0 ! queue ! video/x-h264 ! mux. \
+  demux.audio_0 ! queue ! audio/mpeg ! mux.
+
+

Media mixing

+

Camera capture

+

You can use command v4l2-ctl, which is included in package v4l-utils to get information of your camera.

+

For more information, read this article

+
# h264 hardware encode from camera to file
+gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert \
+  ! video/x-raw, format=NV12,width=640,height=480 \
+  ! rawvideoparse format=nv12 width=640 height=480 \
+  ! omxh264enc ! h264parse ! filesink location=test.mp4 -e
+
+
+

Stream transfer

+
# capture camera and stream to other machine
+
+## source
+gst-launch-1.0 v4l2src device=/dev/video0 !  videoconvert ! videorate \
+  ! video/x-raw,  format=NV12,width=640,height=480,framerate=20/1 \
+  ! rawvideoparse format=nv12 width=640 height=480  framerate=20/1 \
+  ! omxh264enc ! h264parse config-interval=1 ! video/x-h264,stream-format=byte-stream,alignment=nal \
+  ! rtph264pay ! udpsink  host=192.168.31.27 port=5600
+
+## destination
+gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
+  ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink
+
+

Other tools

+

gst-inspect-1.0

+

gst-inspect-1.0 is a tool to print info about a GStreamer element(factory), which is included in gstreamer1.0-tools.

+
# print the GStreamer element list with a 'less' like paing filter.
+gst-inspect-1.0
+
+# print info of the element
+gst-inspect-1.0 <element_name>
+
+

gst-discover1.0

+

gst-discover-1.0 is a tool to show info about the media file, which is inclucded in gstreamer1.0-plugins-base-apps.

+
gst-discoverer-1.0 -v test.mp4
+
+

gst-play-1.0

+

If you are tired of manually build pipeline for playback by hand. You can use gst-play-1.0 as an alternative, which is included in gstreamer1.0-plugins-base-apps.

+
# play media file
+gst-play-1.0 test.mp4
+
+# play media file with specific sink
+gst-play-1.0 --videosink=glimagesink --audiosink=alsasink
+
+

Left button and right button can be used to seek. For more info, please read this article.

+

Other examples

+

Get ready

+

Debug tips

+

To get the cap info or property of an element, you may need to run gst-inspect-1.0 <element_name>. If gst-inspect-1.0 command not found, install gstreamer1.0-tools.

+

If you want to debug GStreamer, refer to the articles below. +https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html +https://gstreamer.freedesktop.org/documentation/gstreamer/running.html?gi-language=c

+

Grammer

+

Here is a simple command-line pipeline.

+
gst-launch-1.0 videotestsrc ! autovideosink
+
+

! represent a link. The established pipeline looks like

+
videotestsrc => autovideosink
+
+

There are several properties in videotestsrc, which could be lookup by gst-inspect-1.0 videotestsrc.Set some properties:

+
gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink
+
+

NAME=VALUE is a property. pattern and flip are properties of videotestsrc.

+

Sometimes we need to control the behavior of gst-launch-1.0.

+
GST_DEBUG=3 gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink
+gst-launch-1.0 videotestsrc pattern=ball flip=true ! autovideosink --gst-debug-level=3
+
+

There are two ways to achieve this goal. One is setting environment variable. Another one is passing command-line argument to gst-launch-1.0. GST_DEBUG=3 and --gst-debug-level=3 have the same meaning.

+

In most video decoding cases, there is a video-stream and an audio stream. We need to use demuxer to seperate them. Demuxer usually have several src pad. Here is an example.

+
gst-launch-1.0 filesrc location=test-video.mp4 ! qtdemux name=demux demux. ! queue ! h264parse ! omxh264dec ! glimagesink demux. ! queue ! aacparse ! avdec_aac ! audioconvert !  alsasink
+
+

It is hard to read. Add some word wrap:

+
gst-launch-1.0 filesrc location=test-video.mp4 ! qtdemux name=demux \
+  demux. ! queue ! h264parse ! omxh264dec ! glimagesink \
+  demux. ! queue ! aacparse ! avdec_aac ! audioconvert ! pulsesink
+
+

Here we use a demuxer to seperate video and audio, the grammer is:

+
... demuxer name=DEMUXER_NAME \
+DEMUXER_NAME.PIPELINE_NAME_1 ! queue ! ...(the remaining part of pipeline 1) \
+DEMUXER_NAME.PIPELINE_NAME_2 ! queue ! ...(the remaining part of pipeline 2)
+
+

Sometimes we need to set certain properties of the stream at certain nodes in the pipeline, e.g set resolution of the videostream of the videotestsrc.

+
gst-launch-1.0 videotestsrc ! video/x-raw, width=800, height=600 ! glimagesink
+
+

We negotiated the pad properties between videotestsrc and glimagesink. The property names and values must be supported by both element. You can find them in Pad Templates section of gst-inspect-1.0.

+

Reference

+
    +
  1. GStreamer pipeline grammar - StackOverflow
  2. +
  3. GStreamer pipeline samples - GitHub
  4. +
  5. gst-launch-1.0 - GStreamer doc
  6. +
  7. How to display fps of streaming video in gsteramer? - StackOverflow
  8. +
  9. Storing AAC Audio and Retrieving - StackOverflow
  10. +
  11. Accelerated GStreamer User Guide - NVIDIA
  12. +
  13. Storing AAC Audio and Retrieving - StackOverflow
  14. +
  15. Play an opus file with gstreamer and pulseaudio - StackOverflow
  16. +
  17. mp4mux not working with omxh264enc
  18. +
  19. omxh264enc makes qtmux error out with "Buffer has no PTS." - FreeDesktop - Gitlab
  20. +
  21. gst-omx: Retire the whole package - FreeDesktop - Gitlab
  22. +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/zh/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" "b/zh/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" new file mode 100644 index 0000000..1fd8a7e --- /dev/null +++ "b/zh/adaptation/GStreamer\346\222\255\346\224\276\345\231\250\351\200\202\351\205\215/index.html" @@ -0,0 +1,1968 @@ + + + + + + + + + + + + + + + + + + + + + + GStreamer 播放器适配 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

支持 PTG omxil 库的 GStreamer 播放器适配文档

+

适用SDK v1.1.2

+

概述

+

PTG 的 OpenMAX IL 库(下称 vpu-omxil)可使 LicheePi 4A 能够流畅硬解码 4k 60fps 的视频,那么具体应该如何使用该库呢?本文将主要介绍 LicheePi 4A 开发板上 Parole 播放器的集成与使用,用户可根据本文来了解在 LicheePi 4A 上的适配过程 +以 h264 的硬解为例,视频硬解的工作流程如图所示

+
                +-------------------------------------------+
+                |    +------------+       +------------+    |   +--------+
+video stream----+--->| omxh264dec +------>| video-sink +----+-->| player |
+                |    +------+-----+       +------------+    |   +--------+
+                |           |     GStreamer                 |
+                +-----------+-------------------------------+
+                            |
+                      +-----v-----+
+                      | vpu-omxil |
+                      +-----+-----+
+                            |
+                            |
+                    +-------v-------+
+                    | kernel module |
+                    |    (driver)   |
+                    +-------+-------+
+                            |
+                            v
+                        hardware
+
+
    +
  1. 视频流(video stream)由 GStreamer 读入后经过一系列预处理,送到 GStreamer 的解码器omxh264dec
  2. +
  3. omxh264dec 调用动态库,即 PTG 提供的 vpu-omxil 库,该库通过驱动访问硬件(kernel module)进行硬解
  4. +
  5. 解码后的流传输到 GStreamer 的 video-sink 中,并由播放器(player)呈现
  6. +
+

A. GStreamer omxh264dec 解码测试

+

将 omxh264 解码的部分单独拎出来,大体的结构如下

+
  +---+------------+----+
+  |   +------------+    |
+  |   | omxh264dec |    |
+  |   +------------+    |
+  |      GStreamer      |
+  +----------+----------+
+             |
+  +----+-----v-----+----+
+  |    +-----------+    |
+  |    | vpu-omxil |    |
+  |    +-----------+    |
+  |  libomxil-bellagio  |
+  +----------+----------+
+             |
++------------v------------+
+|  - memalloc   - vc8000  |
+|  - hantrodec  - vidmem  |
+|      kernel modules     |
++------------+------------+
+             |
+             v
+          hardware
+
+

我们依照自底向上的顺序构建图示的链条。 +本节的主要目的是使 omxh264dec 解码器能够运行,并不涉及到输出屏幕等内容。

+

1. 驱动编译、安装以及硬件访问权限的设置

+

硬解码需要访问硬件,而访问硬件又需要驱动,所以需要编译并安装驱动

+

1.1 编译驱动

+

PTG 提供的驱动源:

+

https://github.com/revyos/vpu-vc8000e-kernel

+

https://github.com/revyos/vpu-vc8000d-kernel

+

https://github.com/revyos/video_memory

+
1.1.1替代方案
+

revyos/thead-kernel 已经合并了上述三个内核模块, 使用revyos_defconfig 可以无需编译上述内核模块

+

1.2 安装驱动

+
# depmod 分析可载入模块的依赖关系,在 /lib/modules/<kernel-version>中添加modules.dep文件,以便后续 modprobe 使用
+sudo depmod -a
+sudo modprobe vidmem vc8000 hantrodec memalloc
+
+## 如果 modprobe 安装有问题的话,可以尝试使用 insmod 安装
+#cd /usr/lib/modules/$(uname -r)
+#sudo insmod $(find . -name *vidmem.ko*)
+#sudo insmod $(find . -name *vc8000.ko*)
+#sudo insmod $(find . -name *hantrodec.ko*)
+#sudo insmod $(find . -name *memalloc.ko*)
+
+# 可选:设置开机加载模块
+echo -e "\nvidmem\nhantrodec\nmemalloc\nvc8000\n" | sudo tee -a /etc/modules > /dev/null
+
+

1.3 设置硬件访问权限

+

安装内核模块后,/dev 目录下会出现 hantrodec vidmem vc8000 三个设备文件。默认情况下,用户对其没有访问权限,如果不修改权限的话,非 root 用户在打开 omxil 库时会报错。

+
# 生效一次
+cd /dev
+sudo chmod 666 hantrodec vidmem vc8000
+
+# 长期生效
+cat << EOF | sudo tee /lib/udev/rules.d/70-hantro.rules > /dev/null
+KERNEL=="vidmem", MODE="0666"
+KERNEL=="hantrodec", MODE="0666"
+KERNEL=="vc8000", MODE="0666"
+EOF
+
+

RevyOS 适配记录

+

如果要获取 RevyOS 特定版本的内核模块,可进入 revyos/thead-kernel ,并在 GitHub CI 中下载 artifacts

+

2. 安装 vpu-omxil 并调整配置

+

首先,请将 vpu-omxil 下载并解压到 /usr/lib/omxil/中 +vpu-omxil_1.2.1.tar.gz +如下图所示, 需要

+
    +
  1. vpu-omxil 中的 OpenMax 组件注册到 libomxil-bellagio
  2. +
  3. gst-omx(该包提供了 omxh264dec 解码器) 调用 libomxil-bellagio 的时候也需要知道调用的组件名称
  4. +
+
+---------+   +-------------------+   +-----------+
+| gst-omx +-->| libomxil-bellagio +-->| vpu-omxil |
++---------+   +-------------------+   +-----------+
+
+

2.1 将 vpu-omxil 中的组件注册到 libomxil-bellagio

+
sudo apt install libomxil-bellagio-bin libomxil-bellagio0
+# 注册组件
+omxregister-bellagio -v /usr/lib/omxil/
+
+

使用 omxregister-bellagio 生成注册文件,默认路径为 ~/.omxregister

+
2.1.1 RevyOS/Debian 注册组件
+

th1520-vpu 利用了 debian 在 usr/lib/riscv64-linux-gnu/libomxil-bellagio0 安装之后 +触发自动注册行为 结果如下

+
cat /var/lib/libomxil-bellagio0/registry
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.H2.video.encoder.so
+ ==> OMX.hantro.H2.video.encoder ==> OMX.hantro.H2.video.encoder.avc:OMX.hantro.H2.video.encoder.hevc:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.VC8000D.image.decoder.so
+ ==> OMX.hantro.VC8000D.image.decoder ==> OMX.hantro.VC8000D.image.decoder.jpeg:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.H2.image.encoder.so
+ ==> OMX.hantro.H2.image.encoder ==> OMX.hantro.H2.image.encoder.jpeg:
+/usr/lib/riscv64-linux-gnu/libomxil-bellagio0/libOMX.hantro.VC8000D.video.decoder.so
+ ==> OMX.hantro.VC8000D.video.decoder ==> OMX.hantro.VC8000D.video.decoder.mpeg4:OMX.hantro.VC8000D.video.decoder.avc:OMX.hantro.VC8000D.video.decoder.avs:OMX.hantro.VC8000D.video.decoder.h263:OMX.hantro.VC8000D.video.decoder.wmv:OMX.hantro.VC8000D.video.decoder.vp6:OMX.hantro.VC8000D.video.decoder.vp8:OMX.hantro.VC8000D.video.decoder.jpeg:OMX.hantro.VC8000D.video.decoder.hevc:OMX.hantro.VC8000D.video.decoder.vp9:OMX.hantro.VC8000D.video.decoder.avs2:
+
+

2.2 调整 gstomx.conf 的设置

+

调整 gstomx.conf 的设置以使解码器 omxh264dec 调用正确的组件,具体请查看针对 gst-omx 的补丁

+

gst-omx-01-add-libomxil-config.patch

+

3. 添加 dmabuf 补丁

+

请查看 PTG 提供的针对 gst-omx 的 dmabuf 补丁 +gst-omx-02-set-dec-out-port-dmabuf.patch

+

4. GStreamer 解码初步测试

+
sudo apt install gstreamer1.0-omx-generic gstreamer1.0-omx-bellagio-config gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-gl gstreamer1.0-plugins-good gstreamer1.0-tools
+
+# 1 基本解码
+gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fakesink  sync=false
+# 2 在终端中显示 fps
+# 参考:https://stackoverflow.com/questions/73948308
+gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fpsdisplaysink video-sink=fakesink  text-overlay=false sync=false -v 2>&1
+
+

fakesink会把前面的视频流全部吞掉,不输出画面(因而不会在 video-sink 这一环节损失性能),但是结合fpsdisplaysink可以读取到解码的速度。正常日志如下:

+
Setting pipeline to PAUSED ...[DBGT]
+vc8kdec compiled without trace support (ENABLE_DBGT_TRACE switch not enabled)
+Pipeline is PREROLLING ...
+Redistribute latency...
+OMX  ! decoder_get_parameter OMX_ErrorNoMore (2)
+Pipeline is PREROLLED ...
+Setting pipeline to PLAYING ...
+New clock: GstSystemClockRedistribute latency...
+0:01:39.5 / 0:01:49.4 (90.9 %)
+
+

【TIP】如果有 [omxh264dec-omxh264dec0: Could not initialize supporting library.](https://gist.github.com/Sakura286/015fae6792e160268db7ad8a697dd2df) 等字样的报错,可以安装gst-omxlibomxil-bellagiolibc6相关的 debug-symbol 包,使用 gdb 启动上述命令进行调试。调试时,先断DWLInit,然后再断open,具体看是打开哪个地方的时候出错了。

+

RevyOS 适配记录

+

RevyOS 适配过程中对于初始化动态库失败找到了如下三种原因:

+
    +
  1. 编译 vpu-omxil 时使用的工具链与当前系统不兼容
  2. +
  3. 未使用omxregister-bellagio注册 vpu-omxil
  4. +
  5. 未调整 /dev 目录下 hantrodec vc8000 vidmem 等设备的权限
  6. +
+

B. 选用合适的 GStreamer video-sink

+

video-sink 是视频流在整个 GStreamer pipeline 中的最后一步,其作用一般是将视频流输出到屏幕上。 +前文中fakesink只是测试解码器是否正常工作的特殊 video-sink可选的 video-sink非常多,常见的有 autovideosinkximagesinkxvimagesinkfbdevsinkwaylandsinkglimagesinkgtkglsink等,它们各在不同的插件包里,需要酌情安装:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
video-sink所属包名
waylandsinkgstreamer1.0-plugins-bad
fbdevsinkgstreamer1.0-plugins-bad
autovideosinkgstreamer1.0-plugins-good
gtkglsinkgstreamer1.0-plugins-good
ximagesink | xvimagesinkgstreamer1.0-plugins-base
glimagesinkgstreamer1.0-plugins-base | gstreamer1.0-gl
+

【TIP】使用 gst-inspect-1.0 <video-sink-name> 来查看对应 video-sink 可用的选项 +【TIP】添加 --gst-debug-level=<lv> 来获得更多的输出日志,其中 <lv> 代表了从 1 到 6,啰嗦程度从低到高,建议在等级 4 及以下,否则日志会非常长 +请尝试不同的 video-sink ,并尝试不同的插件参数,以及给予不同的环境变量,直至找到可以流畅硬解 H264 的那一个。

+

RevyOS 适配记录

+
    +
  • **waylandsink**:由于现在(20230720)RevyOS 采用了 Xfce 桌面,不可能支持 Wayland,故 waylandsink从原理上无法使用
  • +
  • **fbdevsink****ximagesink**:无法使用
  • +
  • **xvimagesink**:通过流水线图以及日志可以确定,playbin 或 autovideosink 会自动调用 xvimagesink,使用 perf 分析后可以发现,使用xvimagesink 不可避免地会进行大量的 memcpy 操作,严重降低解码性能;该问题在获得PTG的 dmabuf 补丁后依然存在,故无法使用
  • +
  • **gtkglsink**GTK3 不支持 EGL on X11,而 RevyOS 目前基于 x11,且只支持 EGL,故无法使用
  • +
+

剩下的只有glimagesink,根据 Running and debugging GStreamer Applications,并观察其他使用到 glimagesink 的例子,可以猜测需要明确指定环境变量 GST_GL_APIGST_GL_PLATFORM +由于 RevyOS 使用了 gles2+egl 的组合,使用如下的命令,成功硬解。

+
GST_GL_API=gles2 GST_GL_PLATFORM=egl gst-launch-1.0 filesrc location=<test.mp4> ! qtdemux !  h264parse ! omxh264dec  ! videoconvert ! fpsdisplaysink video-sink=glimagesink sync=false
+
+

然而 GStreamer 被播放器调用时是无法通过环境变量来传递参数的,所以构建 gst-plugins-base 时应当传递额外的 meson 编译参数:

+
-Dgl_api=[\'gles2\'] -Dgl_platform=[\'egl\']
+
+

C. 播放器支持

+

GStreamer 的 pipeline 没有问题之后,就需要使播放器支持。不同播放器会使用到不同的 video-sink,同样对 gstreamer 有着不同程度的依赖。 +适配播放器时,最重要的工作便是①使播放器适配已验证的 video-sink,或者②使 gstreamer pipeline 支持播放器指定的 video-sink,此次 RevyOS 适配过程采用了①方案。

+
                +-------------------------------------------+
+                |    +------------+       +------------+    |   +--------+
+video stream----+--->| omxh264dec +------>| video-sink +----+-->| player |
+                |    +------------+       +------------+    |   +--------+
+                |                GStreamer                  |
+                +-------------------------------------------+
+
+

RevyOS 适配记录

+

根据 https://gstreamer.freedesktop.org/apps/ 进行简单的排查

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
是否可用是否更新应用名备注
GnashFlash 播放器
GEntransDebian 未收录
20230226Kaffeine❌ 需要大量 KDE 相关组件
✔️ 存在于riscv64 仓库
❌ 在 Debian amd64 Gnome 上,播放窗口与控制窗口分离,且默认调用了 VLC 进行播放
LcdgriloDebian 未收录
✔️20230218Parole✔️ For XFCE
❓ 不支持 Wayland,仅支持 x11
✔️ Debian amd64 Gnome 验证通过
✔️ 存在于riscv64 仓库
SongbirdDebian 未收录
SnappyDebian 未收录
Totem需要 GTK3,然而 GTK3 不支持 EGL on X11
+

最初选择的播放器是 Totem,但是发现 Totem 无法指定除了 gtkglsink 以外的 video-sink,且由于 RevyOS 不支持 gtkglsink,所以支持 Totem 播放器的难度较大。 +对支持 GStreamer 的播放器进行排查后发现了 Parole , Parole 由 GObject 编写,与常见的面向对象编程略有区别。寻找其构建 parole_gst 对象时的方法 parole_gst_constructed,将 video-sink 属性设置为前文已验证的 glimagesink,补丁:

+

parole-01-add-glimagesink-support.patch

+

至此,粗略的适配工作完成。

+

总结:RevyOS 适配工作

+
    +
  1. 编译驱动模块至内核,设置启动加载,设置设备权限
  2. +
  3. 将 PTG 提供的 omxil 二进制动态库文件打包为 th1520-vpu
  4. +
  5. 修改 th1520-vpu 的依赖,使其依赖 gst-omx 、libomxil-bellagio 等包
  6. +
  7. 设置了一些 postinstall 操作,例如使用 omxregister-bellagio 注册组件等
  8. +
  9. 修改 gst-omx
  10. +
  11. 增加 config 中对 vpu-omxil 组件的支持
  12. +
  13. 应用 dmabuf 补丁
  14. +
  15. 增加对 h265 vp9 的支持
  16. +
  17. 修改 gst-base 编译时的 gl 支持,限制为 gles2+egl
  18. +
  19. 修改 parole 以支持 glimagesink
  20. +
+

本文所用资源

+

补丁集合:

+

https://gist.github.com/Sakura286/26777ea8204c1819885e093806a4f7ca

+

PTG omxil 库

+

https://drive.google.com/file/d/1pYgCVI7WltfpskltJ-RqzVUCEC21FS56

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/zh/benchmark/Chromium\351\261\274\347\274\270GPU\346\265\213\350\257\225/index.html" "b/zh/benchmark/Chromium\351\261\274\347\274\270GPU\346\265\213\350\257\225/index.html" new file mode 100644 index 0000000..6bb7617 --- /dev/null +++ "b/zh/benchmark/Chromium\351\261\274\347\274\270GPU\346\265\213\350\257\225/index.html" @@ -0,0 +1,1193 @@ + + + + + + + + + + + + + + + + + + Chromium WebGL 测试 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Chromium WebGL 测试

+

测试网站地址:https://webglsamples.org/aquarium/aquarium.html

+

直接打开即可,左侧数字是渲染的鱼的数量,数量越多越占性能

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/benchmark/coremark/index.html b/zh/benchmark/coremark/index.html new file mode 100644 index 0000000..85f675f --- /dev/null +++ b/zh/benchmark/coremark/index.html @@ -0,0 +1,1525 @@ + + + + + + + + + + + + + + + + + + + + + + coremark - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

coremark

+

摘要

+

CoreMark是一个综合基准,用于测量嵌入式系统中使用的中央处理器(CPU)的性能。它是在2009由eembc的shay gal-on开发的,旨在成为一个行业标准,取代过时的dehrystone基准。代码用C编写,包含以下算法:列表处理(增删改查和排序)、矩阵操作(公共矩阵操作)、状态机(确定输入流是否包含有效数字)和CRC。用户可以自由的下载Coremark,并移植到自己的平台上运行,随后就可以看到分数。

+

测试项介绍

+

文件介绍

+
├── barebones    --移植到裸机环境下需要修改的目录
+│   ├── core_portme.c       --移植的目标平台配置信息
+│   ├── core_portme.h       --计时以及板级初始化实现
+│   ├── core_portme.mak     --该子目录的makefile
+│   ├── cvt.c
+│   └── ee_printf.c         --打印函数串口发送实现
+├── core_list_join.c    --列表操作程序
+├── core_main.c         --主程序
+├── coremark.h          --项目配置与数据结构的定义头文件
+├── coremark.md5        
+├── core_matrix.c       --矩阵运算程序
+├── core_state.c        --状态机控制程序
+├── core_util.c         --CRC计算程序
+├── cygwin              --x86 cygwin和gcc 3.4(四核,双核和单核系统)的测试代码
+│   ├── core_portme.c
+│   ├── core_portme.h
+│   └── core_portme.mak
+├── freebsd             --以下同理,是在不同操作系统下的测试代码
+│   ├── ...
+├── LICENSE.md
+├── linux
+│   ├── ...
+├── linux64
+│   ├── ...
+├── macos
+│   ├── ...
+├── Makefile            
+├── README.md           --自述文件,CoreMark项目的基本介绍
+├── rtems
+│   ├── ...
+└── simple
+    ├── ...
+    └──
+
+

make 目标

+
    +
  • run - 默认目标,创建 run1.log 和 run2.log
  • +
  • run1.log - 用性能参数运行基准测试,并输出到 run1.log
  • +
  • run2.log - 用验证参数运行基准测试,并输出到 run2.log
  • +
  • run3.log - 用配置文件生成参数运行基准测试,并输出到 run3.log
  • +
  • compile - 编译基准测试可执行文件
  • +
  • link - 链接基准测试可执行文件
  • +
  • check - 测试可能未修改的源文件的 MD5
  • +
  • clean - 清理临时文件
  • +
+

编译/使用

+

根据 README 说法,只需要在 coremark 文件夹下执行 make 即可进行编译与测试。测试结果会出现在 Results 文件夹中,其中 run1.log 是测试结果。

+

测试计划

+

coremark 总体测试时间较短。 +计划同时测试 10 次取平均数值。

+

操作步骤

+
$ git clone https://github.com/eembc/coremark.git
+$ cd coremark
+$ make
+
+

测试结果

+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 12915
+Total time (secs): 12.915000
+Iterations/Sec   : 8517.228029
+Iterations       : 110000
+Compiler version : GCC13.1.0
+Compiler flags   : -O2 -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+            (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x33ff
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 8517.228029 / GCC13.1.0 -O2 -DPERFORMANCE_RUN=1  -lrt / Heap
+
+
+

GCC 10.4 + xtheadc

+
make XCFLAGS="-march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm"
+
+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 15129
+Total time (secs): 15.129000
+Iterations/Sec   : 13219.644392
+Iterations       : 200000
+Compiler version : GCC10.4.0
+Compiler flags   : -O2 -march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+                        (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x4983
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 13219.644392 / GCC10.4.0 -O2 -march=rv64gv0p7_zfh_xtheadc -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns  -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm -DPERFORMANCE_RUN=1  -lrt / Heap
+
+

GCC 13.1 + xthead matrix

+
make XCFLAGS="-march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -mno-thread-jumps"
+
+
2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 11897
+Total time (secs): 11.897000
+Iterations/Sec   : 9246.028411
+Iterations       : 110000
+Compiler version : GCC13.1.0
+Compiler flags   : -O2 -march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -DPERFORMANCE_RUN=1  -lrt
+Memory location  : Please put data memory location here
+            (e.g. code in flash, data on heap etc)
+seedcrc          : 0xe9f5
+[0]crclist       : 0xe714
+[0]crcmatrix     : 0x1fd7
+[0]crcstate      : 0x8e3a
+[0]crcfinal      : 0x33ff
+Correct operation validated. See README.md for run and reporting rules.
+CoreMark 1.0 : 9246.028411 / GCC13.1.0 -O2 -march=rv64imafd_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync -O3 -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns -fno-code-hoisting -DPERFORMANCE_RUN=1  -lrt / Heap
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/benchmark/glmark2/index.html b/zh/benchmark/glmark2/index.html new file mode 100644 index 0000000..72c5689 --- /dev/null +++ b/zh/benchmark/glmark2/index.html @@ -0,0 +1,1334 @@ + + + + + + + + + + + + + + + + + + + + + + glmark2 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

glmark2

+

glmark2 is an OpenGL 2.0 and ES 2.0 benchmark. +We will only use glmark2-es2 for relevant tests here . This is a testing tool for x11-glesv2.

+

This software package is already pre-installed in the system.

+

th1520 only support glmark-es2.

+

Pre-steps

+

If you need perfect performance, put your device into performance mode before you start, here's how to do it.

+

Please execute the following commands in the terminal. This command requires a root account.

+
echo performance >  /sys/devices/system/cpu/cpufreq/policy0/scaling_governor 
+
+cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
+
+

After the execution is completed, you will see a series of numbers, such as "1848000".

+

Start operation

+

Open a terminal and enter glmark2-es2. This test allows the use of non-root accounts.

+

After entering the command, a new window will appear on your desktop with an active screen.

+

After the test is completed, the additional activity screen will disappear and the score will be output in the terminal in the form of "glmark2 Score: xxx".

+

For example:

+
debian@lpi4a:~/Desktop$ glmark2-es2
+=======================================================
+    glmark2 2021.12
+=======================================================
+    OpenGL Information
+    GL_VENDOR:      Imagination Technologies
+    GL_RENDERER:    PowerVR B-Series BXM-4-64
+    GL_VERSION:     OpenGL ES 3.2 build 1.17@6210866
+    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=8
+    Surface Size:   800x600 windowed
+=======================================================
+[build] use-vbo=false: FPS: 513 FrameTime: 1.949 ms
+[build] use-vbo=true: FPS: 1367 FrameTime: 0.732 ms
+[texture] texture-filter=nearest: FPS: 1449 FrameTime: 0.690 ms
+[texture] texture-filter=linear: FPS: 1454 FrameTime: 0.688 ms
+[texture] texture-filter=mipmap: FPS: 1453 FrameTime: 0.688 ms
+[shading] shading=gouraud: FPS: 1172 FrameTime: 0.853 ms
+[shading] shading=blinn-phong-inf: FPS: 1180 FrameTime: 0.847 ms
+[shading] shading=phong: FPS: 1002 FrameTime: 0.998 ms
+[shading] shading=cel: FPS: 979 FrameTime: 1.021 ms
+[bump] bump-render=high-poly: FPS: 700 FrameTime: 1.429 ms
+[bump] bump-render=normals: FPS: 1354 FrameTime: 0.739 ms
+[bump] bump-render=height: FPS: 1320 FrameTime: 0.758 ms
+[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1059 FrameTime: 0.944 ms
+[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 381 FrameTime: 2.625 ms
+[pulsar] light=false:quads=5:texture=false: FPS: 1484 FrameTime: 0.674 ms
+[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 349 FrameTime: 2.865 ms
+[desktop] effect=shadow:windows=4: FPS: 736 FrameTime: 1.359 ms
+[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 161 FrameTime: 6.211 ms
+[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 173 FrameTime: 5.780 ms
+[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 242 FrameTime: 4.132 ms
+[ideas] speed=duration: FPS: 593 FrameTime: 1.686 ms
+[jellyfish] <default>: FPS: 572 FrameTime: 1.748 ms
+[terrain] <default>: FPS: 42 FrameTime: 23.810 ms
+[shadow] <default>: FPS: 619 FrameTime: 1.616 ms
+[refract] <default>: FPS: 82 FrameTime: 12.195 ms
+[conditionals] fragment-steps=0:vertex-steps=0: FPS: 1539 FrameTime: 0.650 ms
+[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1238 FrameTime: 0.808 ms
+[conditionals] fragment-steps=0:vertex-steps=5: FPS: 1535 FrameTime: 0.651 ms
+[function] fragment-complexity=low:fragment-steps=5: FPS: 1411 FrameTime: 0.709 ms
+[function] fragment-complexity=medium:fragment-steps=5: FPS: 1050 FrameTime: 0.952 ms
+[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1376 FrameTime: 0.727 ms
+[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1394 FrameTime: 0.717 ms
+[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1379 FrameTime: 0.725 ms
+=======================================================
+                                  glmark2 Score: 950 
+=======================================================
+
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/benchmark/images/chromium_webgl_1.png b/zh/benchmark/images/chromium_webgl_1.png new file mode 100644 index 0000000..379bfeb Binary files /dev/null and b/zh/benchmark/images/chromium_webgl_1.png differ diff --git a/zh/benchmark/lmbench/index.html b/zh/benchmark/lmbench/index.html new file mode 100644 index 0000000..659cfa3 --- /dev/null +++ b/zh/benchmark/lmbench/index.html @@ -0,0 +1,1601 @@ + + + + + + + + + + + + + + + + + + + + + + lmbench - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

lmbench for Lpi4A

+

软件版本

+
+

lmbench for revyOS

+
+

测试说明

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
带宽测评工具反应时间测评工具其他
读取缓存文件上下文切换\
拷贝内存网络:连接的建立,管道,TCP,UDP 和RPC hot potato\
读内存文件系统的建立和删除\
写内存进程创建处理器时钟比率计算
管道信号处理\
TCP上层的系统调用\
\内存读入反应时间\
+

测试准备

+

下载测试工具:

+
git clone https://github.com/revyos/lmbench3.git
+
+
+

该版本为已为 RevyOS 移植版本。

+
+

在开始测试前,需要先安装依赖:

+
sudo apt install gcc make libntirpc-dev -y
+
+

测试执行

+

执行命令进行编译,配置,并测试

+
cd lmbench3
+cd src
+make results
+
+

编译完成后会有以下选项提示需要设置:

+

以下不需要更改的项目直接回车,会自动设置默认值。

+

MULTIPLE COPIES [default 1]: 设置同时运行 lmbench 的份数,份数多会使 lmbench 运行缓慢,默认是 1,这里设置为默认值 1。

+
=====================================================================
+
+If you are running on an MP machine and you want to try running
+multiple copies of lmbench in parallel, you can specify how many here.
+
+Using this option will make the benchmark run 100x slower (sorry).
+
+NOTE:  WARNING! This feature is experimental and many results are 
+    known to be incorrect or random!
+
+MULTIPLE COPIES [default 1]: 
+=====================================================================
+
+

Job placement selection [default 1]: 作业调度控制方法,默认值是 1,表示允许作业调度,这里设置为默认值。

+
=====================================================================
+
+Options to control job placement
+1) Allow scheduler to place jobs
+2) Assign each benchmark process with any attendent child processes
+   to its own processor
+3) Assign each benchmark process with any attendent child processes
+   to its own processor, except that it will be as far as possible
+   from other processes
+4) Assign each benchmark and attendent processes to their own
+   processors
+5) Assign each benchmark and attendent processes to their own
+   processors, except that they will be as far as possible from
+   each other and other processes
+6) Custom placement: you assign each benchmark process with attendent
+   child processes to processors
+7) Custom placement: you assign each benchmark and attendent
+   processes to processors
+
+Note: some benchmarks, such as bw_pipe, create attendent child
+processes for each benchmark process.  For example, bw_pipe
+needs a second process to send data down the pipe to be read
+by the benchmark process.  If you have three copies of the
+benchmark process running, then you actually have six processes;
+three attendent child processes sending data down the pipes and 
+three benchmark processes reading data and doing the measurements.
+
+Job placement selection [default 1]: 
+=====================================================================
+
+

Memory: 设置测试内存大小,默认是 $MB , 即为程序计算出来的最大可测试内存,也可以手动定义测试值,这里设置为这里使用默认值。

+
=====================================================================
+
+Several benchmarks operate on a range of memory.  This memory should be
+sized such that it is at least 4 times as big as the external cache[s]
+on your system.   It should be no more than 80% of your physical memory.
+
+The bigger the range, the more accurate the results, but larger sizes
+take somewhat longer to run the benchmark.
+
+MB [default 686]: 
+Checking to see if you have 686 MB; please wait for a moment...
+686MB OK
+686MB OK
+686MB OK
+Hang on, we are calculating your cache line size.
+OK, it looks like your cache line is 64 bytes.
+
+=====================================================================
+
+

SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: 要运行的测试集,包含 ALL/HARWARE/OS/DEVELOPMENT,默认选 all,这里选 all

+
=====================================================================
+
+lmbench measures a wide variety of system performance, and the full suite
+of benchmarks can take a long time on some platforms.  Consequently, we
+offer the capability to run only predefined subsets of benchmarks, one
+for operating system specific benchmarks and one for hardware specific
+benchmarks.  We also offer the option of running only selected benchmarks
+which is useful during operating system development.
+
+Please remember that if you intend to publish the results you either need
+to do a full run or one of the predefined OS or hardware subsets.
+
+SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: 
+=====================================================================
+
+

FASTMEM [default no]: 内存 latency 测试,如果跳过该测试,则设置为 yes,如果不跳过则设置为 no,默认是 no,这里设置为默认值。

+
=====================================================================
+
+This benchmark measures, by default, memory latency for a number of
+different strides.  That can take a long time and is most useful if you
+are trying to figure out your cache line size or if your cache line size
+is greater than 128 bytes.
+
+If you are planning on sending in these results, please don't do a fast
+run.
+
+Answering yes means that we measure memory latency with a 128 byte stride.  
+
+FASTMEM [default no]: 
+=====================================================================
+
+

SLOWFS [default no]: 文件系统 latency 测试,如果跳过值设置为 yes,不跳过设置为 no,默认 no,这里设置为默认值。

+
=====================================================================
+
+This benchmark measures, by default, file system latency.  That can
+take a long time on systems with old style file systems (i.e., UFS,
+FFS, etc.).  Linux' ext2fs and Sun's tmpfs are fast enough that this
+test is not painful.
+
+If you are planning on sending in these results, please don't do a fast
+run.
+
+If you want to skip the file system latency tests, answer "yes" below.
+
+SLOWFS [default no]: 
+=====================================================================
+
+

DISKS [default none]: 硬盘带宽和 seek time,需要设置测试硬盘的盘符,例如 /dev/sda,默认不测试(默认 none ),这里设置为默认值。

+
=====================================================================
+
+This benchmark can measure disk zone bandwidths and seek times.  These can
+be turned into whizzy graphs that pretty much tell you everything you might
+need to know about the performance of your disk.  
+
+This takes a while and requires read access to a disk drive.  
+Write is not measured, see disk.c to see how if you want to do so.
+
+If you want to skip the disk tests, hit return below.
+
+If you want to include disk tests, then specify the path to the disk
+device, such as /dev/sda.  For each disk that is readable, you'll be
+prompted for a one line description of the drive, i.e., 
+
+    Iomega IDE ZIP
+or
+    HP C3725S 2GB on 10MB/sec NCR SCSI bus
+
+DISKS [default none]: 
+=====================================================================
+
+

REMOTE [default none]: 网络测试,需要 2 台机器并设置 rsh,是测试机器能 rsh 访问另一台,默认不测试(默认 none ),这里设置为默认值。

+
=====================================================================
+
+If you are running on an idle network and there are other, identically
+configured systems, on the same wire (no gateway between you and them),
+and you have rsh access to them, then you should run the network part
+of the benchmarks to them.  Please specify any such systems as a space
+separated list such as: ether-host fddi-host hippi-host.
+
+REMOTE [default none]: 
+=====================================================================
+
+

Processor mhz [default 999 MHz, 1.0010 nanosec clock]: 测试 cpu,默认 $MHZ,即为程序判断出的频率,也可以根据情况自己设定,例如 3500,单位 MHz,这里设置为默认值。

+
=====================================================================
+
+Calculating mhz, please wait for a moment...
+I think your CPU mhz is 
+
+    999 MHz, 1.0010 nanosec clock
+
+but I am frequently wrong.  If that is the wrong Mhz, type in your
+best guess as to your processor speed.  It doesn't have to be exact,
+but if you know it is around 800, say 800.  
+
+Please note that some processors, such as the P4, have a core which
+is double-clocked, so on those processors the reported clock speed
+will be roughly double the advertised clock rate.  For example, a
+1.8GHz P4 may be reported as a 3592MHz processor.
+
+Processor mhz [default 999 MHz, 1.0010 nanosec clock]: 
+=====================================================================
+
+

FSDIR [default /usr/tmp]: 临时目录用来存放测试文件,可以自己设定,默认 /usr/tmp,这里设置为默认值。

+
=====================================================================
+
+We need a place to store a 686 Mbyte file as well as create and delete a
+large number of small files.  We default to /usr/tmp.  If /usr/tmp is a
+memory resident file system (i.e., tmpfs), pick a different place.
+Please specify a directory that has enough space and is a local file
+system.
+
+FSDIR [default /usr/tmp]: 
+=====================================================================
+
+

Status output file [default /dev/tty]: 测试输出信息文件存放目录,可以自己设定,默认 /dev/tty

+
=====================================================================
+
+lmbench outputs status information as it runs various benchmarks.
+By default this output is sent to /dev/tty, but you may redirect
+it to any file you wish (such as /dev/null...).
+
+Status output file [default /dev/tty]: 
+=====================================================================
+
+

Mail results [default yes]: 是否将测试结果邮件发出来,默认是 yes,这里设置为 no

+
=====================================================================
+
+There is a database of benchmark results that is shipped with new
+releases of lmbench.  Your results can be included in the database
+if you wish.  The more results the better, especially if they include
+remote networking.  If your results are interesting, i.e., for a new
+fast box, they may be made available on the lmbench web page, which is
+
+    http://www.bitmover.com/lmbench
+
+Mail results [default yes]: no
+OK, no results mailed.
+=====================================================================
+
+

以上项目设置完成后,开始自动执行测试。

+

测试结果

+

测试说明

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/benchmark/p7zip/index.html b/zh/benchmark/p7zip/index.html new file mode 100644 index 0000000..4455d2e --- /dev/null +++ b/zh/benchmark/p7zip/index.html @@ -0,0 +1,1304 @@ + + + + + + + + + + + + + + + + + + + + + + p7zip - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

p7zip

+

p7zip 测试是用于测试系统解压性能,通过数据直观评估性能,以下是运行 7pzip 测试的操作步骤

+

安装 7zip

+

首先需要在 RevyOS 中 安装 p7zip

+
debian@lpi4a:~/Desktop$ sudo apt update
+debian@lpi4a:~/Desktop$ sudo apt install p7zip-full
+
+

执行性能测试

+

进行 p7zip 测试需要在终端中输入以下命令来执行:

+
debian@lpi4a:~/Desktop$ 7z b
+
+

系统会开始进行测试然后输出性能数据。

+

通过以上步骤,可以在 RevyOS 上安装并测试 7zip 的性能。

+

以下是测试结果参考,使用镜像版本为RevyOS2023121016g版本

+
debian@lpi4a:~/Desktop$ 7z b
+
+7-Zip 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
+p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs LE)
+
+LE
+CPU Freq: - 64000000 64000000 - - - - - -
+
+RAM size:   15739 MB,  # CPU hardware threads:   4
+RAM usage:    882 MB,  # Benchmark threads:      4
+
+                       Compressing  |                  Decompressing
+Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
+         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS
+
+22:       3252   303   1045   3164  |      75268   394   1628   6422
+23:       3092   307   1025   3151  |      74514   399   1617   6447
+24:       3021   318   1022   3249  |      72017   398   1588   6322
+25:       2945   320   1050   3363  |      67801   395   1529   6034
+----------------------------------  | ------------------------------
+Avr:             312   1036   3232  |              396   1591   6306
+Tot:             354   1313   4769
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/benchmark/reboot/index.html b/zh/benchmark/reboot/index.html new file mode 100644 index 0000000..48123fe --- /dev/null +++ b/zh/benchmark/reboot/index.html @@ -0,0 +1,1325 @@ + + + + + + + + + + + + + + + + + + + + + + reboot-test - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

重启测试

+

摘要

+

使用脚本对整机进行重启测试。

+

测试项说明

+

测试机器重启会不会出现死机等问题。

+

测试计划

+

进行重启测试 500 次。

+

操作步骤

+

在 /lib/system/system 下创建名为 cycletest.service_ 重启脚本:

+
[Unit]
+Description=Reboots unit after 30s
+
+[Service]
+StandardOutput=syslog+console
+ExecStart=/bin/sh -c "\
+test -f /cycle-count || echo 0 > /cycle-count;\
+echo 'starting cycletest';\
+sleep 30;\
+expr `cat /cycle-count` + 1 > /cycle-count;\
+systemctl reboot;\
+"
+
+[Install]
+WantedBy=multi-user.target
+
+

后根据以下指令安装并开始测试:

+
systemctl daemon-reload
+systemctl enable cycletest.service (enable the service to start on reboot)
+systemctl start cycletest.service (start the service, should reboot in 30s)
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/benchmark/stream/index.html b/zh/benchmark/stream/index.html new file mode 100644 index 0000000..054e30b --- /dev/null +++ b/zh/benchmark/stream/index.html @@ -0,0 +1,1312 @@ + + + + + + + + + + + + + + + + + + + + + + stream - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Stream

+

使用说明

+

STREAM 基准测试是一个简单的综合基准测试程序,它测量可持续内存带宽(以 MB/s 为单位)和简单向量内核的相应计算速率。

+

stream 仅有单个文件,在进行测试时只需要对 stream.c 进行编译即可:

+
git clone <https://github.com/microseyuyu/STREAM.git>
+cd STREAM
+gcc -O3 -fopenmp -DN=2000000 -DNTIMES=10 stream.c -o stream
+export OMP_NUM_THREADS=8
+./stream
+
+

参数说明:

+
    +
  • -O3:指定最高编译优化级别,即 3。
  • +
  • fopenmp:启用OpenMP,适应多处理器环境,更能得到内存带宽实际最大值。开启后,程序默认运行线程为CPU线程数
  • +
+

DN=2000000:指定测试数组a[]、b[]、c[]的大小(Array size)。该值对测试结果影响较大(5.9版本默认值2000000,。若stream.c为5.10版本,参数名变为-DSTREAM_ARRAY_SIZE,默认值10000000)。注意:必须设置测试数组大小远大于CPU 最高级缓存(一般为L3 Cache)的大小,否则就是测试CPU缓存的吞吐性能,而非内存吞吐性能。 +- -DNTIMES=10:执行的次数,并从这些结果中选最优值。 +- OMP_NUM_THREADS=8 线程数量。

+

参考结果:

+
debian@lpi4a:~/Desktop/STREAM$ ./stream
+-------------------------------------------------------------
+STREAM version $Revision: 5.10 $
+-------------------------------------------------------------
+This system uses 8 bytes per array element.
+-------------------------------------------------------------
+*****  WARNING: ******
+      It appears that you set the preprocessor variable N when compiling this code.
+      This version of the code uses the preprocesor variable STREAM_ARRAY_SIZE to control the array size
+      Reverting to default value of STREAM_ARRAY_SIZE=10000000
+*****  WARNING: ******
+Array size = 10000000 (elements), Offset = 0 (elements)
+Memory per array = 76.3 MiB (= 0.1 GiB).
+Total memory required = 228.9 MiB (= 0.2 GiB).
+Each kernel will be executed 10 times.
+ The *best* time for each kernel (excluding the first iteration)
+ will be used to compute the reported bandwidth.
+-------------------------------------------------------------
+Number of Threads requested = 8
+Number of Threads counted = 8
+-------------------------------------------------------------
+Your clock granularity/precision appears to be 1 microseconds.
+Each test below will take on the order of 21622 microseconds.
+   (= 21622 clock ticks)
+Increase the size of the arrays if this shows that
+you are not getting at least 20 clock ticks per test.
+-------------------------------------------------------------
+WARNING -- The above is only a rough guideline.
+For best results, please be sure you know the
+precision of your system timer.
+-------------------------------------------------------------
+Function    Best Rate MB/s  Avg time     Min time     Max time
+Copy:            8364.2     0.019258     0.019129     0.019508
+Scale:           8291.0     0.019572     0.019298     0.020162
+Add:             6223.6     0.038835     0.038563     0.040011
+Triad:           6222.5     0.038776     0.038570     0.039470
+-------------------------------------------------------------
+Solution Validates: avg error less than 1.000000e-13 on all three arrays
+-------------------------------------------------------------
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/zh/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" "b/zh/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" new file mode 100644 index 0000000..e5a187a --- /dev/null +++ "b/zh/build/debian/Debian\350\275\257\344\273\266\345\214\205\346\236\204\345\273\272\346\265\201\347\250\213/index.html" @@ -0,0 +1,1383 @@ + + + + + + + + + + + + + + + + + + + + + + Debian 软件包构建流程 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Debian 软件包构建流程

+

宿主 debian

+
# qemu-user 下编译
+sudo apt update
+sudo apt install -y \
+    sbuild buildd qemu-system-misc qemu-user-static binfmt-support \
+    ca-certificates apt-transport-https devscripts mmdebstrap
+
+# native
+sudo apt install -y \
+    sbuild buildd ca-certificates apt-transport-https devscripts mmdebstrap
+
+# 修正宿主的debian-ports证书相关问题 现阶段可能不需要了
+wget https://mirror.sjtu.edu.cn/debian/pool/main/d/debian-ports-archive-keyring/debian-ports-archive-keyring_2023.02.01_all.deb
+sudo dpkg -i ./debian-ports-archive-keyring_2023.02.01_all.deb
+
+
+# sbuild 增加当前用户免root
+sudo sbuild-adduser $USER
+
+

创建打包环境

+

revyos-c910v

+
export SUFFIX=revyos-c910v-sbuild
+sudo sbuild-createchroot --debootstrap=debootstrap --arch=riscv64 \
+    --chroot-suffix=-$SUFFIX \
+    --keyring='' \
+    --no-deb-src \
+    --include=debian-ports-archive-keyring,ca-certificates,apt-transport-https,eatmydata \
+    --extra-repository="deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main contrib non-free" \
+    --extra-repository="deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-addons/ revyos-addons main" \
+    sid /srv/chroot/sid-riscv64-$SUFFIX \
+    https://mirror.iscas.ac.cn/revyos/revyos-base/
+
+# 修正环境相关问题
+sudo sed -i 's/deb http/deb [trusted=yes] http/g' /srv/chroot/sid-riscv64-$SUFFIX/etc/apt/sources.list
+sudo rm -rf /srv/chroot/sid-riscv64-$SUFFIX/var/lib/apt/lists/*
+echo "command-prefix=eatmydata" | sudo tee -a /etc/schroot/chroot.d/sid-riscv64-$SUFFIX-*
+
+# 调整source顺序 - 目的是同版本使用c910v仓库的
+# 编辑sources.list 确保以下顺序
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main contrib non-free
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-addons/ revyos-addons main
+deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-base/ sid main contrib non-free non-free-firmware
+
+

构建命令

+

revyos-c910v

+
sbuild --arch=riscv64 -d sid -c sid-riscv64-revyos-c910v-sbuild xxx.dsc
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/build/debian/enable_optimization_gcc/index.html b/zh/build/debian/enable_optimization_gcc/index.html new file mode 100644 index 0000000..4363e16 --- /dev/null +++ b/zh/build/debian/enable_optimization_gcc/index.html @@ -0,0 +1,1319 @@ + + + + + + + + + + + + + + + + + + + + + + 如何启用优化GCC - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

如何启用 T-Head 优化 GCC

+

实验性 feature 如果发现问题可以进行issue申报

+
# 增加优化源
+sudo sed -i '1ideb https://mirror.iscas.ac.cn/revyos/revyos-c910v/ revyos-c910v main' /etc/apt/sources.list
+# 更新软件
+sudo apt update && sudo apt upgrade -y
+# 安装 gcc-10/gcc-13
+sudo apt install -y build-essential gcc-13 g++-13
+# 重启避免其他问题
+sudo reboot
+
+

测试 gcc-10 (gcc10.4 启用xtheadc+v0p7)

+
gcc -v
+Using built-in specs.
+COLLECT_GCC=gcc
+COLLECT_LTO_WRAPPER=/usr/lib/gcc/riscv64-linux-gnu/10/lto-wrapper
+Target: riscv64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 10.4.0-8revyos2.3' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=riscv64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libsanitizer --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-multilib --with-arch=rv64gcv0p7_zfh_xtheadc --with-abi=lp64d --enable-checking=release --build=riscv64-linux-gnu --host=riscv64-linux-gnu --target=riscv64-linux-gnu
+Thread model: posix
+Supported LTO compression algorithms: zlib zstd
+gcc version 10.4.0 (Debian 10.4.0-8revyos2.3)
+
+

测试 gcc-13 (gcc13.2 启用xthead extension)

+
gcc-13 -v
+Using built-in specs.
+COLLECT_GCC=gcc-13
+COLLECT_LTO_WRAPPER=/usr/libexec/gcc/riscv64-linux-gnu/13/lto-wrapper
+Target: riscv64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 13.2.0-1revyos1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=riscv64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-multilib --with-arch=rv64gc_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadfmv_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync --with-abi=lp64d --enable-checking=release --build=riscv64-linux-gnu --host=riscv64-linux-gnu --target=riscv64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=16
+Thread model: posix
+Supported LTO compression algorithms: zlib zstd
+gcc version 13.2.0 (Debian 13.2.0-1revyos1)
+
+

gcc-10/gcc-13 区别

+

除了v0p7 其他优化都可以用 gcc-13 代替 gcc-10

+

后者的优化可以主线报问题 是已经主线化的功能

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/zh/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" "b/zh/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" new file mode 100644 index 0000000..6918b44 --- /dev/null +++ "b/zh/build/debian/\347\274\226\350\257\221\345\231\250\347\233\270\345\205\263\350\257\264\346\230\216/index.html" @@ -0,0 +1,1414 @@ + + + + + + + + + + + + + + + + + + + + + + 编译器相关说明 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

编译器相关说明

+

RevyOS 会预制相关优化编译器 基本支持rv64gc

+

常规扩展

+ + + + + + + + + + + + + + + + + + + + + + + +
支持的优化gcc-10gcc-13clang-17
Zfh
v0p7
+

THead 厂商扩展

+

xthead 当前版本 v2.2

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
支持的优化1gcc-102gcc-13.2clang-17
XTheadCmo
XTheadSync
XTheadBa
XTheadBb
XTheadBs
XTheadCondMov
XTheadMemIdx
XTheadMemPair
XTheadFMemIdx
XTheadMac
XTheadFmv
XTheadInt
XTHeadVdot3
+

注:

+
    +
  1. gcc-11/gcc-12/clang-14/clang15/clang16 xthead 扩展太少或无 所以未列出
  2. +
  3. gcc-10 使用 xtheadc 覆盖所有的扩展 gcc-10 使用了 thead-gcc 的源码
  4. +
  5. XTHeadVdot c910v/c920 不支持
  6. +
+

参考文档

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/zh/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" "b/zh/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" new file mode 100644 index 0000000..6948a29 --- /dev/null +++ "b/zh/build/other/gcc\347\274\226\350\257\221\350\275\257\344\273\266\350\257\264\346\230\216/index.html" @@ -0,0 +1,1318 @@ + + + + + + + + + + + + + + + + + + + + + + gcc 编译软件软件说明 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

gcc build programs 说明

+

安装gcc

+

首先确保安装gcc:

+
sudo apt update
+sudo apt install gcc
+
+

运行程序

+

下面以最简单的 'hello,world' 程序为例演示如何编译并运行:

+

编译以下内容并命名为 hello.c:

+
#include <stdio.h>
+
+int main()
+{
+        printf("hello, world\n");
+        return 0;
+}
+
+

编译并执行:

+
debian@lpi4a:~/test$ gcc -g hello.c -o hello
+
+debian@lpi4a:~/test$ ./hello
+hello, world
+
+
+

g++ build programs 说明

+

首先确保安装g++:

+
sudo apt update
+sudo apt install g++
+
+

运行程序

+

下面以最简单的 'hello,world' 程序为例演示如何编译并运行:

+

编译以下内容并命名为 hello.cpp:

+
#include <iostream>
+using namespace std;
+
+int main()
+{
+    cout << "Hello, World!\n";
+    return 0;
+}
+
+
+

编译并执行:

+
debian@lpi4a:~/test$ g++ -g hello.cpp -o hello
+debian@lpi4a:~/test$ ./hello
+Hello, World!
+
+

以上就是gcc/g++ 编译程序并运行的最简单实例,更复杂的应用案例可以参考相应的 +系统编程手册。

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/build/other/manuel_build_kernel/index.html b/zh/build/other/manuel_build_kernel/index.html new file mode 100644 index 0000000..7e73476 --- /dev/null +++ b/zh/build/other/manuel_build_kernel/index.html @@ -0,0 +1,1256 @@ + + + + + + + + + + + + + + + + + + + + + + 手动编译内核 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

手动编译内核

+

内核工具链下载地址:

+

https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1663142514282/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1-20220906.tar.gz

+

这里假设编译环境为 UbuntuDebian

+

安装依赖:

+
sudo apt install -y gdisk dosfstools g++-12-riscv64-linux-gnu build-essential libncurses-dev gawk flex bison openssl libssl-dev tree dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf device-tree-compiler
+
+

解压工具链(这里解压到/opt):

+
tar -xvf Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1-20220906.tar.gz -C /opt
+
+

设置环境变量,将工具链加入环境变量中(假设工具链放在/opt中):

+
export PATH="/opt/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1/bin:$PATH"
+export CROSS_COMPILE=riscv64-unknown-linux-gnu-
+export ARCH=riscv
+
+

使用git下载内核代码:

+
# 内核仓库
+git clone https://github.com/revyos/thead-kernel.git
+
+

编译内核:

+
# 创建安装目标目录
+mkdir rootfs && mkdir rootfs/boot
+
+# 目录创建完成后,目录结构应该看起来是这样:
+# .. << 当前工作路径
+# |-- rootfs
+#     |-- boot
+# |-- thead-kernel
+#     |-- ...
+
+# 进入内核代码目录,开始构建
+cd thead-kernel
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv revyos_defconfig
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv -j$(nproc)
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv -j$(nproc) dtbs
+sudo make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv INSTALL_MOD_PATH=../rootfs/ modules_install -j$(nproc)
+sudo make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv INSTALL_PATH=../rootfs/boot zinstall -j$(nproc)
+# 构建perf(如果需要的话)
+make CROSS_COMPILE=riscv64-unknown-linux-gnu- ARCH=riscv LDFLAGS=-static NO_LIBELF=1 NO_JVMTI=1 VF=1 -C tools/perf/
+sudo cp -v tools/perf/perf ../rootfs/sbin/perf-thead
+# 安装内核到安装目标目录
+sudo cp -v arch/riscv/boot/Image ../rootfs/boot/
+# 安装设备树到安装目标目录
+sudo cp -v arch/riscv/boot/dts/thead/light-lpi4a.dtb ../rootfs/boot/
+sudo cp -v arch/riscv/boot/dts/thead/light-lpi4a-dsi0-hdmi.dtb ../rootfs/boot/
+
+

之后只需要把rootfs中内容拷贝或覆盖到对应目录即可,注意内核Image和内核module目录一定要对应,不然会因缺失内核模块导致外设功能失效。

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/zh/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" "b/zh/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" new file mode 100644 index 0000000..7a331f6 --- /dev/null +++ "b/zh/build/other/thead-qemu\347\274\226\350\257\221\346\265\201\347\250\213/index.html" @@ -0,0 +1,1247 @@ + + + + + + + + + + + + + + + + + + + + + + T-Head QEMU 编译流程 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

T-Head QEMU 编译流程

+

C910V强制cpu指定补丁

+
From 5164bca5a4bcde4534dc1a9aa3a7f619719874cf Mon Sep 17 00:00:00 2001
+From: Han Gao <gaohan@iscas.ac.cn>
+Date: Sun, 23 Apr 2023 22:11:35 +0800
+Subject: [PATCH] qemu-user-riscv64 default cpu is c910v
+
+Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
+---
+ linux-user/riscv/target_elf.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/linux-user/riscv/target_elf.h b/linux-user/riscv/target_elf.h
+index 9dd65652ee45..3195cfa71408 100644
+--- a/linux-user/riscv/target_elf.h
++++ b/linux-user/riscv/target_elf.h
+@@ -9,7 +9,7 @@
+ #define RISCV_TARGET_ELF_H
+ static inline const char *cpu_get_model(uint32_t eflags)
+ {
+-    /* TYPE_RISCV_CPU_ANY */
+-    return "any";
++    /* TYPE_RISCV_CPU_C910V */
++    return "c910v";
+ }
+ #endif
+
+

编译流程

+
./configure \
+  --prefix=$HOME/qemu-install \
+  --static \
+  --target-list=riscv64-linux-user \
+  --disable-system \
+  --disable-pie \
+  --interp-prefix=/etc/qemu-binfmt/%M
+
+make -j20
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/zh/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" "b/zh/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" new file mode 100644 index 0000000..6be5457 --- /dev/null +++ "b/zh/build/\346\236\204\345\273\272\346\226\207\346\241\243/index.html" @@ -0,0 +1,1191 @@ + + + + + + + + + + + + + + + + + + 构建文档 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

构建文档

+

这里描述了 RevyOS 相关的构建文档

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/ahead/20230802/index.html b/zh/changelog/ahead/20230802/index.html new file mode 100644 index 0000000..0b446a5 --- /dev/null +++ b/zh/changelog/ahead/20230802/index.html @@ -0,0 +1,1278 @@ + + + + + + + + + + + + + + + + + + + + 20230802 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230802

+

测试版镜像

+

基于 lpi4a 20230614 版本 +增加 ahead 支持 混合新 20230820 改动

+

下载地址

+

https://mirror.iscas.ac.cn/revyos/extra/images/beagle/test/20230802/

+

其余参见

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20230412/index.html b/zh/changelog/lpi4a/20230412/index.html new file mode 100644 index 0000000..c420d06 --- /dev/null +++ b/zh/changelog/lpi4a/20230412/index.html @@ -0,0 +1,1376 @@ + + + + + + + + + + + + + + + + + + + + + + 20230412 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230412

+ +

系统版本

+

RevyOS 20230412 版本

+

桌面环境相关

+
    +
  • 默认桌面环境为xfce4桌面
  • +
  • 使用pulseaudio作为音频服务
  • +
+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • xfce4: 4.18
  • +
  • Debian GCC:13 (13-20230320-1)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • Go:1.19.8 (1.19.8-2)
  • +
  • Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-g7b352f5ac2ba)
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持 WIFI/BT 模块 RTL8723DS
  • +
+

系统服务

+
    +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 需要手动安装 wpasupplicant 才可连接无线网
  • +
  • xfce声音控制面板无法显示声音设备
  • +
  • 系统桌面不支持GPU硬件加速
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20230425/index.html b/zh/changelog/lpi4a/20230425/index.html new file mode 100644 index 0000000..c247b1b --- /dev/null +++ b/zh/changelog/lpi4a/20230425/index.html @@ -0,0 +1,1395 @@ + + + + + + + + + + + + + + + + + + + + + + 20230425 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230425

+ +

系统版本

+

RevyOS 20230425 版本

+

桌面环境相关

+
    +
  • 默认桌面环境为xfce4桌面
  • +
  • 使用pulseaudio作为音频服务
  • +
  • 使用wpasupplicant作为无线网络服务
  • +
+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • xfce4: 4.18
  • +
  • Debian GCC:13 (13-20230320-1)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • Go:1.19.8 (1.19.8-2)
  • +
  • Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-g7b352f5ac2ba)
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持WIFI/BT模块RTL8723DS
  • +
+

系统服务

+
    +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
+

已修复的问题

+
    +
  • xfce声音控制面板无法显示声音设备
  • +
  • 系统桌面不支持GPU硬件加速
  • +
  • 需要手动安装 wpasupplicant 才可连接无线网
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20230511/index.html b/zh/changelog/lpi4a/20230511/index.html new file mode 100644 index 0000000..6ce4c3e --- /dev/null +++ b/zh/changelog/lpi4a/20230511/index.html @@ -0,0 +1,1395 @@ + + + + + + + + + + + + + + + + + + + + + + 20230511 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230511

+ +

系统版本

+

RevyOS 20230511 版本

+

桌面环境相关

+

添加了gnome桌面支持

+
    +
  • 支持gnome 桌面
  • +
  • 支持xfce4 桌面
  • +
+

支持应用相关

+
    +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • GNOME: 42.4 (预装在 gnome版本)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
  • 未支持 chromium(计划推进中)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-gbb4691fe5572)
  • +
  • 打开了 iotop 相关选项
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持 HDMI 输出
  • +
  • 支持 WIFI/BT 模块RTL8723DS
  • +
  • 加入风扇调速功能,风扇转速随CPU温度调整
  • +
+

系统服务

+
    +
  • 添加了查询版本时间戳功能,在终端输入'cat /etc/revyos-release' 即可获取
  • +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 因 Wifi/BT 模块蓝牙部分存在硬件问题,系统暂时没有蓝牙支持
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
  • 不支持2K分辨率
  • +
+

已修复的问题

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20230614/index.html b/zh/changelog/lpi4a/20230614/index.html new file mode 100644 index 0000000..7c3a469 --- /dev/null +++ b/zh/changelog/lpi4a/20230614/index.html @@ -0,0 +1,1399 @@ + + + + + + + + + + + + + + + + + + + + + + 20230614 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230614

+ +

系统版本

+

RevyOS 20230614 版本

+

桌面环境相关

+

当前版本只提供xfce4桌面支持

+
    +
  • 支持xfce4 桌面
  • +
+

支持应用相关

+

提供了chromium支持

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Firefox:111.0 (111.0-1revyos1)
  • +
  • Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113 (5.10.113-gfac22a756532)
  • +
  • 打开exfat支持
  • +
  • 加入了HDMI音频支持
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

系统服务

+
    +
  • 添加了查询版本时间戳功能,在终端输入'cat /etc/revyos-release' 即可获取
  • +
  • 使用 network-manager 作为网络管理器
  • +
  • 预装 systemd-timesyncd 作为NTP服务,联网后可以自动同步时间
  • +
+

当前版本存在问题

+
    +
  • 不支持2K分辨率
  • +
  • 鼠标拖动滞后
  • +
+

已修复的问题

+
    +
  • 修复了WI-FI和蓝牙功能
  • +
  • 字符界面终端键盘输入的内容显示滞后
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20230810/index.html b/zh/changelog/lpi4a/20230810/index.html new file mode 100644 index 0000000..e25ee37 --- /dev/null +++ b/zh/changelog/lpi4a/20230810/index.html @@ -0,0 +1,1453 @@ + + + + + + + + + + + + + + + + + + + + + + 20230810 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230810

+

系统版本

+

RevyOS 20230810 版本

+

版本下载

+

RevyOS 20230810 lpi4a

+
    +
  • boot-20230810-222415.ext4
  • +
  • root-20230810-222415.ext4
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本需要刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本需要刷写
  • +
+

破坏性更新

+

重新设计了启动流程 所以需要重新刷写所有分区

+

更新之后启动遇到错误

+
Retrieving file: /dtbs/linux-image-5.10.113-lpi4a/<NULL>-light-c910.
+Skipping l0r for failure retrieving fdt
+Light LPI4A#
+
+遇见这种情况需要执行</br>
+env default -a -f;env save;reset
+
+

桌面环境相关

+

当前版本只提供xfce4桌面支持

+

支持应用相关

+
    +
  • LibreOffice:7.5.2 (7.5.2~rc2-1revyos1)
  • +
  • GIMP:2.10.34 (2.10.34-1)
  • +
  • VLC:3.0.18 (3.0.18-2)
  • +
  • Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • xfce4: 4.18 (预装在 xfce版本)
  • +
  • Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 未预装 firefox:114.0 (114.0-1revyos1)
  • +
  • 未预装 code-oss: 1.80.1 (1.80.1-1+electron23)
  • +
  • 未预装 Go:1.19.8 (1.19.8-2)
  • +
  • 未预装 Rust:1.65.0 (1.65.0+dfsg1-1~exp3)
  • +
  • 未预装 GCC:13 (13.1.0)
  • +
+

内核相关

+

内核 commit ID: #2023.08.10.02.31+c130cdb21

+
    +
  • 内核版本号:5.10.113 (2023.08.10.02.31+c130cdb21)
  • +
  • 加入对USB串口设备的支持
  • +
+

硬件相关

+
    +
  • CPU主频最高为1.84Ghz
  • +
  • 支持HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

系统服务

+
    +
  • 版本时间戳(/etc/revyos-release)- xfce 桌面: 20230810-222415
  • +
+

当前版本存在问题

+
    +
  • 不支持2K分辨率
  • +
  • 鼠标拖动滞后
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20230916/index.html b/zh/changelog/lpi4a/20230916/index.html new file mode 100644 index 0000000..6b59cab --- /dev/null +++ b/zh/changelog/lpi4a/20230916/index.html @@ -0,0 +1,1337 @@ + + + + + + + + + + + + + + + + + + + + + + 20230916 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20230916

+

系统版本

+

RevyOS 20230916 版本

+

版本下载

+

RevyOS 20230916 lpi4a

+
    +
  • boot-20230916-231502.ext4
  • +
  • root-20230916-231502.ext4
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本需要刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本需要刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

内核 commit ID

+
    +
  • +

    2023.09.11.06.54+b4d73b48a

    +
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20230916-231502
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:114.0 (114.0-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.66.0 (1.66.0+dfsg1-1~exp1)
  • +
  • 未预装 GCC:13 (13.1.0-1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2023.09.11.06.54+b4d73b48a
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 只开启了HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

存在问题

+
    +
  • 不支持2K分辨率
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20231026/index.html b/zh/changelog/lpi4a/20231026/index.html new file mode 100644 index 0000000..6ea9d4c --- /dev/null +++ b/zh/changelog/lpi4a/20231026/index.html @@ -0,0 +1,1420 @@ + + + + + + + + + + + + + + + + + + + + + + 20231026 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20231026

+

系统版本

+

RevyOS 20231026 版本

+

版本下载

+

RevyOS 20231026 lpi4a

+
    +
  • boot-20231026_181638.ext4.zst
  • +
  • root-20231026_181638.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:114.0 (114.0-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos1)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2 (3.11.2-1+b1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.66.0 (1.66.0+dfsg1-1~exp1)
  • +
  • 未预装 GCC:13 (13.1.0-1)
  • +
  • 支持 mpv:0.35.1
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 只开启了HDMI输出
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+
    +
  • 解决了HDMI音频爆音的问题
  • +
  • 添加了鼠标指针偏移的临时解决方案
  • +
+

存在问题

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20231210/index.html b/zh/changelog/lpi4a/20231210/index.html new file mode 100644 index 0000000..e502550 --- /dev/null +++ b/zh/changelog/lpi4a/20231210/index.html @@ -0,0 +1,1452 @@ + + + + + + + + + + + + + + + + + + + + + + 20231210 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20231210

+

系统版本

+

RevyOS 20231210 版本

+

版本下载

+

RevyOS 20231210 lpi4a

+
    +
  • boot-lpi4a-20231210_134926.ext4.zst
  • +
  • root-lpi4a-20231210_134926.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g8640db84 (Sep 21 2023 - 02:14:36 +0000)
  • +
+

内核 commit ID

+
    +
  • 2023.12.08.03.26+b8c5d3546
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20231210-134926
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2revyos1)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.4 (3.11.4-1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-4revyos1)
  • +
  • 支持 mpv:0.35.1
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2023.12.08.03.26+b8c5d3546
  • +
  • 升级DDK版本到1.17
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+
    +
  • 改善了在menu上鼠标移动有延迟的问题
  • +
+

存在问题

+
    +
  • WIFI/BT模块AIC8800的蓝牙功能暂不可用
  • +
  • AIC8800内核支持已经存在,但对应设备树和固件暂时没有
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20240202/index.html b/zh/changelog/lpi4a/20240202/index.html new file mode 100644 index 0000000..4c05c16 --- /dev/null +++ b/zh/changelog/lpi4a/20240202/index.html @@ -0,0 +1,1449 @@ + + + + + + + + + + + + + + + + + + + + + + 20240202 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20240202

+

系统版本

+

RevyOS 20240202 版本

+

版本下载

+

RevyOS 20240202 lpi4a

+
    +
  • boot-lpi4a-20240202_141632.ext4.zst
  • +
  • root-lpi4a-20240202_141632.ext4.zst
  • +
  • u-boot-with-spl-lpi4a-main.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g-main.bin 16g版本刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g69d7d3cd (Jan 31 2024 - 12:58:20 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g69d7d3cd (Jan 31 2024 - 12:58:20 +0000)
  • +
+

内核 commit ID

+
    +
  • lpi4a:#2024.01.31.14.11+384c5e9e2
  • +
  • ahead:#2023.12.08.03.31+62225503f
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20240202-141632
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.18 (3.0.18-2revyos1)
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.4 (3.11.4-1)
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-4revyos1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2024.01.31.14.11+384c5e9e2
  • +
  • 内核版本号:5.10.113-ahead #2024.01.31.14.11+384c5e9e2
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
+

已修复的问题

+

存在问题

+
    +
  • WIFI/BT模块RTL8723的蓝牙功能在重启/睡眠后不可用
  • +
  • AIC8800暂时不可用
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/changelog/lpi4a/20240601/index.html b/zh/changelog/lpi4a/20240601/index.html new file mode 100644 index 0000000..e271ffe --- /dev/null +++ b/zh/changelog/lpi4a/20240601/index.html @@ -0,0 +1,1348 @@ + + + + + + + + + + + + + + + + + + 20240202 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

20240202

+

系统版本

+

RevyOS 20240601 版本

+

版本下载

+

RevyOS 20240601 lpi4a

+
    +
  • boot-lpi4a-20240601_180941.ext4.zst
  • +
  • root-lpi4a-20240601_180941.ext4.zst
  • +
  • u-boot-with-spl-lpi4a.bin 8g版本刷写
  • +
  • u-boot-with-spl-lpi4a-16g.bin 16g版本刷写
  • +
  • sdcard-lpi4a-20240601_180941.img.zst SD卡刷写
  • +
+

SBI 时间戳

+
    +
  • U-Boot SPL 2020.01-g96627087 (May 29 2024 - 08:30:59 +0000)
  • +
+

u-boot 时间戳

+
    +
  • U-Boot 2020.01-g96627087 (May 29 2024 - 08:30:59 +0000)
  • +
+

内核 commit ID

+
    +
  • lpi4a:#2024.01.31.14.11+384c5e9e2
  • +
+

版本时间戳(/etc/revyos-release)

+
    +
  • XFCE桌面:20240601_180941
  • +
+

RevyOS 20240601 meles

+
    +
  • boot-meles-20240601_180943.ext4.zst
  • +
  • iw-single-line.bin
  • +
  • root-meles-20240601_180943.ext4.zst
  • +
  • sdcard-meles-20240601_180943.img.zst
  • +
  • u-boot-with-spl-meles-4g.bin
  • +
  • u-boot-with-spl-meles.bin
  • +
+

系统和桌面

+
    +
  • 支持DebianOS xfce4 桌面
  • +
+

硬件加速

+
    +
  • xfce4 桌面支持GPU加速和2D加速
  • +
+

支持应用

+
    +
  • LibreOffice:7.5.4~rc2-1
  • +
  • 支持 GIMP:2.10.34-1
  • +
  • 支持 VLC:3.0.21-1revyos1
  • +
  • 支持 Parole:4.18.0 (4.18.0-1revyos1)
  • +
  • 未预装 Firefox:118.0 (118.0.2-1revyos1)
  • +
  • 支持 Chromium:109.0 (109.0.5414.119-1revyos2)
  • +
  • 支持 xfce4: 4.18 (预装在 xfce版本)
  • +
  • 支持 Python3:3.11.2-1+b1
  • +
  • 支持 apt-get 安装源
  • +
  • 未预装 Go:1.19 (1.19~1+b1)
  • +
  • 未预装 Rust:1.70.0 (1.70.0+dfsg1-1)
  • +
  • 未预装 GCC:13 (13.2.0-23revyos1)
  • +
+

内核相关

+
    +
  • 内核版本号:5.10.113-lpi4a #2024.05.31.16.27+2dec14431
  • +
+

硬件相关

+
    +
  • CPU主频最高1.84Ghz
  • +
  • 支持单HDMI输出或者HDMI/DSI双输出
  • +
  • 支持2D加速
  • +
  • 支持WIFI/BT模块RTL8723DS,WI-FI和蓝牙功能都已启用
  • +
  • 支持风扇调速功能
  • +
  • 支持从sd卡启动
  • +
+

已修复的问题

+
    +
  • str部分已修复
  • +
+

存在问题

+
    +
  • std存在部分问题
  • +
  • WIFI/BT模块RTL8723的蓝牙功能在重启/睡眠后不可用
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git "a/zh/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" "b/zh/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" new file mode 100644 index 0000000..5b53c92 --- /dev/null +++ "b/zh/desktop/games/OpenTTD\346\270\270\346\210\217/index.html" @@ -0,0 +1,1278 @@ + + + + + + + + + + + + + + + + + + + + + + OpenTTD 游戏 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

OpenTTD

+

状态: +可以运行,软解图形

+

资料: +https://github.com/OpenTTD/OpenTTD/blob/master/COMPILING.md +https://salsa.debian.org/openttd-team/openttd/-/blob/master/debian/control

+

步骤

+
# 安装依赖
+sudo apt install libsdl2-dev zlib1g-dev libpng-dev libfreetype-dev libfontconfig-dev libicu-dev liblzo2-dev liblzma-dev libfluidsynth-dev libopengl-dev grfcodec openttd-opengfx cmake
+
+# 下载代码&编译
+git clone https://github.com/OpenTTD/OpenTTD.git
+cd OpenTTD
+mkdir build
+cd build
+cmake ..
+make
+
+# 运行
+./openttd
+
+

图形和音频资源文件通过游戏内功能下载,支持中文

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/desktop/games/images/openttd_1.png b/zh/desktop/games/images/openttd_1.png new file mode 100644 index 0000000..76b400e Binary files /dev/null and b/zh/desktop/games/images/openttd_1.png differ diff --git a/zh/desktop/games/images/yquake2_1.png b/zh/desktop/games/images/yquake2_1.png new file mode 100644 index 0000000..fba9a2e Binary files /dev/null and b/zh/desktop/games/images/yquake2_1.png differ diff --git a/zh/desktop/games/yquake2/index.html b/zh/desktop/games/yquake2/index.html new file mode 100644 index 0000000..06569c9 --- /dev/null +++ b/zh/desktop/games/yquake2/index.html @@ -0,0 +1,1297 @@ + + + + + + + + + + + + + + + + + + + + + + yquake2 游戏 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

yquake2

+

状态: +可以运行,支持GLES加速

+

资料: +https://github.com/yquake2/yquake2/blob/master/doc/020_installation.md +https://github.com/yquake2/yquake2/blob/master/doc/030_configuration.md

+

安装步骤

+
# 安装依赖
+sudo apt install build-essential libgl1-mesa-dev libsdl2-dev libopenal-dev libcurl4-openssl-dev
+
+# 下载代码&编译
+git clone https://github.com/yquake2/yquake2.git
+mkdir build
+cd build
+cmake ..
+make
+
+# 运行
+#(需要准备好游戏原始资源文件夹baseq2)
+cd ..
+cd release
+cp -r ~/baseq2 .
+./quake2
+
+

展示

+

需要将原始游戏资源文件夹baseq2放到和quake2程序同一个目录中(Steam版可用)

+

分辨率和图形加速选项在游戏内设置菜单修改,不修改默认是软渲染,硬渲染设置请改为“OpenGL ES3”(参见下图)

+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/desktop/install/index.html b/zh/desktop/install/index.html new file mode 100644 index 0000000..15f981a --- /dev/null +++ b/zh/desktop/install/index.html @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + 安装 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

包安装

+

在RevyOS中安装包只需要在 terminal 中输入

+
apt install + 包名
+
+

即可安装

+

以下以安装 git作为演示

+
debian@lpi4a:~$ sudo apt install git
+[sudo] password for debian: 
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+The following additional packages will be installed:
+  git-man liberror-perl patch
+Suggested packages:
+  gettext-base git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui
+  gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
+The following NEW packages will be installed:
+  git git-man liberror-perl patch
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Need to get 8605 kB of archives.
+After this operation, 39.4 MB of additional disk space will be used.
+Do you want to continue? [Y/n] y
+Get:1 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 liberror-perl all 0.17029-2 [29.0 kB]
+Get:2 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 git-man all 1:2.40.1-1 [2072 kB]
+Get:3 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 git riscv64 1:2.40.1-1 [6390 kB]
+Get:4 https://mirror.iscas.ac.cn/revyos/revyos-base sid/main riscv64 patch riscv64 2.7.6-7+b1 [114 kB]
+Fetched 8605 kB in 1s (6656 kB/s)
+Selecting previously unselected package liberror-perl.
+(Reading database ... 75688 files and directories currently installed.)
+Preparing to unpack .../liberror-perl_0.17029-2_all.deb ...
+Unpacking liberror-perl (0.17029-2) ...
+Selecting previously unselected package git-man.
+Preparing to unpack .../git-man_1%3a2.40.1-1_all.deb ...
+Unpacking git-man (1:2.40.1-1) ...
+Selecting previously unselected package git.
+Preparing to unpack .../git_1%3a2.40.1-1_riscv64.deb ...
+Unpacking git (1:2.40.1-1) ...
+Selecting previously unselected package patch.
+Preparing to unpack .../patch_2.7.6-7+b1_riscv64.deb ...
+Unpacking patch (2.7.6-7+b1) ...
+Setting up liberror-perl (0.17029-2) ...
+Setting up patch (2.7.6-7+b1) ...
+Setting up git-man (1:2.40.1-1) ...
+Setting up git (1:2.40.1-1) ...
+Processing triggers for man-db (2.11.2-2) ...
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/desktop/revyos-use-docker/index.html b/zh/desktop/revyos-use-docker/index.html new file mode 100644 index 0000000..3b01179 --- /dev/null +++ b/zh/desktop/revyos-use-docker/index.html @@ -0,0 +1,1237 @@ + + + + + + + + + + + + + + + + + + + + + + docker - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

安装 golang

+
sudo apt install golang-go
+
+

测试安装是否成功:

+
debian@lpi4a:~$ go version
+go version go1.19.8 linux/riscv64
+
+

安装 riscv64 docker

+

源中已有 riscv64 的docker安装包,名为 docker.io,可以直接使用:

+
sudo apt install docker.io
+
+

测试 docker

+
sudo docker pull riscv64/debian:unstable
+
+

issues

+

如果使用命令sudo docker pull riscv64/debian:unstable 出现以下错误:

+
debian@lpi4a:~$ docker pull riscv64/debian:unstable
+Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=riscv64%2Fdebian&tag=unstable": dial unix /var/run/docker.sock: connect: permission denied
+
+
+

需要执行以下命令进行修复:

+
# 1. 
+sudo chmod 666 /var/run/docker.sock
+
+# 2.
+sudo systemctl start docker
+
+# 3.
+sudo docker run hello-world
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/desktop/software/gimp/index.html b/zh/desktop/software/gimp/index.html new file mode 100644 index 0000000..e428faf --- /dev/null +++ b/zh/desktop/software/gimp/index.html @@ -0,0 +1,1281 @@ + + + + + + + + + + + + + + + + + + + + + + GIMP 图像编辑工具 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

GIMP图像处理软件

+

状态:可以运行

+

官方资料页:https://docs.gimp.org/2.10/en/

+

软件说明

+

GIMP 是一个多平台工具,用于创建和编辑各种图像。 GIMP 是 GNU Image Manipulation Program 的首字母缩写。 GIMP 有很多功能。它可以用作简单的绘画程序、专家级的照片修饰程序、创建数字艺术的工具、在线批处理系统、批量生产的图像渲染器、图像格式转换器等。 GIMP 是可扩展和可扩展的。它旨在通过插件和扩展来增强以执行任何操作。先进的脚本界面允许从最简单的任务到最复杂的图像处理程序的所有内容都可以轻松编写脚本。

+

使用说明

+

GIMP是 RevyOS 预安装图形处理软件,如想使用 GIMP,在terminal中输入

+
gimp
+
+

在等待资源加载后就会弹出 GIMP 主界面

+

+

使用功能参考官方资料页

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/desktop/software/iBus/index.html b/zh/desktop/software/iBus/index.html new file mode 100644 index 0000000..4c36636 --- /dev/null +++ b/zh/desktop/software/iBus/index.html @@ -0,0 +1,1269 @@ + + + + + + + + + + + + + + + + + + + + + + iBus 输入法 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

iBus 输入法

+

状态:可以运行

+

资料:https://wiki.debian.org/I18n/ibus

+

步骤(没有使用im-config)

+
sudo apt install ibus ibus-libpinyin
+sudo reboot
+
+

重启后需要手动将中文输入法添加到输入选项中:

+

托盘图标->右击->Preference +

+

点击选项卡Input Method->Add,打开下图窗口 +

+

点击Chinese->Intelligent Pinyin->Add +

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/zh/index.html b/zh/index.html new file mode 100644 index 0000000..3ae0fc1 --- /dev/null +++ b/zh/index.html @@ -0,0 +1,1381 @@ + + + + + + + + + + + + + + + + + + + + 主页 - RevyOS Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

RevyOS

+

简介

+

RevyOS是由RuyiSDK团队的RevyOS小队支持开发的一款针对T-Head芯片生态的Debian优化定制发行版。

+

RevyOS 围绕 c910v/c920/c906fdv/c908 等芯片提供了完整而全面的适配和优化支持,默认集成支持 RVV0.7.1 和 XThead 的 GCC 工具链,并搭载使用 RVV0.7.1 指令集优化过的 glibc 和 thead-kernel。

+

目前,RevyOS 在办公、网页浏览、观看视频等方面已经能满足用户的基本使用需求。

+

基于上述定制和优化的 RevyOS,在 Lichee Pi 4A,beaglev-ahead,milkv-pioneer 等硬件平台上,能够提供优秀的性能和极佳的体验。

+

镜像下载及刷写

+

RevyOS 的用户版镜像目前在 ISCAS(中国科学院软件研究所) / felix 芬兰源 开源镜像站进行更新。

+

如您想获取 RevyOS 最新版镜像请选择对应板子获取对应的U-Boot/boo分区/root分区文件:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
支持设备LicheePi 4A/vala(荔枝派4a/评估板a)LicheePi Cluster 4Aahead(beaglev-ahead)Milk-V PioneerMilk-V Meles
最新镜像lpi4a 20240601LicheePi Cluster 4A 20240601ahead 20240529pioneer20240327meles20240601
更新日志lpi4a 20240529lc4a 20240529ahead 20240529pioneer20240327Meles20240601
+

RevyOS 0529版本U-boot文件下载:链接

+

镜像刷写请参考:镜像刷写教程

+

在完成镜像刷写后用户在登录界面,输入用户名 debian,密码 debian 就可以登录进入系统了。

+

如何启用 T-Head 优化 GCC

+

详见这篇文档如何启用优化GCC

+

更新日志

+

镜像版本更新后我们会公布当前版本镜像支持内容,如您想查看镜像支持内容请点击RevyOS版本更新日志后选择您所需要的版本进行查看。

+

issue相关

+

如果您在使用过程中遇到问题,可以进行issue申报

+

用户文档

+

在本DOCS中,我们拥有相关的使用构建与适配文档以及测试文档方便让用户对部分内容进行参考,完善的文档支持加快了用户对于系统的上手时间。

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file