CES integration 31/Dec
項目
- Wayland-backendのバグFix
- Guest-IVI側の変更
- IVI-クラスタ連携(remoting)のHW IP処理
- Guest-Cluster側、Host側の変更
Wayland-backend バグFix
- 以下のパッチをwestonに追加する。IVI側だけで問題ないが、weston自体のBugのためすべてのrootfsに取り込んでも問題なし。
wayland-backendで--output-count=2にしたとき、第2画面の表示更新がされない問題にたいするw/a
Code Block | ||||
---|---|---|---|---|
| ||||
diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c index ef83882..d7f9dee 100644 --- a/libweston/compositor-wayland.c +++ b/libweston/compositor-wayland.c @@ -2547,7 +2547,7 @@ registry_handle_global(void *data, struct wl_registry *registry, uint32_t name, b->parent.compositor = wl_registry_bind(registry, name, &wl_compositor_interface, - MIN(version, 4)); + MIN(1, 4)); } else if (strcmp(interface, "xdg_wm_base") == 0) { b->parent.xdg_wm_base = wl_registry_bind(registry, name, |
クラスタ連携(remoting)のHWIP処理化(R-Car限定)
- 変更の概要
- Host側
- westonのremoting pipelineの部分をweston.iniで設定出来るように修正
- weston.iniの修正
- Guest側に対してdev fileの共有化
- udev ルールの修正
- Guest側
- Cluster-receiverアプリの修正。受信のpipelineを変更
- Host側
- recipe
- meta-agl, meta-agl-cluster-demoを更新
CES Integration Meeting minute on 27/Nov
- HH 803ベースで構築。改変箇所は以下
- meta-agl : sandbox/harunobu.kurokawa/integ20191127 をpush
- 2cccf983 [RCAR] Update graphics driver をcherry-pick
- 5e20dda weston: Disable wayland backend frame wayland backendのフレーム削除
- meta-renesas-rcar-gen3 : sandbox/harunobu.kurokawa/integ20191127をpush
- 3dae985 rcar-gen3: gst-omx: Update SRCREV to fix omxh264enc issue
- e76b87b [AGL] Update weston driver
- meta-container-host : masterブランチ
- 563555a lxc-net: Update systemd serivce to add network.target
- 8f2d4ac Add lxc-networking into AGL Image
- meta-lxc-demo : (https://github.com/harunobukurokawa/meta-lxc-demo)
- meta-waltham : walthamインテグレーションに必要なファイル(CES2020では見送り)
- setupfiles : SD書き込みのスクリプト&configファイル群
- meta-agl : sandbox/harunobu.kurokawa/integ20191127 をpush
- 各ビルド手順
- 共通
repo init -b halibut -m halibut_8.0.3.xml -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo.git cd .repo/wget https://raw.githubusercontent.com/agl-ic-eg/container-host/master/local_manifest.xml cd .. |
---|
- host : container-hostの他に、remotingによる転送をするため, agl-cluster-demo-supportを追加。
- source meta-agl/scripts/aglsetup.sh -m h3ulcb -b build_h3_host agl-devel agl-demo agl-container-host agl-gstrecorder agl-cluster-demo-support
- bitbake agl-demo-platform
- IVI :tbtを追加するため、agl-cluster-demo-supportを追加。
- source meta-agl/scripts/aglsetup.sh -m h3ulcb -b build_h3_guest_ivi agl-devel agl-demo agl-gstrecorder agl-cluster-demo-support
- bitbake agl-demo-platform
- cluster
- source meta-agl/scripts/aglsetup.sh -m h3ulcb -b build_h3_clst agl-devel agl-demo agl-cluster-demo
- bitbake agl-cluster-demo-platform
- waltham (参考)
- source meta-agl/scripts/aglsetup.sh -m h3ulcb -b build_h3_walt agl-devel agl-demo
- local.confに追加
- BBMASK += "${METADIR}/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/weston_%.bbappend"
- bitbake agl-demo-platform
- 起動の手順
- USBメモリ(MP3)を接続した状態で起動。/dev/sda1になる事
- SKのmicroHDMIにIVI、KFのHDMIにclusterのディスプレイを接続する。
- IVIのディスプレイのUSBを接続。
- u-bootのbootargsに以下を追加
- video=HDMI-A-1:1920x1080@60 video=HDMI-A-2:1920x1080@60
- ./setup.shを実行。
- このスクリプトで lxc-createを実行し、各コンテナを作成する。
- ./run_container.shを実行。
- lxc-start (cluster)と、layer割当
- guest iviのマウントPOINTへudev/dataをコピー
- lxc-start (guest ivi)と/dev/sda1のデバイス追加、layer割当
- IVI画面が正しく表示されない場合、./start-ivi.shを実行
- iviへログインして以下をusbメモリをマウントする
- lxc-attach -n guest
- mount /dev/sda1 /media/
- これでmediaplayerにmp3ファイルが認識される
- sllin0を有効にする手順
- $ lxc-device -n guest add sllin0
- $ lxc-attach -n guest
- # ifconfig sllin0 up
ces2020demo.serviceでlxc-startを実行させる
Code Block title ces2020demo.service [Unit] Description=AGL CES2020 IC demo After=lxc-net.service weston.service [Service] Type=oneshot Environment=XDG_RUNTIME_DIR=/run/platform/display ExecStart=/home/0/run_container.sh [Install] WantedBy=multi-user.target
Code Block language diff title weston.serviceの変更点 diff --git a/0-host/weston.service b/0-host/weston.service index 1cef591..56ca9f5 100644 --- a/0-host/weston.service +++ b/0-host/weston.service @@ -2,7 +2,7 @@ Conflicts=getty@tty1.service Description=Weston Wayland Compositor RequiresMountsFor=/run -After=dbus.service multi-user.target +After=dbus.service lxc-net.service [Service] Group=display
wayland backendで作成されたsurfaceのid(surface id)を固定する方法。weston.iniに追記する。app-titleにダブルクォーテーションは不要。参照元は https://github.com/GENIVI/wayland-ivi-extension/blob/master/ivi-id-agent-modules/ivi-id-agent/weston.ini.in
Code Block language bash title weston.ini for wayland-backend [desktop-app] surface-id=1111 app-title=Weston Compositor - wayland0 [desktop-app] surface-id=2222 app-title=Weston Compositor - wayland1
- 注意
- SD書き込み後の初回のコンテナ起動は時間がかかる
- GUIアプリの初回起動が遅い。CPU 100%のまま20秒ほど時間がかかる。(1度起動したことがあるアプリは、ボード再起動でも違和感なし)
TBT(mapbox)とのクラスタ連携は未着手=> 11/27に確認済み
12/11追記:TBTアプリは問題ないが、Clusterに表示される画面が更新がされない。(更新されるときもある)Unicensで音を出す場合。Guest (IVI)の//etc/wireplumber/wireplumber.conf を修正。
その後、chsmack -a _ wireplumber.confを実行Code Block language diff title diff diff wireplumber.conf~ wireplumber.conf --- wireplumber.conf~ +++ wireplumber.conf @@ -40,8 +40,8 @@ # - Roles and priorities can be arbitrary strings and arbitrary numbers # - Roles are matched against the stream names specified in the modules above. load-module C libwireplumber-module-simple-policy { - "default-playback-device": <"ak4613">, - "default-capture-device": <"ak4613">, + "default-playback-device": <"ep016ch">, + "default-capture-device": <"ep812ch">, "role-priorities": <{ "Multimedia": 1, "Speech-Low": 2,
- SD書き込み後の初回のコンテナ起動は時間がかかる
- 残課題
- BT, Radio確認
- WLAN(ただしデモ会場を考えると優先度はBT/Radioより下がる)
- CAN/LIN (Steering wheelの状況によりCES2020としてはドロップ)
- クラスタ連携をHW enc/dec 化
- chromium コンテナの作成と起動?
詳細
1. host environmentを作る
- meta-container-host をgit clone します
- meta-virtualization, meta-container-host をbblayer.confに追加します。
- BBLAYERS =+ "\
${METADIR}/external/meta-virtualization \
${METADIR}/meta-container-host \
${METADIR}/meta-container-host/boardspecific/meta-container-renesas \
"
- BBLAYERS =+ "\
- local.confに追加
- DISTRO_FEATURES_append = " virtualization"
IMAGE_INSTALL_append = " lxc nano lxc-networking"
- DISTRO_FEATURES_append = " virtualization"
- もしくは下記を参照
https://jira.automotivelinux.org/browse/SPEC-2875?focusedCommentId=22410&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-22410 - rootfsを構築します。
- bitbake agl-demo-platform
2. Guest environmentを作る
- 1. で作成したhost のrootfsにゲスト用ディレクトリを作成する
- mkdir -p /lxc/guest
- mkdir -p /lxc/cluster
- 各ディレクトリにguest用にビルドしたrootfsを展開する
- tar xf *****.tar.bz2 -C <SD>/lxc/guest
- hostを起動、ログインの後に、下記コマンドでlxcからコンテナを作成する
- lxc-create -n <Name> -t none
- 例) lxc-create -n guest -t none
- 例) lxc-create -n cluster -t none
- すでに作成ずみのファイルが有る場合、--config=<ファイル名>で指定する
- lxc-create -n guest --config=config.ivi -t none
- lxc-create -n <Name> -t none
- /var/lib/lxc/ にディレクトリとconfigファイルが作成される。各configを書き換える(要見直し)
#lxc.net.0.type = empty
lxc.cgroup.devices.allow = c 116:* rwm lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry = /sys/fs/smackfs sys/fs/smackfs none bind 0 0 |
---|
- 上記パラメータの説明
- cgroup.devices.allow c 13: * => inputデバイス(マウス、touch)で必要
- cgourp.devices.allow c 226:* => GPU (/dev/dri)で画面表示のために必要
- mount /dev/snd => soundドライバ
- mount /dev/dri, /dev/tty3 , /dev/input => weston起動、OpenGLESのために必要。
- mount /run/platform/display => wayland ソケットをコンテナ内と共有するために使用。コンテナ内の/run/ディレクトリと共有できないため、tmpフォルダを使用。
- mount /sys/fs/smackfs => smack動作のために必要
- mount /etc/smack => guestで作成したsmack dataベースをホストで管理、共有するため
- weston起動のために、udevをホストからlxc/guestのディレクトリへコピーする。
- cp /run/udev/data/c226\:1 /lxc/guest/home/0
- cp /run/udev/data/c13\:* /lxc/guest/home/0
- guest側のweston.serviceを修正する。
以下を追加
ExecStartPre=+/bin/mkdir -p /run/udev/data
ExecStartPre=+/bin/cp /home/0/c13:64 /run/udev/data/
ExecStartPre=+/bin/cp /home/0/c13:65 /run/udev/data/
ExecStartPre=+/bin/cp /home/0/c13:66 /run/udev/data/- ttyをtty3に変更
TTYPath=/dev/tty3
ExecStart=/usr/bin/weston --tty=3 --idle-time=0 --log=/run/platform/display/weston.log
UtmpIdentifier=tty3
- USBメモリ内のMP3ファイル認識のため、udevをホストからlxc/guestへコピー
- cp /run/udev/data/b8\:* /lxc/guest/home/0
3. Guest コンテナを起動する
lxc-startで起動、ログイン
- lxc-start -n guest
- lxc-attach -n guest
- USB(/dev/sda1)メモリデバイスをguestに追加 (ホストで実行)
- lxc-device -n guest add /dev/sda1
II Wayland Backendを使って表示させる
1SoCでIVI、Clusterといった複数の既存プロファイルを立ち上げるために、LXCコンテナ内でwestonを立ち上げようとしてもdrm-backendで立ち上げる事ができない。複数プロセスからlibdrmでアクセスすることができないため、westonの複数起動が不可。CES2020ではwayland-backendを使用したnested compositorで構築する。
1. Host 環境
- westonをdrm-backendで起動する。その際にwayland socketの名前を変更しておく。コンテナ内で使用するwayland socketと競合させないため。
- これにより、Guest側アプリは何も手を入れることなく動作可能
変更点。weston.serviceで"-Swayland-1"を追加する場合の例。
/lib/systemd/system/weston.service
<snip>
User=display
EnvironmentFile=-/etc/default/weston
ExecStart=/usr/bin/weston --idle-time=0 --tty=1 --log=/run/platform/display/weston.log -Swayland-1
2. Guest 環境
- westonをwayland-backendで起動する。接続先のwestonはホストで動作するwestonのため、上記で変更したwayland socketで接続する。
変更点。weston.serviceで"wayland-1"ソケットに接続する場合の例。
/<guest path>/lib/systemd/system/weston.service
<snip>
EnvironmentFile=-/etc/default/weston
ExecStart=/usr/bin/weston --idle-time=0 --log=/run/platform/display/weston.log -Bwayland-backend.so --display=wayland-1 --width=1080 --height=1920Code Block language cpp theme RDark firstline 1 linenumbers true こーどぶろっく