Version: 1.7
语言 : 中文
Build 设置
EmbeddedLinux 原生插件

部署 Embedded Linux 应用

团结 Embedded Linux 应用使用 SDL2 处理输入以及与窗口交互,并使用 EGL、OpenGLES3(或 Vulkan)进行渲染,运行时需要 SDL 动态加载 EGL 驱动文件和 GLES 驱动文件(或 Vulkan 驱动文件)。

配置 Wayland 环境

在 Embedded Linux 上运行 Tuanjie 需要安装 Wayland Compositor。本文档假设/建议使用 Weston 作为 Wayland Compositor ,也可稍作修改用于其他 Wayland Compositor。

安装及配置 Weston 可查阅链接。

运行 Weston 后,Weston 会将 Wayland socket 导出到环境变量 XDG_RUNTIME_DIR 所关联的目录中。

推包流程示例

:因不同的车机设备及环境略有差异,具体操作请以实际为准,本示例仅供参考。

  1. 创建目标文件夹目录;
  2. 将 Tuanjie Editor 打包出的应用传输到 Embeddded Linux 系统,可以使用 scp / sftp / adb / SD 卡 / USB 等方式将文件复制到目标文件夹目录;
  3. 完成传输后,给当前目录下的所有文件添加可执行权限 chmod +x ./*

部署并运行 Tuanjie

可以在 Weston 中选择使用 IVI-shell 或默认的 Desktop-shell 来配置,以运行团结。

使用 Desktop-shell 部署并运行 Tuanjie

如果使用 Desktop-shell,请执行以下操作:

  1. 验证环境变量 XDG_RUNTIME_DIR 是否已设置为正确的目录。如果没有,请使用正确的目录(Weston 安装的默认目录为 /run/user/1000/)。运行 export XDG_RUNTIME_DIR=<dir> 命令;
  2. 运行 Tuanjie Player。

示例参考

chmod +x *
export XDG_RUNTIME_DIR=/tmp  WAYLAND_DISPLAY=/tmp/wayland-0
./playername monitor 1

使用 IVI-shell 部署并运行 Tuanjie

如果使用 IVI-shell,请执行以下操作:

  1. 通过环境变量 UNITY_IVI_SURFACE_IDS 设置 Tuanjie Player 需要使用的 IVI Surface IDs。如果未设置,Tuanjie Player 将默认使用 ID 4711 及更高版本作为新创建的 Surface(例如,Tuanjie Display 1 将使用 4711,Tuanjie Display 2 将使用 4712,以此类推);

  2. 注意:环境变量是一个以逗号分隔的 ID 列表。例如,export UNITY_IVI_SURFACE_IDS=100,200,300 表示 Tuanjie Display 1 使用 ID 100,Tuanjie Display 2 使用 ID 200,以此类推;

  3. 如果只使用单个显示输出,则单个 ID 即可。例如,export UNITY_IVI_SURFACE_IDS=100;

  4. 验证环境变量 XDG_RUNTIME_DIR 是否已设置为正确的目录。如果没有,请使用正确的目录(Weston 安装的默认目录为 /run/user/1000/)。运行 export XDG_RUNTIME_DIR=<dir> 命令;

  5. 运行 Tuanjie Player;

  6. 按照以下步骤为 Tuanjie 设置 IVI surface(例如,将 Weston 设置为 fullscreen map surface):

    • 创建 IVI Layer:LayerManagerControl create layer 0 <display-width> <display-height>
    • 在屏幕上添加 Layer:LayerManagerControl set screen 0 render order 0
    • 在 Layer 上添加 Tuanjie Player surface:LayerManagerControl set layer 0 render order <surface-id>
    • 添加 Surface Source Region:LayerManagerControl set surface <surface-id> source region 0 0 <display-width> <display-height>
    • 添加 Surface Destination Region:LayerManagerControl set surface <surface-id> destination region 0 0 <display-width> <display-height>
    • 设置 Layer 可见性:LayerManagerControl set layer 0 visibility 1
    • 设置 Surface 可见性:LayerManagerControl set surface <surface-id> visibility 1
  7. 至此,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。其他未在本页面列出的命令行参数可参考命令行参数

Build 设置
EmbeddedLinux 原生插件