How to fix webOS build error

Hi,
I have tried to build according to tutorial in bring-up guide for NVIDIA jetson nano board.
But, I encountered compile error for qtbase as following.
Can any one help to fix this error?

Tutorial - Jetson Nano | webOS Open Source Edition (webosose.org)

/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot/usr/lib/libGLESv2.so /home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot/usr/lib/libEGL.so && :
| /home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot-native/usr/bin/aarch64-webos-linux/../../libexec/aarch64-webos-linux/gcc/aarch64-webos-linux/9.3.0/ld.gold: error: /home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot-native/usr/lib/libgbm.so: incompatible target
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp:122: error: undefined reference to 'gbm_bo_destroy'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp:253: error: undefined reference to 'gbm_bo_get_handle'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp:209: error: undefined reference to 'gbm_bo_write'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp:211: error: undefined reference to 'gbm_bo_get_handle'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp:90: error: undefined reference to 'gbm_bo_create'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp:98: error: undefined reference to 'gbm_device_destroy'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp:76: error: undefined reference to 'gbm_create_device'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp:97: error: undefined reference to 'gbm_surface_create'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp:108: error: undefined reference to 'gbm_surface_destroy'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:76: error: undefined reference to 'gbm_bo_get_device'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:77: error: undefined reference to 'gbm_device_get_fd'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:428: error: undefined reference to 'gbm_surface_release_buffer'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:86: error: undefined reference to 'gbm_bo_get_user_data'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:91: error: undefined reference to 'gbm_bo_get_width'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:92: error: undefined reference to 'gbm_bo_get_height'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:93: error: undefined reference to 'gbm_bo_get_handle'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:94: error: undefined reference to 'gbm_bo_get_stride'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:96: error: undefined reference to 'gbm_bo_get_format'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:110: error: undefined reference to 'gbm_bo_set_user_data'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:186: error: undefined reference to 'gbm_surface_create'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:169: error: undefined reference to 'gbm_surface_create'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:304: error: undefined reference to 'gbm_surface_lock_front_buffer'
| /usr/src/debug/qtbase/6.2.2-r0/git/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp:353: error: undefined reference to 'gbm_surface_release_buffer'
| collect2: error: ld returned 1 exit status
| [43/144] /home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot-native/usr/bin/aarch64-webos-linux/aarch64-webos-linux-g++ -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_DEVICEDISCOVERY_SUPPORT_LIB -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_FB_SUPPORT_LIB -DQT_GUI_LIB -DQT_INPUT_SUPPORT_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_NO_FOREACH -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_PLUGIN -DQVncIntegrationPlugin_EXPORTS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -Isrc/plugins/platforms/vnc/QVncIntegrationPlugin_autogen/include -I/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/git/src/plugins/platforms/vnc -Isrc/plugins/platforms/vnc -Iinclude -Iinclude/QtCore -I/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/git/mkspecs/linux-g++ -Isrc/corelib -Iinclude/QtCore/6.2.2 -Iinclude/QtCore/6.2.2/QtCore -Iinclude/QtFbSupport -Isrc/platformsupport/fbconvenience -Iinclude/QtFbSupport/6.2.2 -Iinclude/QtFbSupport/6.2.2/QtFbSupport -Isrc/gui -Iinclude/QtGui/6.2.2 -Iinclude/QtGui/6.2.2/QtGui -Iinclude/QtGui -Iinclude/QtNetwork -Iinclude/QtInputSupport -Isrc/platformsupport/input -Iinclude/QtInputSupport/6.2.2 -Iinclude/QtInputSupport/6.2.2/QtInputSupport -Iinclude/QtDeviceDiscoverySupport -Isrc/platformsupport/devicediscovery -Iinclude/QtDeviceDiscoverySupport/6.2.2 -Iinclude/QtDeviceDiscoverySupport/6.2.2/QtDeviceDiscoverySupport -march=armv8-a+crc -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0=/usr/src/debug/qtbase/6.2.2-r0 -fdebug-prefix-map=/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0=/usr/src/debug/qtbase/6.2.2-r0 -fdebug-prefix-map=/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot= -fdebug-prefix-map=/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot-native= -D__WEBOS__ -D__WEBOS__ -DQFONTCACHE_MIN_COST=512 -fvisibility-inlines-hidden -march=armv8-a+crc -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/recipe-sysroot -DNDEBUG -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wextra -fno-exceptions -Wsuggest-override -std=c++17 -MD -MT src/plugins/platforms/vnc/CMakeFiles/QVncIntegrationPlugin.dir/qvncscreen.cpp.o -MF src/plugins/platforms/vnc/CMakeFiles/QVncIntegrationPlugin.dir/qvncscreen.cpp.o.d -o src/plugins/platforms/vnc/CMakeFiles/QVncIntegrationPlugin.dir/qvncscreen.cpp.o -c /home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/git/src/plugins/platforms/vnc/qvncscreen.cpp
| ninja: build stopped: subcommand failed.
| WARNING: exit code 1 from a shell command.
| ERROR: Execution of '/home/kimdy2/build-webos/BUILD/work/jetson_nano_devkit-webos-linux/qtbase/6.2.2-r0/temp/run.do_compile.14597' failed with exit code 1
ERROR: Task (/home/kimdy2/build-webos/meta-qt6/recipes-qt/qt6/qtbase_git.bb:do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 1571 tasks of which 1568 didn't need to be rerun and 1 failed.
NOTE: Writing buildhistory
NOTE: Writing buildhistory took: 2 seconds
NOTE: Build completion summary:
NOTE: do_package: 0.0% sstate reuse(0 setscene, 1 scratch)

Summary: 1 task failed:
/home/kimdy2/build-webos/meta-qt6/recipes-qt/qt6/qtbase_git.bb:do_compile
Summary: There was 1 ERROR message shown, returning a non-zero exit code.

Hi @kimdy2

Could you provide us the commands you'd entered?

Thanks

Hi, :slightly_smiling_face:
I just followed the tutorial page as below.

$ git clone https://github.com/webosose/build-webos.git
$ cd build-webos
$ sudo scripts/prerequisites.sh

Add jetson-nano-devkit to build-webos/weboslayer.py

To add the repository, add the following codes to build-webos/weboslayer.py
('meta-tegra', 30, 'https://github.com/OE4T/meta-tegra.git', '
branch=dunfell-l4t-r32.5.0,commit=65b548a', ''),

$ ./mcf -p 2 -b 2 jetson-nano-devkit
$ source oe-init-build-env

Copy and paste the following codes at the end of the build-webos/meta-webosose/meta-webos/conf/layer.conf

#=============================================================================

Add meta-tegra layer information.

IMAGE_CLASSES and IMAGE_FSTYPES is used to flash the target device.

IMAGE_CLASSES += "image_types_tegra"
IMAGE_FSTYPES = "tegraflash tar.gz.bz2"
IMAGE_TYPES += "tegraflash"

The default value for IMAGE_NAME_SUFFIX occurs an error when you build webOS OSE with u-boot.

To avoid this error, set IMAGE_NAME_SUFFIX as blank.

IMAGE_NAME_SUFFIX = ""

Disable SOTA (Software-Over-the-Air) features.

SOTA features are not supported in NVIDIA devices.

INHERIT_remove = "sota"
DISTRO_FEATURES_remove = "sota usrmerge"
DISTRO_FEATURES_NATIVE_remove = "sota"

Set rootfs for Jetson Nano.

mmcblk0p1 is root in Jetson Nano development module for MicroSD card.

KERNEL_ROOTSPEC = "root=/dev/mmcblk0p1 rw rootwait"

Fix bash runtime dependency with respect to WEBOS_PREFERRED_PROVIDER_FOR_BASH

VIRTUAL-RUNTIME_bash ?= "bash"
RDEPENDS_tegra-nvs-base_append_class-target = " ${VIRTUAL-RUNTIME_bash}"
RDEPENDS_tegra-nvs-base_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}"
RDEPENDS_tegra-nvphs-base_append_class-target = " ${VIRTUAL-RUNTIME_bash}"
RDEPENDS_tegra-nvphs-base_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}"
RDEPENDS_tegra-configs-nvstartup_append_class-target = " ${VIRTUAL-RUNTIME_bash}"
RDEPENDS_tegra-configs-nvstartup_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}"

