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
    • 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 
    • 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ファイルが認識される
  • 注意
    • SD書き込み後の初回のコンテナ起動は時間がかかる
      • GUIアプリの初回起動が遅い。CPU 100%のまま20秒ほど時間がかかる。(1度起動したことがあるアプリは、ボード再起動でも違和感なし)
    • TBT(mapbox)とのクラスタ連携は未着手


詳細

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
    こーどぶろっく