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可以设置为qtmuxmatroskamuxmp4muxavimuxflvmux不同的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/xrawformat=(string)NV12,width=1920,height=1080,framerate=(fraction)30/1MUXER可以设置为qtmux、matroskamux、mp4mux、avimux或flvmux。
E X T E N S I O N 是根据 m u x e r 类型指定的文件名扩展名。请参阅视频编码部分来选择正确的 EXTENSION是根据muxer类型指定的文件名扩展名。 请参阅视频编码部分来选择正确的 IMX Linux 用户手册 --- 2

基于linux5.15.5的IMX 参考手册 --- 4

IMX Linux 用户手册 — 3

IMX Linux 用户手册 — 3

IMX Linux 用户手册 --- 1

IMX Linux 用户手册 --- 1