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ファイルが認識される
ces2020demo.serviceでlxc-startを実行させる
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
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
- 注意
- 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を実行- 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=1920こーどぶろっく