IMX Linux 用户手册 --- 2
Posted chocolate2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IMX Linux 用户手册 --- 2相关的知识,希望对你有一定的参考价值。
IMX Linux 用户手册 — 2
第5章 启用单独仿真
可以在i.MX 6DualLite SABRE-SD和i.MX 6DualLite SABRE-AI板上启用单独仿真。这是通过使用
引导加载程序构建过程中的特定U-Boot配置。
当在i.MX 6DualLite SABRE平台上启用此单独仿真时,i.MX 6DualLite的功能将更改为以下内容:
•对于单独仿真,使用6DualLite DTB并将MaxCPU=1添加到U-Boot的bootcmd。
•DDR RAM上的32位数据总线。
•i.MX 6DualLite SABRE-AI的1 GB RAM。
•512 MB RAM,用于i.MX 6DualLite SABRE-SD。
要在i.MX 6DualLite SABRE-SD卡上为i.MX 6Solo构建U-Boot,请使用以下命令:
MACHINE=imx6solosabresd bitbake u-boot-imx
要在i.MX 6DualLite SABRE-AI卡上为i.MX 6Solo构建U-Boot,请使用以下命令:
MACHINE=imx6solosabreauto bitbake u-boot-imx
第六章 电源管理
i.MX电源管理使用标准的Linux接口。有关标准命令的信息,请查看标准的Linux电源文档。i.MX Linux®参考手册(IMXLXRM)包含了关于可用的电源模式的信息,以及在电源管理部分的其他i.MX特定信息。
在i.MX单板上,主要有三种电源管理技术:暂停和恢复命令、CPU调频和总线调频。它们将在下面的部分中进行描述。
6.1挂起和恢复
可以通过设置Linux标准状态“/sys/power/state”来改变电源状态。将电源状态设置为挂起模式的命令为echo mem > /sys/power/state。值mem可以被替换为任何有效的电源状态,如i.MX Linux®参考手册(IMXLXRM)所描述的。
使用下列方法之一从挂起模式唤醒系统。
•调试UART可以设置为唤醒源:
echo enabled > /sys/class/tty/ttymxc0/power/wakeup
请注意:ttylp0代表i.m x8quadxplus和i.m x8quadmax, ttylp0代表i.m x8dxl。
•RTC可以通过以下命令进入和退出暂停模式:
/unit_test/SRTC/rtcwakeup.out -d rtc0 -m mem -s 10
该命令表示休眠10秒。该命令自动将电源状态设置为mem模式。
6.2 CPU调频
在Linux内核中使用伸缩调控器来设置CPU频率。CPU频率可以根据系统负载自动伸缩,可以响应ACPI事件,也可以由用户空间程序手动伸缩。有关调控器的更多信息,请阅读www.kernel.org/doc/Documentation/cpu-freq/governors.txt中的governors.txt。
下面是一些更常用的命令:
这些命令返回系统信息和当前设置。
•内核预先配置为只支持某些频率。目前支持的频率列表可从以下网站获得:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
•获得可用的缩放调节器:
cat /sys/devices/system/cpu/*/cpufreq/scaling_available_governors
•查看当前CPU频率:
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_cur_freq
频率的显示取决于调控器设置。
•检查最大频率:
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_max_freq
•检查最小频率:
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_min_freq
这些命令设置固定的CPU频率:
•使用最大频率:
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
•用当前频率作为恒频:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
•以下两个命令将缩放调节器设置为指定的频率,如果该频率是受支持的。如果不支持该频率,则使用最近的支持频率:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
6.3总线频率缩放
该版本不支持i.MX 7ULP EVK上的总线频率伸缩特性。
本版本不支持i.MX 8QuadXPlus和i.MX 8QuadMax上的总线频率缩放功能。
系统自动调整总线频率(DDR, AHB等),以达到最佳性能,基于活跃的设备。
总线频率驱动默认为开启状态。支持的DDR频率如下:
•DDR正常频率—U-Boot默认频率
•音频DDR频率:i.MX 6Quad、i.MX 6DualLite和i.MX 6SoloX的音频频率为50 MHz, i.MX 7Dual的音频频率为100 MHz。
•低功耗空闲DDR频率- 24 MHz
在i.MX 8M板上:
•LPDDR4配置“Audio DDR频率”为25 MHz,低功耗空闲DDR频率为25 MHz。
•DDR4的音频DDR频率为166 MHz,低功耗空闲DDR频率为166 MHz。
如果需要设置低功耗的DDR空闲频率,请确保所有需要高频率DDR的设备都已关闭。大多数驱动程序进行主动时钟管理,但可以使用某些命令来避免等待超时发生:
echo 1 > /sys/class/graphics/fb0/blank ->设置为空白显示(如果多个显示活动,可能需要将fb1、fb2等设置为空白)。
ifconfig eth0 down ->禁用以太模块。在i.MX 6SoloX、i.MX 7Dual、i.MX 6UltraLite和i.MX 6UltraLiteLite上也应禁用以太网1 (eth1)。
i.MX 8M Plus需要一些额外的步骤来启用USB运行时PM:
echo auto > /sys/bus/platform/devices/32f10100.usb/38100000.dwc3/power/control
echo auto > /sys/bus/platform/devices/32f10108.usb/38200000.dwc3/power/control
echo auto > /sys/bus/platform/devices/32f10108.usb/38200000.dwc3/xhci-hcd.1.auto/power/control
在大多数系统上,执行以上两个命令后,芯片进入低功耗IDLE模式。
要操作总线频率,使用以下命令来获得所需的结果:
cat /sys/bus/platform/drivers/imx_busfreq/soc\\:busfreq/enable ->显示总线频率状态。
echo 0 > /sys/bus/platform/drivers/imx_busfreq/soc\\:busfreq/enable ->禁用总线频率。
echo 1 > /sys/bus/platform/drivers/imx_busfreq/soc\\:busfreq/enable ->使能总线频率。
i.MX Linux®参考手册(IMXLXRM)在DVFS的章节中有更多关于总线频率的信息。
第七章 多媒体
i.MX提供音频优化的软件编解码器、解析器、硬件加速单元和相关插件。i.MX提供了GStreamer插件来访问i.MX多媒体库和硬件加速单元。本章提供各种多媒体用例和GStreamer命令行示例。
7.1 i.MX多媒体包
由于许可证的限制,i.MX多媒体软件包可以在两个地方找到:
•标准封装:由NXP semiconductors mirror提供。
•限制访问包:在nxp.com上提供控制访问。
具体操作请参见《i.MX发布说明(IMXLXRN)》。
7.2构建有限的访问包
将受限访问包放置在下载目录中,并读取每个包中的自述文件。
例如imxcodec-microsoft-$version.tar.gz包中的“README-microsoft”。
7.3多媒体用例
GStreamer是Linux操作系统中默认的多媒体框架。下面的小节提供了用于执行指定的特定功能的GStreamer命令示例。下表给出了本文档常用功能的参考方法和具体命令。
一种选择是将它们设置为环境变量,如下面的示例所示。在系统上使用该命令的完整路径。
export GSTL=gst-launch-1.0
export PLAYBIN=playbin
export GPLAY=gplay-1.0
export GSTINSPECT=gst-inspect-1.0
在本文档中,变量通常用于描述具有多个选项的命令参数。这些变量的格式为
d
e
s
c
r
i
p
t
i
o
n
,其中描述了可以使用的值的类型。可能的选项可以在
i
.
M
X
L
i
n
u
x
®
发布说明
(
I
M
X
L
X
R
N
)
关于多媒体的章节中找到
i
.
M
X
特定的选项,或者在“
g
s
t
r
e
a
m
e
r
.
f
r
e
e
d
e
s
k
t
o
p
.
o
r
g
/
”社区选项。
G
S
t
r
e
a
m
e
r
命令行通过各种插件传输输入。命令行中的每个插件部分都有一个感叹号
(
!
)
。每个插件都可以有自己的参数,它们出现在命令行中插件名称之后和下一个感叹号
(
!
)
之前。使用
description,其中描述了可以使用的值的类型。可能的选项可以在i.MX Linux®发布说明(IMXLXRN)关于多媒体的章节中找到i.MX特定的选项,或者在“gstreamer.freedesktop.org/”社区选项。 GStreamer命令行通过各种插件传输输入。命令行中的每个插件部分都有一个感叹号(!)。每个插件都可以有自己的参数,它们出现在命令行中插件名称之后和下一个感叹号(!)之前。使用
description,其中描述了可以使用的值的类型。可能的选项可以在i.MXLinuxR◯发布说明(IMXLXRN)关于多媒体的章节中找到i.MX特定的选项,或者在“gstreamer.freedesktop.org/”社区选项。GStreamer命令行通过各种插件传输输入。命令行中的每个插件部分都有一个感叹号(!)。每个插件都可以有自己的参数,它们出现在命令行中插件名称之后和下一个感叹号(!)之前。使用GSTINSPECT $plugin获取关于插件的信息以及它可以使用的参数。
方括号([])表示命令行的可选部分。
7.3.1回放用例
回放用例包括以下几个方面:
•音频回放
•视频回放
•音频/视频文件播放
•其他播放方法
7.3.1.1音频回放
audio-only播放命令使用如下格式:
$GSTL filesrc location=$clip_name [typefind=true] ! [$id3parse] ! queue ! $audio_parser_plugins ! $audio_decoder_plugin ! $audio_sink_plugin
如果要播放的文件包含ID3头,请使用ID3解析器。如果文件没有ID3头,则没有任何效果。
这个例子在音频插孔输出中播放MP3文件。
$GSTL filesrc location=test.mp3 ! id3demux ! queue ! mpegaudioparse ! beepdec ! pulsesink
7.3.1.2视频回放
$GSTL filesrc location=test.video typefind=true
! $capsfilter ! $demuxer_plugin ! queue max-size-time=0
! $video_decoder_plugin ! $video_sink_plugin
这是一个H.264编码格式的MP4容器视频文件播放的例子:
$GSTL filesrc location=test.mp4 typefind=true
! video/quicktime ! aiurdemux ! queue max-size-time=0
! v4l2h264dec ! autovideosink
7.3.1.3播放音频/视频文件
这是一个使用音频播放视频文件的命令示例:
$GSTL filesrc location=test_file typefind=true ! $capsfilter
! $demuxer_plugin name=demux demux.
! queue max-size-buffers=0 max-size-time=0
! $video_decoder_plugin ! $video_sink_plugin demux.
! queue max-size-buffers=0 max-size-time=0
! $audio_decoder_plugin !
$audio_sink_plugin
这是一个AVI文件的例子:
$GSTL filesrc location=test.avi typefind=true ! video/x-msvideo
! aiurdemux name=demux demux.
! queue max-size-buffers=0 max-size-time=0
! $video_decoder_plugin ! autovideosink demux.
! queue max-size-buffers=0 max-size-time=0 ! beepdec
! alsasink
对于没有VPU硬件的平台,
v
i
d
e
o
d
e
c
o
d
e
r
p
l
u
g
i
n
可以是像
a
v
d
e
c
h
264
这样的软件解码器插件。
7.3.1.4
多路音频播放开启“脉冲音频”后,多路音频回放设置请参见“脉冲音频输入
/
输出设置”。
7.3.1.5
其他回放方式使用
video_decoder_plugin可以是像avdec_h264这样的软件解码器插件。 7.3.1.4多路音频播放 开启“脉冲音频”后,多路音频回放设置请参见“脉冲音频输入/输出设置”。 7.3.1.5其他回放方式 使用
videodecoderplugin可以是像avdech264这样的软件解码器插件。7.3.1.4多路音频播放开启“脉冲音频”后,多路音频回放设置请参见“脉冲音频输入/输出设置”。7.3.1.5其他回放方式使用PLAYBIN插件或i.MX $GPLAY命令行播放器播放媒体文件。
$GSTL $PLAYBIN uri=file:///mnt/sdcard/test.avi
$GPLAY /mnt/sdcard/test.avi
7.3.1.6视频多显示器回放
视频回放到多个显示器可以支持一个视频接收器插件。用于多显示模式的视频接收器不能在i.MX 8系列soc上工作。
这个用例要求系统以多显示模式启动(双/三/四,支持的显示数量由SOC和BSP决定)。配置系统以该方式启动的方法请参见《i.MX移植指南(IMXBSPPG)》。
7.3.1.6.1在不同的显示器上播放不同的视频
在不同的显示器上播放两个视频的命令行可能是这样的:
$GSTL
P
L
A
Y
B
I
N
u
r
i
=
f
i
l
e
:
/
/
/
PLAYBIN uri=file:///
PLAYBINuri=file:///file1
P
L
A
Y
B
I
N
u
r
i
=
f
i
l
e
:
/
/
/
PLAYBIN uri=file:///
PLAYBINuri=file:///file2 video-sink=“overlaysink display-master=false display-slave=true”
7.3.1.6.2将同一视频路由到不同的显示器
一个视频可以在多个显示器上显示,使用如下命令:
$GSTL
P
L
A
Y
B
I
N
u
r
i
=
f
i
l
e
:
/
/
/
PLAYBIN uri=file:///
PLAYBINuri=file:///filename video-sink=“overlaysink display-slave=true”
7.3.1.6.3多个视频叠加
overlaysink插件支持将多个视频合成在一起,并将它们呈现在同一个显示器上。结果可能如下图所示。
gst-launch-1.0 playbin uri=file://$FILE1
video-sink="overlaysink overlay-width=512 overlay-height=384"
playbin uri=file://$FILE2 flags=0x41
video-sink="overlaysink overlay-left=512 overlay-width=512 overlay-height=384"
playbin uri=file://$FILE3 flags=0x41
video-sink="overlaysink overlay-top=384 overlay-width=512 overlay-height=384"
playbin uri=file://$FILE4 flags=0x41
video-sink="overlaysink overlay-left=512 overlay-top=384 overlay-width=512 overlay-height=384"
playbin uri=file://$FILE5 flags=0x41
video-sink="overlaysink overlay-left=352 overlay-top=264 overlay-width=320 overlay-height=240 zorder=1"
7.3.2音频编码
这里有一些MP3编码的例子。
$GSTL filesrc location=test.wav ! wavparse ! lamemp3enc
! filesink location=output.mp3
7.3.3视频编码
下面的命令提供了一些关于如何使用由VPU硬件加速的插件来编码一些媒体文件的建议(尽管它们只能在带有VPU的SoC上工作)。
VPU视频编码只能在支持VPU编码器的SoC上工作。
对于i.MX 6,使用以下命令:
$GSTL filesrc location=test.yuv
! videoparse format=2 witdh=$WIDTH height=$HEIGHT framerate=30/1
! vpuenc_xxx ! $MUXER ! filesink location=$output
对于i.MX 8M Mini/8M Plus,使用以下命令:
$GSTL filesrc location=test.yuv
! rawvideoparse format=2 witdh=$WIDTH height=$HEIGHT framerate=30/1 colorimetry=bt709
! v4l2xxxenc ! $MUXER ! filesink location=$output
•目标编码器编解码器类型可以是:
- imx6的MPEG4, H.263, H.264和MJPEG
- H.264, i.MX 8M Mini的VP8
- H.264, HEVC用于i.MX 8M Plus
•vpuenc_xxx可以是:
—i.MX 6的vpuenc_mpeg4、vpuenc_h263、vpuenc_h264、vpuenc_jpeg
•v4l2xxxenc可以是:
—i.MX 8M Mini的v4l2h264enc和v4l2vp8enc - i.MX 8M Plus的v4l2h264enc和v4l2h265enc
•VPU编码器是i.MX 8QuadMax和8QuadXPlus上的v4l2h264enc。
• M U X E R 可以设置为 q t m u x 、 m a t r o s k a m u x 、 m p 4 m u x 、 a v i m u x 或 f l v m u x 。•不同的 m u x e r 支持不同的编码编解码器类型。使用 MUXER可以设置为qtmux、matroskamux、mp4mux、avimux或flvmux。 •不同的muxer支持不同的编码编解码器类型。使用 MUXER可以设置为qtmux、matroskamux、mp4mux、avimux或flvmux。•不同的muxer支持不同的编码编解码器类型。使用GSTINSPECT和$MUXER查看要使用的MUXER的功能。
7.3.4代码转换
转码是将一个文件从一种视频编码转换为另一种视频编码。
VPU视频编码只能在支持VPU编码器的SoC上工作。
对于i.MX 6 family with VPU,使用如下命令:
$GSTL filesrc location=$filename typefind=true ! $capsfilter ! aiurdemux
! vpudec ! imxvideoconvert_ipu ! $CAPS1 ! vpuenc_xxx ! matroskamux ! filesink location=720p.mkv
capsfilter是容器的mime类型。其中CAPS1为目标视频分辨率,vpuenc_xxx为vpuenc_mpeg4、vpuenc_h263、vpuenc_h264、vpuenc_jpeg。
例如:
gst-launch-1.0 filesrc location=$FILE.mp4 typefind=true ! video/quicktime ! aiurdemux ! vpudec ! imxvideoconvert_ipu ! video/x-raw,format=NV12,width=1280,height=720 ! vpuenc_h264 ! [h264parse] ! matroskamux ! filesink location=$FILE.mkv
对于i.MX 8QuadMax/8QuadXPlus,使用以下命令:
gst-launch-1.0 filesrc location=$FILE.mp4 typefind=true ! video/quicktime ! aiurdemux ! v4l2h264dec ! queue ! imxvideoconvert_g2d ! queue ! videoconvert ! queue ! v4l2h264enc ! [h264parse] ! matroskamux ! filesink location=$FILE.mkv
对于i.MX 8M Mini/8M Plus,使用以下命令:
gst-launch-1.0 filesrc location=$FILE.mp4 typefind=true ! video/quicktime ! aiurdemux ! v4l2h264dec ! queue ! v4l2h264enc ! [h264parse] ! matroskamux ! filesink location=$FILE.mkv
7.3.5录音
在i.m x8m Plus上的EARC录音。
PCM格式:
gst-launch-1.0 -v alsasrc device=sysdefault:CARD=imxaudioxcvr ! audio/x-raw,format=S16LE,channels=2,rate=48000 ! playsink audio-sink="alsasink device=sysdefault:CARD=wm8960audio buffer-time=40000"
压缩格式:
gst-launch-1.0 alsasrc device=sysdefault:CARD=imxaudioxcvr ! audio/x-raw,format=S16LE,channels=2,rate=48000 ! queue max-size-buffers=0 max-size-bytes=0 max-size-time=0 ! spdifdemux ! decodebin ! playsink audio-sink="alsasink device=sysdefault:CARD=wm8960audio buffer-time=40000 sync=false"
以下示例演示如何录制MP3或WMA音频。
•MP3录音
$GSTL pulsesrc num-buffers=$NUMBER blocksize=$SIZE ! lamemp3enc ! filesink location=output.mp3
7.3.6录像
视频录制是使用摄像头输入完成的,所以这个活动只适用于有摄像头的平台。不同的相机需要设置不同的捕捉模式,以达到特殊的分辨率。参见i.MX BSP移植指南(IMXBSPPG)第14章“使用CSI支持摄像机”和第15章“使用MIPI-CSI支持摄像机”。
VPU视频编码只能在支持VPU编码器的SoC上工作。imxv4l2src仅在i.MX 6和i.MX 7上支持。i. MX 8支持开源插件v4l2src作为相机源。
可以使用$GSTINSPECT命令获取关于codec属性的更多信息。
录音的一个例子可能是这样的:
$GSTL $V4L2SRC device=$DEVICE num-buffers=300 ! $INPUT_CAPS ! queue ! $video_encoder_plugin ! [h264parse] ! $MUXER ! filesink location=output.$EXTENSION
•根据SoC,
V
4
L
2
S
R
C
可以是
i
m
x
v
4
l
2
s
r
c
,也可以是
v
4
l
2
s
r
c
。•根据系统视频输入设备,
V4L2SRC可以是imxv4l2src,也可以是v4l2src。 •根据系统视频输入设备,
V4L2SRC可以是imxv4l2src,也可以是v4l2src。•根据系统视频输入设备,DEVICE可以设置为/dev/video, /dev/video0,或/dev/video1。
•
I
N
P
U
T
C
A
P
S
应该设置为
v
i
d
e
o
/
x
−
r
a
w
,
f
o
r
m
a
t
=
(
s
t
r
i
n
g
)
N
V
12
,
w
i
d
t
h
=
1920
,
h
e
i
g
h
t
=
1080
,
f
r
a
m
e
r
a
t
e
=
(
f
r
a
c
t
i
o
n
)
30
/
1
。•
INPUT_CAPS应该设置为video/x-raw,format=(string)NV12,width=1920,height=1080,framerate=(fraction)30/1。 •
INPUTCAPS应该设置为video/x−raw,format=(string)NV12,width=1920,height=1080,framerate=(fraction)30/1。•MUXER可以设置为qtmux、matroskamux、mp4mux、avimux或flvmux。
•
E
X
T
E
N
S
I
O
N
是根据
m
u
x
e
r
类型指定的文件名扩展名。请参阅视频编码部分来选择正确的
EXTENSION是根据muxer类型指定的文件名扩展名。 请参阅视频编码部分来选择正确的
IMX Linux 用户手册 --- 2