Disable com.webos.app.volume, com.webos.app.notification, and g-media-pipeline

These applications are not guaranteed to work properly on NVIDIA devices.

VIRTUAL-RUNTIME_com.webos.app.notification = ""
VIRTUAL-RUNTIME_com.webos.app.volume = ""
VIRTUAL-RUNTIME_g-media-pipeline = ""

#=============================================================================

$ bitbake webos-image

  1. Could you check typos in target name?

  2. Did you do the libhanguel.bb step?

  1. There is no typo in target name : jetson-nano-devkit

  2. Yes, I applied it already.

Next week, I'll re-test the build and share the result (maybe after Thursday due to Covid issues).

Dear Nergi
How is it going on?

@kimdy2,

Unfortunately, it took longer than expected to analyze the issue.
We'll let you know as soon as we solve the problem.

Hi @kimdy2, It's been a long time since we discussed.

Our dev. team solved this issue and I'm glad to share it with you.
We will update the guide in the near future.

In code examples in the following guide, + means adding the line and - means removing that line. (It is silmilar to git diff)

For now, keyboard and mouse won't work. Please use SSH connection.

  1. git clone https://github.com/webosose/build-webos.git

  2. cd build-webos

  3. sudo scripts/prerequisites.sh

  4. Add the following command to weboslayers.py (in described in the guide)

    ('meta-tegra',               30, 'https://github.com/OE4T/meta-tegra.git', 'branch=dunfell-l4t-r32.6.1', ''), 
    
  5. ./mcf jetson-nano-devkit

  6. Add the followings to build-webos/meta-webosose/meta-webos/conf/layer.conf

    # === build-webos/meta-webosose/meta-webos/conf/layer.conf === ## Add meta-tegra layer information.
    # IMAGE_CLASSES and IMAGE_FSTYPES is used to flash the target device.
    IMAGE_CLASSES += "image_types_tegra"
    IMAGE_FSTYPES = "tegraflash tar.gz.bz2"
    IMAGE_TYPES += "tegraflash"
     
    # The default value for IMAGE_NAME_SUFFIX occurs an error when you build webOS OSE with u-boot.
    # To avoid this error, set IMAGE_NAME_SUFFIX as blank.
    IMAGE_NAME_SUFFIX = ""
     
    # Disable SOTA (Software-Over-the-Air) features.
    # SOTA features are not supported in NVIDIA devices.
    INHERIT_remove = "sota"
    DISTRO_FEATURES_remove = "sota usrmerge"
    DISTRO_FEATURES_NATIVE_remove = "sota"
     
    # Set rootfs for Jetson Nano.
    # mmcblk0p1 is root in Jetson Nano development module for MicroSD card.
    KERNEL_ROOTSPEC = "root=/dev/mmcblk0p1 rw rootwait"
      
    # Fix bash runtime dependency with respect to WEBOS_PREFERRED_PROVIDER_FOR_BASH
    VIRTUAL-RUNTIME_bash ?= "bash"
    RDEPENDS_tegra-nvs-base_append_class-target = " ${VIRTUAL-RUNTIME_bash}"
    RDEPENDS_tegra-nvs-base_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}"
    RDEPENDS_tegra-nvphs-base_append_class-target = " ${VIRTUAL-RUNTIME_bash}"
    RDEPENDS_tegra-nvphs-base_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}"
    RDEPENDS_tegra-configs-nvstartup_append_class-target = " ${VIRTUAL-RUNTIME_bash}"
    RDEPENDS_tegra-configs-nvstartup_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}"
      
    # Disable com.webos.app.volume, com.webos.app.notification, and g-media-pipeline
    # These applications are not guaranteed to work properly on NVIDIA devices.
    VIRTUAL-RUNTIME_com.webos.app.notification = ""
    VIRTUAL-RUNTIME_com.webos.app.volume = ""
    VIRTUAL-RUNTIME_g-media-pipeline = ""
    
  7. Add LICENSE to build-webos/meta-tegra/recipes-bsp/u-boot/u-boot-tegra_2020.04.bb

    # === build-webos/meta-tegra/recipes-bsp/u-boot/u-boot-tegra_2020.04.bb === #
    DEPENDS += "bc-native dtc-native ${SOC_FAMILY}-flashtools-native"
    +LICENSE = "CLOSED"
    SRC_REPO ?= "github.com/OE4T/u-boot-tegra.git;protocol=https"
    SRC_URI = "git://${SRC_REPO};branch=${SRCBRANCH}"
    
  8. Remove PACKAGES =+ "${PN}-extlinux" to build-webos/meta-webosose/meta-tegra/recipes-bsp/u-boot/u-boot-tegra_2020.04.bb

    # === build-webos/meta-webosose/meta-webos/conf/layer.conf === ## Add meta-tegra layer information.
    require u-boot-tegra-bootimg.inc
     
    -PACKAGES =+ "${PN}-extlinux"
    +#PACKAGES =+ "${PN}-extlinux"
    FILES_${PN}-extlinux = "/boot/extlinux /boot/initrd"
    ALLOW_EMPTY_${PN}-extlinux = "1"
    RPROVIDES_${PN}-extlinux += "u-boot-extlinux"
    
  9. In meta-webosose/meta-webos/recipes-qt/qt6/qtbase_git.bbappend

    (build-webos/meta-webosose/meta-webos/recipes-qt/qt6) $ vi qtbase_git.bbappend
     
    # ==== build-webos/meta-webosose/meta-webos/recipes-qt/qt6/qtbase_git.bbappend ==== #
    PACKAGECONFIG[sessionmanager] = "-DFEATURE_sessionmanager=ON,-DFEATURE_sessionmanager=OFF"
    PACKAGECONFIG:remove = "sessionmanager"
     
    PACKAGECONFIG[xlib] = "-DFEATURE_xlib=ON,-DFEATURE_xlib=OFF"
    PACKAGECONFIG:remove = "xlib"
     
    PACKAGECONFIG[eglfs-egldevice] = "-DFEATURE_eglfs_egldevice=ON,-DFEATURE_eglfs_egldevice=OFF"
    -PACKAGECONFIG:remove = "eglfs-egldevice"
     
     
    PACKAGECONFIG[system-sqlite] = "-DFEATURE_system_sqlite=ON,-DFEATURE_system_sqlite=OFF"
    PACKAGECONFIG:append = " system-sqlite"
     
    PACKAGECONFIG[system-pcre2] = "-DFEATURE_system_pcre2=ON,-DFEATU
  1. Create a folder

    (build-webos/meta-tegra) $ mkdir -p recipes-qt/qt6

  2. cherry-pick the following two commits and move files in meta-tegra/external/qt5-layer/recipes-qt/qt5 to meta-tegra/recipes-qt/qt6. And remove the qt5 folder.

        git cherry-pick 47b14268ef9aaccf57604e1665612faa239c2223
        git cherry-pick f30f4cf1e9edc2eb47b76dfa07cd1be8947a98df
      
    
    (build-webos/meta-tegra) $ mv ./external/qt5-layer/recipes-qt/qt5/* ./recipes-qt/qt6
    ```
    

    Result

    (build-webos/meta-tegra) $ tree ./recipes-qt
    ./recipes-qt
    └── qt6
        ├── qtbase
        │   ├── 0001-eglfs-Newer-Nvidia-libdrm-provide-device-instead-dri.patch
        │   └── 0002-eglfs-add-a-default-framebuffer-to-NVIDIA-eglstreams.patch
        └── qtbase_%.bbappend
    

    Remove the qt5 folder

    (build-webos/meta-tegra) $ rm -rf ./external/qt5-layer
    
  3. Add PACKAGECONFIG:append:tegra = " gbm eglfs-egldevice" and DISTRO_FEATURES:remove = "ptest" to meta-tegra/recipes-qt/qt6/qtbase_%.bbappend

  FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
   
  SRC_URI += "file://0001-eglfs-Newer-Nvidia-libdrm-provide-device-instead-dri.patch \
              file://0002-eglfs-add-a-default-framebuffer-to-NVIDIA-eglstreams.patch \
  "
   
  PACKAGECONFIG:append:tegra = " kms"
  +PACKAGECONFIG:append:tegra = " gbm eglfs-egldevice"
  +DISTRO_FEATURES:remove = "ptest"
  1. Create the following files and add DISTRO_FEATURES:remove = "ptest" to each file.
meta-tegra/recipes-qt/qt6/qtdeclarative_%.bbappend
meta-tegra/recipes-qt/qt6/qtgraphicaleffects_%.bbappend
meta-tegra/recipes-qt/qt6/qtshadertools_%.bbappend
meta-tegra/recipes-qt/qt6/qtwayland_%.bbappend

Result

meta-tegra/recipes-qt/qt6/
├── qtbase
│ ├── 0001-eglfs-Newer-Nvidia-libdrm-provide-device-instead-dri.patch
│ └── 0002-eglfs-add-a-default-framebuffer-to-NVIDIA-eglstreams.patch
├── qtbase_%.bbappend
├── qtdeclarative_%.bbappend
├── qtgraphicaleffects_%.bbappend
├── qtshadertools_%.bbappend
└── qtwayland_%.bbappend
  1. (build-webos) $ source ./oe-init-build-env

  2. (build-webos) $ bitbake webos-image

  3. If the build succeeds, BUILD/deploy/images/jetson-nano-devkit/webos-image-jetson-nano-devkit.tegraflash.tar.gz file will be generated. extract the file.

$ mkdir webos-image-jetson-nano-devkit
$ tar -zxvf ./webos-image-jetson-nano-devkit.tegraflash.tar.gz -C ./webos-image-jetson-nano-devkit
  1. run dosdcard.sh. webos-image.sdcard will be generated.
(webos-image-jetson-nano-devkit) $ ./dosdcard.sh
  1. Plug in your microSD card to your computer and write webos-image.sdcard to your microSD card.

Please replace [X] before execute the command. See Flashing the Image to find your own [X].

(webos-image-jetson-nano-devkit) $ sudo dd if=./webos-image.sdcard of=/dev/sd[X] bs=10M && sync
  1. Set up network. Use router (recommended) or serial connection (see Establishing a Serial Connection)

  2. Access to the Jetson Nano device and modify /etc/surface-manager.d/product.env file

# Platform plugin to be used
export WEBOS_COMPOSITOR_PLATFORM="eglfs_webos"
- export QT_QPA_EGLFS_INTEGRATION="eglfs_kms_webos"
+ export QT_QPA_EGLFS_INTEGRATION="eglfs_kms_egldevice"
 
# Disable to set the WEBOS_COMPOSITOR_DISPLAY_CONFIG value. Get the value from configd.                   
- WEBOS_COMPOSITOR_DISPLAY_CONFIG=$(luna-send -n 1 -a com.webos.surfacemanager luna://com.webos.service.config/getConfigs '{"configNames":["com.webos.surfacemanager.displayConfig"]}' | grep -oE "\[\{.*\}\]
+ #WEBOS_COMPOSITOR_DISPLAY_CONFIG=$(luna-send -n 1 -a com.webos.surfacemanager luna://com.webos.service.config/getConfigs '{"configNames":["com.webos.surfacemanager.displayConfig"]}' | grep -oE "\[\{.*\}\]

Then restart surface manager

$ root@jetson-nano-devkit:~# restart surface-manager
restart surface-manager
$ root@jetson-nano-devkit:~# restart bootd
restart bootd

Dear Nergi

Thanks for your support.
I tried to build again, following error occur when build start.
Could you check this problem?

$ bitbake webos-image
ERROR: Layer tegra is not compatible with the core layer which only supports these series: kirkstone (layer is compatible with dunfell)

@kimdy2 ,

What is the webOS OSE version you've tried?

Dear Nergi

I just followed your guide.
Please check below "weboslayers.py" file in build-webos folder which I clone from git.

Distribution = "webos"

Supported MACHINE-s

Machines = ['qemux86', 'qemux86-64', 'qemuarm', 'raspberrypi3', 'raspberrypi3-64', 'raspberrypi4', 'raspberrypi4-64']

openembedded · GitHub repositories are read-only mirrors of the authoritative

repositories on git.openembedded.org

webos_layers = [
('bitbake', -1, 'GitHub - openembedded/bitbake: The official bitbake Git is at https://git.openembedded.org/bitbake/. Do not open issues or file pull requests here.', 'branch=2.0,commit=c90d5749', ''),

('meta', 5, 'GitHub - openembedded/openembedded-core: The official Git repository is at https://git.openembedded.org/openembedded-core/.', 'branch=kirkstone,commit=555fd2848b', 'oe-core'),

('meta-oe', 10, 'GitHub - openembedded/meta-openembedded', 'branch=kirkstone,commit=50d4a8d2a9', 'meta-oe'),
('meta-multimedia', 11, 'GitHub - openembedded/meta-openembedded', '', 'meta-oe'),
('meta-networking', 12, 'GitHub - openembedded/meta-openembedded', '', 'meta-oe'),
('meta-python', 13, 'GitHub - openembedded/meta-openembedded', '', 'meta-oe'),
('meta-filesystems', 14, 'GitHub - openembedded/meta-openembedded', '', 'meta-oe'),

('meta-clang', 15, 'GitHub - kraj/meta-clang: Clang C/C++ cross compiler and runtime for OpenEmbedded/Yocto Project', 'branch=kirkstone,commit=013b5ee', ''),
('meta-updater', 16, 'GitHub - uptane/meta-updater: Yocto layer supporting Uptane updates via aktualizr and OSTree', 'branch=kirkstone,commit=c74a067', ''),
('meta-virtualization', 17, 'https://git.yoctoproject.org/git/meta-virtualization', 'branch=kirkstone,commit=9a487c1', ''),

('meta-qt6', 20, 'https://code.qt.io/yocto/meta-qt6.git', 'branch=6.4.0,commit=8370a30', ''),

('meta-webos-backports-4.1', 30, 'GitHub - webosose/meta-webosose: Yocto layer for webOS', '', ''),
('meta-webos-backports-4.2', 31, 'GitHub - webosose/meta-webosose: Yocto layer for webOS', '', ''),

('meta-webos', 40, 'GitHub - webosose/meta-webosose: Yocto layer for webOS', 'branch=master,commit=062a3071b', ''),

('meta-raspberrypi', 50, 'GitHub - agherzan/meta-raspberrypi: Yocto/OE BSP layer for the Raspberry Pi boards', 'branch=kirkstone,commit=dacad93', ''),
('meta-webos-raspberrypi', 51, 'GitHub - webosose/meta-webosose: Yocto layer for webOS', '', ''),
('meta-webos-updater', 52, 'GitHub - webosose/meta-webosose: Yocto layer for webOS', '', ''),
('meta-webos-virtualization', 53, 'GitHub - webosose/meta-webosose: Yocto layer for webOS', '', ''),

('meta-webos-smack', 75, 'GitHub - webosose/meta-webosose: Yocto layer for webOS', '', ''),
('meta-security', 77, 'https://git.yoctoproject.org/git/meta-security', 'branch=kirkstone,commit=c79262a', ''),
]`

Unfortunately, the Jetson Nano build guide is deprecated, and will not be updated in the future. I'll update the document to notify it is deprecated in the near future.

One of the natures of open-source projects is its dependencies on other open-source projects. It allows the project to use other projects' fabulous codes, but it also leads to unexpected problems due to the changes from other projects.

It is great if we fix all the bugs due to the changes from other projects, but we are facing a lack of capacity. So we decided to concentrate on a few core items.

I hope you understand our circumstances, and sorry for the inconvenience.