Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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ファイル群
  • 各ビルド手順
    • 共通
  • 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
      titleces2020demo.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
      languagediff
      titleweston.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を実行


    • Code Block
      languagediff
      titlediff
      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,


  • 残課題
    • BT, Radio確認
    • WLAN(ただしデモ会場を考えると優先度はBT/Radioより下がる)
    • CAN/LIN (Steering wheelの状況によりCES2020としてはドロップ)
    • クラスタ連携をHW enc/dec 化
    • chromium コンテナの作成と起動?

詳細

1. host environmentを作る

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
  • /var/lib/lxc/ にディレクトリとconfigファイルが作成される。各configを書き換える(要見直し)

#lxc.net.0.type = empty
lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = lxcbr0
lxc.net.0.hwaddr = fe:0d:e4:0:xx:xx
lxc.net.0.veth.mode = bridge
lxc.net.0.ipv4.address = 10.0.3.10/24


lxc.rootfs.path = dir:/lxc/guest
lxc.signal.halt = SIGRTMIN+3
lxc.signal.reboot = SIGTERM
lxc.uts.name = "busybox"
lxc.tty.max = 1
lxc.pty.max = 1

lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m


lxc.mount.auto = cgroup:mixed proc:mixed sys:mixed
lxc.mount.entry = /sys/kernel/security sys/kernel/security none ro,bind,optional 0 0

lxc.cgroup.devices.allow = c 116:* rwm
lxc.cgroup.devices.allow = c 13:* rwm
lxc.cgroup.devices.allow = c 226:* rwm
lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir

lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry = /dev/tty3 dev/tty3 none bind,optional,create=file
lxc.mount.entry = /dev/input dev/input none bind,optional,create=dir

lxc.mount.entry = /run/platform/display mnt/tmp none bind,optional,create=dir
#lxc.environment = XDG_RUNTIME_DIR=/home/0/tmp
lxc.mount.entry = /run/udev/data run/udev/data none bind,optional,create=dir

lxc.mount.entry = /sys/fs/smackfs sys/fs/smackfs none bind 0 0
lxc.mount.entry = /etc/smack etc/smack none bind,optional,create=dir

  • 上記パラメータの説明
    • 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
      UtmpIdentifier=tty3

      ExecStart=/usr/bin/weston --tty=3 --idle-time=0  --log=/run/platform/display/weston.log
  • 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


    Code Block
    languagecpp
    themeRDark
    firstline1
    linenumberstrue
    こーどぶろっく