团结 Embedded Linux 应用使用 SDL2 处理输入以及与窗口交互,并使用 EGL、OpenGLES3(或 Vulkan)进行渲染,运行时需要 SDL 动态加载 EGL 驱动文件和 GLES 驱动文件(或 Vulkan 驱动文件)。
在 Embedded Linux 上运行 Tuanjie 需要安装 Wayland Compositor。本文档假设/建议使用 Weston 作为 Wayland Compositor ,也可稍作修改用于其他 Wayland Compositor。
安装及配置 Weston 可查阅链接。
运行 Weston 后,Weston 会将 Wayland socket 导出到环境变量 XDG_RUNTIME_DIR
所关联的目录中。
注:因不同的车机设备及环境略有差异,具体操作请以实际为准,本示例仅供参考。
chmod +x ./*
。可以在 Weston 中选择使用 IVI-shell 或默认的 Desktop-shell 来配置,以运行团结。
如果使用 Desktop-shell,请执行以下操作:
XDG_RUNTIME_DIR
是否已设置为正确的目录。如果没有,请使用正确的目录(Weston 安装的默认目录为 /run/user/1000/
)。运行 export XDG_RUNTIME_DIR=<dir>
命令;示例参考:
chmod +x *
export XDG_RUNTIME_DIR=/tmp WAYLAND_DISPLAY=/tmp/wayland-0
./playername monitor 1
如果使用 IVI-shell,请执行以下操作:
通过环境变量 UNITY_IVI_SURFACE_IDS
设置 Tuanjie Player 需要使用的 IVI Surface IDs。如果未设置,Tuanjie Player 将默认使用 ID 4711
及更高版本作为新创建的 Surface(例如,Tuanjie Display 1 将使用 4711,Tuanjie Display 2 将使用 4712,以此类推);
注意:环境变量是一个以逗号分隔的 ID 列表。例如,export UNITY_IVI_SURFACE_IDS=100,200,300
表示 Tuanjie Display 1 使用 ID 100,Tuanjie Display 2 使用 ID 200,以此类推;
如果只使用单个显示输出,则单个 ID 即可。例如,export UNITY_IVI_SURFACE_IDS=100
;
验证环境变量 XDG_RUNTIME_DIR
是否已设置为正确的目录。如果没有,请使用正确的目录(Weston 安装的默认目录为 /run/user/1000/
)。运行 export XDG_RUNTIME_DIR=<dir>
命令;
运行 Tuanjie Player;
按照以下步骤为 Tuanjie 设置 IVI surface(例如,将 Weston 设置为 fullscreen map surface):
LayerManagerControl create layer 0 <display-width> <display-height>
LayerManagerControl set screen 0 render order 0
LayerManagerControl set layer 0 render order <surface-id>
LayerManagerControl set surface <surface-id> source region 0 0 <display-width> <display-height>
LayerManagerControl set surface <surface-id> destination region 0 0 <display-width> <display-height>
LayerManagerControl set layer 0 visibility 1
LayerManagerControl set surface <surface-id> visibility 1
至此,Tuanjie Player 才会正确显示在屏幕上。
注意: LayerManagerControl
命令中需要设置分辨率 <display-width> <display-height>
的部分,建议和 Tuanjie 工程项目中的分辨率设置保持一致,实际渲染分辨率结果为 LayerManagerControl
中设置的分辨率。
示例参考:
//设置 Tuanjie 的 surface id,例如此处设置为 123
export UNITY_IVI_SURFACE_IDS=123
//按照Desktop-shell的方式拉起 Tuanjie(执行完这一步之后屏幕中看不到 Tuanjie 为正常现象)
//若无法拉起,可以查看日志里 surface id 是否已被其他进程占用,重新设置一个 surface id 即可
chmod +x *
export XDG_RUNTIME_DIR=/tmp WAYLAND_DISPLAY=/tmp/wayland-0
./playername monitor 1
//配置IVI-surface, 这里的 <surface-id> 是第一步中设置的 surface id
//该部分命令需要在执行 ./playername monitor 1 的 shell 窗口执行,否则会报错
LayerManagerControl create layer 0 <display-width> <display-height>
LayerManagerControl set screen 0 render order 0
LayerManagerControl set layer 0 render order <surface-id>
LayerManagerControl set surface <surface-id> source region 0 0 <display-width> <display-height>
LayerManagerControl set surface <surface-id> destination region 0 0 <display-width> <display-height>
LayerManagerControl set layer 0 visibility 1
LayerManagerControl set surface <surface-id> visibility 1
//至此才能在屏幕上看到团结
默认情况下,团结会创建与物理显示器尺寸相同的表面。如果您想要使用物理显示器以外的表面,可以将环境变量UNITY_IVI_EXPORT_DISPLAYS
配置为<宽>x<高>@<刷新率>,<宽>x<高>@<刷新率>……
。
例如希望在第一个display上使用1024x768的表面,在第二个display上使用1920x1080的表面:
export UNITY_IVI_EXPORT_DISPLAYS=1024x768@60,1920x1080@60
默认刷新率是60,因此可以省略@60
:
export UNITY_IVI_EXPORT_DISPLAYS=1024x768,1920x1080
运行EmbeddedLinux应用时,可以通过传入参数来改变程序的运行状态和方式,所有的命令行参数都优先于构建应用前在Editor中填写的设置,以及boot.config中的设置。
参数 | 描述 |
---|---|
-logfile <文件路径> | 将日志输出到指定文件中。 |
-window-x <N> | 设置应用窗口起始位置x坐标为N。 |
-window-y <N> | 设置应用窗口起始位置y坐标为N。 |
-screen-fullscreen 0 | 设置以窗口模式启动应用。 |
-platform-hmi-log-startup-times | 输出启动时间,并持续输出应用的帧率。 |
-platform-hmi-quit-after-frame <N> | 渲染N帧后使应用自动退出,N默认为1。 |
-platform-hmi-player-data-path <目录> | 指定应用程序的数据文件的存放目录,默认为~/.config 。 |
-platform-hmi-force-vsync-count <N> | 设置垂直同步数量为N,覆盖 PlayerSettings>Quality>VSync Count 中的设置。 |
-platform-hmi-force-srgb-blit <N> | 在选择Linear作为颜色空间时,启用此参数后将强制开启srgb blit。如果图形驱动不支持Linear颜色空间,开启后会将颜色空间转为Gamma。 |
-platform-hmi-single-gl-context | 禁用GLES的上下文共享。若使用GLES或GL作为图形API,传入该参数后Player将无法多屏渲染。 |
-platform-hmi-cpu-configuration <configuration> | 将CPU标记为高性能核、低性能核或禁用核,用于设置亲和性。其中<configuration> 应为H (high performance core)、L (low performance core)、D (disable core)三个字母的组合。例如传入-platform-hmi-cpu-configuration DHL 代表禁用第一个核,并将第二个核和第三个核分别标记为高性能和低性能。该参数将覆盖 PlayerSettings>Configuration>CPU Configuration 中的设置。 |
-platform-embedded-linux-enable-gamepadinput | 设置应用是否支持游戏控制器,开启后会增加应用的启动时间。 |
-platform-embedded-linux-offscreen-video | 启用后使用 SDL2 离屏渲染。所有的渲染都将离屏进行,但仍由GPU加速。 |
-platform-embedded-linux-wayland-enable-evdev-input | 启用 EVDEV SDL2 输入。 |
platform-hmi-unitymain-priority | 设置主线程的线程优先级。 |
platform-hmi-gfxdeviceworker-priority | 设置渲染线程的线程优先级。 |
platform-hmi-jobworker-priority | 设置工作线程的线程优先级。 |
platform-hmi-background-jobworker-priority | 设置后台工作线程的线程优先级。 |
platform-hmi-unitymain-affinity | 设置主线程的CPU亲和性,默认情况下允许主线程在所有大核上运行。 |
platform-hmi-gfxdeviceworker-affinity | 设置渲染线程的CPU亲和性,默认情况下允许渲染线程在所有大核上运行。 |
platform-hmi-jobworker-affinity | 设置工作线程的CPU亲和性,默认情况下允许工作线程在所有大核上运行。 |
注:关于设置线程优先级和亲和性的参数的详细说明可参考Android thread configuration。其他未在本页面列出的命令行参数可参考命令行参数。