RDK FAQ

Created on April 4, 2023


Access and Authentication

How to set Global Git Username and Password?

To set git username and password, use the following commands.

$git config –global user.name “Your Name”
$git config –global user.email “youremail@yourdomain.com“


How to solve password prompt errors during repo initiation?

Issue:

While trying to do a repository initialization, the user will be prompted for a password.

Example console log:

Password for ‘https://code.rdkcentral.com‘: remote: Unauthorized fatal: Authentication failed for ‘https://<username>@code.rdkcentral.com/r/manifests/’

Possible reasons and solutions:

  • Not having a valid RDK Credential

  • User registration without valid company email address

    • Users must belong to a licensed company to be able to clone and checkout the manifest. You must register with valid company email address to gain access to manifest if your company is listed as a licensee. To verify if your company is licensed, please check in the following wiki page –  Licensees
  • Account is inactive/disabled – 
    • Account may have been deactivated/disabled either due to inactivity (60 days) or password has expired – Accounts can be activated using self service. Login to wiki.rdkcentral.com with the username, you will see a message with a link to activate your account. Click on the link to activate your account. If you are still facing issues with activating your account, please email support@rdkcentral.com. Please update your password after it has been activated.
  • Account is active, but still getting the password reset error.

Update the credentials in $HOME/.netrc file, a sample of the file is given below

.netrc

machine code.rdkcentral.com login <user-name> password <Password>


How to solve “Not having permission for the requested operation (Service not enabled) error”. Eg:Username for ‘https://code.rdkcentral.com‘: rdknewuser  Password for ‘https://rdknewuser@code.rdkcentral.com‘:  fatal: remote error: Service not enabled  fatal: cannot obtain manifest https://code.rdkcentral.com/r/manifests?

Issue:

In few incidents, the user may not be having the required permission to download the code although having a valid combination of username/password combination.

Example console log:

Username for ‘https://code.rdkcentral.com‘: rdknewuser

Password for ‘https://rdknewuser@code.rdkcentral.com‘:

fatal: remote error: Service not enabled

fatal: cannot obtain manifest https://code.rdkcentral.com/r/manifests

Possible Solution:

Approach RDK support with the necessary approval to get the requested privilege.


Build

How to mask a recipe in a platform build?

Mask the recipe in platform specific MACHINE conf file and run the source command again to build.

For example, to MASK ccsp-gwprovapp-ethwan in Rpi build, add below line in Rpi specific Machine conf file. Add below line in file

meta-cmf-raspberrypi/conf/machine/raspberrypi-rdk-broadband.conf ”

BBMASK .= “|.meta-rdk-broadband/recipes-ccsp/ccsp/ccsp-gwprovapp-ethwan.bb”

Run the source command again to build

source meta-cmf-raspberrypi/setup-environment  ->  select respective conf file



How to solve “Repo init: Syntax error: Invalid syntax”?

If you encounter below error,

repo: warning: Python 2 is no longer supported; Please upgrade to Python 3.6+.
Downloading Repo source from https://gerrit.googlesource.com/git-repo
remote: Counting objects: 1, done
remote: Finding sources: 100% (41/41)
remote: Total 41 (delta 14), reused 41 (delta 14)
Unpacking objects: 100% (41/41), done.
Traceback (most recent call last):
File “<File Path>”, line 56, in <module>
from subcmds.version import Version
File “<File Path>”, line 38, in <module>
[‘%s’ % name])
File “<File Path>”, line 27, in <module>
from hooks import RepoHook
File “<File Path>”, line 472
file=sys.stderr)
^
SyntaxError: invalid syntax

Upgrade the repo using below command to use with python3.

curl https://storage.googleapis.com/git-repo-downloads/repo-1 > ~/bin/repochmod a+x ~/bin/repopython3 ~/bin/repo init -u <repo URL>python3 ~/bin/repo sync

Make sure that the build machine is having required packages installed for specific Yocto flavor.
Eg: https://docs.yoctoproject.org/3.2.3/ref-manual/ref-system-requirements.html



Who defines the root filesystem and metadata? 

Metadata represents the versions of the various components in a distribution, such as the particular versions of the Linux kernel or libraries. The project supplies an example set of metadata that can generate several example distributions. The actual metadata used for the construction of a custom distribution may be supplied by a commercial vendor or created by an embedded developer. The root filesystem is defined in the metadata for a given build of a distribution.



How to view the dependencies of packages and the resulting growth in code size as packages are added?

There are tools within BitBake that enable this level of details.

  • “bitbake -g targetname” creates depends.dot and task-depends.dot files in the current directory. These files show which packages and tasks depend on which other packages and tasks and are useful for debugging purposes.
  • “bitbake -g -u depexp targetname” shows results in a more human-readable, GUI style. A simple mount of the resulting root image will show how much storage space is being used.

In addition, the toaster is a new graphical user interface for BitBake that makes these tools much easier to use.



How to add a package to my project?

As with any complex system, the real answer is it depends, but of course that is not very helpful. The simplest method for adding a single package to your build is to add 

the below line to conf/local.conf:

  • IMAGE_INSTALL_append = ” package”

Use your own package name in place of package. Note the leading space before the package name. If you want to add multiple packages, you can use multiple lines like the above, or list all packages on a single line with:

  • IMAGE_INSTALL_append = ” package1 package2 package3″

Although If you add in local.conf , that is not permanent change. For permanent addition of that package in final rootfs, you need to be added in image recipe or any package group which is included in the image recipe.



How to handle prebuilts? 

Prebuilds are handled internally by Yocto by using sstate-cache. If a prebuilt from a known good build is available, the build can point to that folder via the conf file inside the ./build<buildtype>/conf/ folder so that the prebuilts are picked up from the location



How long do the builds/single component builds take?

This depend entirely on multiple factors like capacity of build machine, first time build or repeated build in the same work space as well as changes in components on which the component in question depends on( if there is a change, the depending component is first built and then the dependent component ) and hence cannot be answered directly.



What are the commands to build a specific sub-component (WPE, Utopia etc…)? 

When you checkout sandbox every component is independently buildable, and bitbake ( OE’s build engine) is responsible to identify and sort the component dependency chain and ensure its built along. if you were to build a single component the commands are

bitbake <component>

where component is in one to one relation with .bb ( recipe ) file that can be found in the Yocto/OE metadata ( meta-rdk* layers ) e.g. if you were to build rdkbrowser then you would see that its recipe is housed in generic layer called meta-rdk-cmf and recipe is called rdkbrowser.bb so the command would be

bitbake rdkbrowser

However this will only generate CMF component and for packaging it up into final image you still have to build the image component to repackage rdkbrowser

bitbake rdk-generic-hybrid-wpe-image

would generate the CMF generic image for hybrid devices. it will only rebuild the affected components when building the image if nothing has changed it will not recreate the image.



What is  the substitute for rebuild, build-only, skip-package? Paying specific attention to when/if any new source is pulled?

bitbake has division of work into individual tasks for a component. Secondly, the recipes are wired to notice changes in upstream repository as well when you do repo sync. You can use below command to see what all individual tasks are available.

bitbake -c listtasks <component>

It will show an output like

do_build                       Default task for a recipe - depends on all other normal tasks required to 'build' a recipe
do_bundle_initramfs            Combines an initial ramdisk image and kernel together to form a single image
do_checkuri                    Validates the SRC_URI value
do_checkuriall                 Validates the SRC_URI value for all recipes required to build a target
do_clean                       Removes all output files for a target
do_cleanall                    Removes all output files, shared state cache, and downloaded source files for a target
do_cleansstate                 Removes all output files and shared state cache for a target
do_compile                     Compiles the source in the compilation directory

You can rerun any of the above tasks

bitbake -C compile rdkbrowser

would force recompile of servicemanager, if you wish to perform all the build steps for a component you can do that too by

bitbake -c cleansstate rdkbrowser; bitbake rdkbrowser

Similarly, in general you can have:

bitbake <target> -c<task_to_be_executed>

This will ensure do_<task_to_be_executed>() will be called.

task_to_be_executed can  fetch, unpack, configure, compile, install, package etc

If we were to draw parallels

–rebuild = bitbake -c cleansstate <component> ; bitbake <component>

–build-only = bitbake <component>

–skip-package is delegated to shared state mechanism to figure out at present.



How do we ensure that source code is not updated unless user does an explicit code fetch using repo sync or a similar command?

Unless you do ‘repo sync’ sources will not be updated

‘repo sync’ can cover only components with external src support, it means that in cases when SRCREV is set to AUTOREV and component doesn’t support external src, then bitbake will try to update sources from a remote repository during build time.

There is no documentation for AUTOREV, but it’s doing only one function – check remote repository for any new sources updates.

AUTOREV = "${@bb.fetch2.get_autorev(d)}"

You can prevent this behaviour by changing BB_SRCREV_POLICY variable in you local <sandbox>/conf/local.conf

BB_SRCREV_POLICY = "cache"



Where does ${D}, ${WORKDIR} resolve to?

These are OE metadata variables, bitbake has preprocessing options where it expands all the local bitbake variables so you could take advantage of that option to figure it out

bitbake -e rf4ce | grep "^S ="
bitbake -e rf4ce | grep "^WORKDIR ="

It can be used to check for any bitbake variable, alternatively you can pipe the whole bitbake -e output to a file and inspect the file in your favourite editor



How do I locate logs for a particular component in the Yocto/OE folder structure?

  • You can find log files for each task in the recipe’s temp directory. Log files are named log.taskname-Eg:compile logs are present in the file log.do_compile. Bitbake maintains logs separately for each of the tasks that run while building the component. These tasks are typically the fetch task, the compile task, install task and so on.
  • Eg: For a RPI device, typically logs are present under the build-raspberrypi-rdk-hybrid//tmp/work/<*-rdk-linux> and under the component directory. Other devices would have logs present under similar folders. For instance, logs are present under build-raspberrypi-rdk-hybrid/tmp/work/<*-rdk-linux>/rdkbrowser/1.99+gitAUTOINC+8c3f17fdc6_fa6c8b4334_dc33f7d6bc_4bc1f2f4c9-r0/temp


How to fix Werror unused parameter warning error during compilation?

The warnings like -Werror -Wall -Wextra are turned on for compiler for most of the Ccsp components .All these warnings must be fixed for successful compilation as all warnings are treated as errors.

Werrors due to unused parameters in code can be fixed by using:

UNREFERENCED_PARAMETER(user_data); ,if user_data variable is not used in the scope of definition of the function .



How to solve the error occured during enabling net-snmp in device?

* satisfy_dependencies_for: Cannot satisfy the following dependencies for packagegroup-...:
*             net-snmp *
* opkg_install_cmd: Cannot install package packagegroup-....

The above error indicates that :

You asked for adding net-snmp ( the package ) not ( the recipe ) now net-snmp ( the recipe ) may generate a number of ( packages ) so you should add the packages ( runtime items) to the package groups and not the recipes ( build time items). Usually yocto/OE does generate a output package with same name as input recipe so for net-snmp.bb there will be a net-snmp ipk but thats just a common case not a hard and fast rule.

Now in this particular case when a package has nothing to emit into the ${PN} package the package is left empty and hence not emitted. If you want to emit the package regardless you have to add

ALLOW_EMPTY_<package> = “1” in the recipe,but this is less of a usecase to demand empty packages. If you expressed the packagegroup RDEPENDS correctly you would not need it.



If my workspace has a large sstate-cache, how can I make it lean ?

sstate-cache is always adding new versions and hence is growing in size always, thankfully we have a tool in Yocto to manage it, here is a sample on how to do it for raspberrypi you can set WORKSPACE and MACH variables to point to the values for machine
sstate-manage.sh


# cd into top of workspace say ${WORKSPACE}
MACH=raspberrypi
MACHINE=${MACH} . ./meta-rdk/setup-environment
EXTRALAYERS=`bitbake -e | grep '^BBLAYERS='| tr -s ' ' ','| tr -d '"'| sed -e 's%^BBLAYERS=%%' -e 's%,$%%'`
# remove stale sstate on mirror
${WORKSPACE}/openembedded-core/scripts/sstate-cache-management.sh -v --yes 
          --extra-layer=${EXTRALAYERS} 
          --cache-dir=${WORKSPACE}/sstate-cache 
          --stamps-dir=${WORKSPACE}/build-${MACH}/tmp/stamps


How to enabled/disable kernel/busybox features in Yocto? 

 To enable kernel/busybox features you can append metadata to the recipes (i.e. .bb files) by simply creating an append file (i.e. .bbappend files) and including metadata in it. If the features needs to be enabled across all the platforms then add in meta-rdk-rpi meta or if it’s specific to a platform then append to the recipes available in OEM layer specific to the platform.

Below example shows how to enable IPSec on Yocto builds:  

  • Create a stblinux_%.bbappend
  • Create a file called enable_netkey.cfg with following content 
       CONFIG_NET_KEY=y
  • Add SRC_URI_append = “file://enable_netkey.cfg “

Make sure .bbappend has the same root name as their corresponding .bb recipes.



How to resolve repo sync failures when the branch is few commits behind the master or when it has uncommitted changes?

  • Sometimes when you have a working branch which is not checked out or has uncommitted changes then repo will fail when you try to sync to the latest code base.
  • Sample failure logs:

error: generic/devicesettings/generic/: contains uncommitted changes

error: generic/rdkbrowser/: branch master is published (but not merged) and is now 11 commits behind

error: meta-rdk-oem-X/: contains uncommitted changes

  • To resolve this you need to checkout the branch and rebase it to the master using below commands.

git rebase —abort

git rebase rdkgerrit/master ( or rdkgerrit/stable2)

  • During the process git might throw conflict errors if it cannot merge files automatically. Then you need to merge manually using Vim or any other text editors. But it can be simple if you know exactly what changes needs to be saved / removed.
  • For example you can use below command to keep your changes

git checkout –ours FILE

  • If you want to run on multiple files then use below command.

grep -lr ‘<<<<<<<<’.  |  xargs git checkout –ours

  • Similarly,  you can use below commands if you want to keep other changes.

git checkout –yours FILE

grep -lr ‘<<<<<<<<’.  |  xargs git checkout –theirs



How to move files under PACKAGES to “-dev” pacakge to use for development and debugging purpose?

  • Verify the files from which recipe they are being generated under build-<platform>/buildhistory/packages/mips32el-rdk-linux folder
  • Add the below line format under that particular recipe.

FILES_${PN}-dev += ” file1 file2 etc”

  • Verify that cat <package>-dev/latest  should contain these files under FILELIST. 


How do I find which package provides a file in target file system?

Yocto project build system has a utility which can provide information about which package (ipk or rpm) is providing a given file, this helps in finding further information on packaging e.g. if you want to do more finer packaging, run the following command in your build environment

oe-pkgdata-util find-path /lib/libc.so.6
glibc: /lib/libc.so.6



How to debug a common build failure seen during rootfs creation?

Common build failures are reported in Yocto builds. Some build failures are hard to analyze with logs, unless we get access to the failure workspace. In most cases they are hard to reproduce on local workspace. We go through multiple iteration of builds, lock down the node and then debug. To debug these failures use Packages file found under tmp/deploy/ipk directory on you local workspace .



how to enable GDB in build?

The signal core dump that are generated under /tmp can be decoded using gdb
Procedure :

  1. In <image>.bbappend file
    IMAGE_INSTALL_append = ” gdb”
  2. In local.conf
    INCOMPATIBLE_LICENSE = “GPL-3.0 LGPL-3.0 AGPL-3.0”
    INCOMPATIBLE_LICENSE_pn-gdb = “”
    EXTRA_IMAGE_FEATURES += “tools-debug”
    EXTRA_IMAGE_FEATURES += “dbg-pkgs”
  3. In <component>.bbappend
    CFLAGS += ” -D_DEBUG -g “
  4. Compile and flash the binary to device
  5. Run gdb -c <path to signal dump> <binary>


How to solve this Build issue – Platform target mismatch Error: File format not recognized?

This should be because of architecture bit mismatch . To overcome this should either choose the right target platform or put the executable file as a tar file in bb file.



How to resolve insufficient storage space issue in the build host””ERROR: No new tasks can be executed since the disk space monitor action is “STOPTASKS”?

Issue:

While building the stack, the bitbake process will be aborted if the disk space runs low beyond the minimum requirement.

Example console log:

WARNING: The free space of /mnt/home/gpsahu01/cmf/test/build-qemux86hyb/tmp (/dev/vdb) is running low (0.999GB left)

ERROR: No new tasks can be executed since the disk space monitor action is “STOPTASKS”!

WARNING: The free space of /mnt/home/gpsahu01/cmf/test/downloads (/dev/vdb) is running low (0.095GB left)

ERROR: Immediately abort since the disk space monitor action is “ABORT”!

NOTE: Sending SIGTERM to remaining 1 tasks

Possible solution:

Yocto stack requires more than 30 GB of free disk space for build to complete, so it is required to keep sufficient disk space available before starting the build process.



How to resolve missing “sys/cdefs.h” issue in random recipe files which might give “ERROR: oe_runmake failed” error?

Issue:

Bitbake complains about a missing “sys/cdefs.h” and the error can be encountered in random recipes when we move from one build host to other.

Example console log:

compilation terminated.
| In file included from /usr/include/stdio.h:27:0,
|                  from ./src/kern_head.c:13:
| /usr/include/features.h:374:25: fatal error: sys/cdefs.h: No such file or directory
|  #  include <sys/cdefs.h>
|                          ^
| compilation terminated.
| In file included from /usr/include/stdio.h:27:0,
|                  from ./src/sstrip.c:9:
| /usr/include/features.h:374:25: fatal error: sys/cdefs.h: No such file or directory
|  #  include <sys/cdefs.h>
|                          ^
| compilation terminated.
| make: *** [encode] Error 1
| make: *** Waiting for unfinished jobs….
| make: *** [kern_head] Error 1
| make: *** [sstrip] Error 1
| ERROR: oe_runmake failed
| WARNING: exit code 1 from a shell command

Possible Solution:

This issue may be caused by a missing “g++-multilib” package in the build host (observed in Ubuntu 14.4). Installing the package with “sudo apt-get install g++-multilib” should resolve this issue. Also the build machines should be configured following the procedure as per Setup guide to avoid similar issues.



Bitbake complains about a non-existent path, invalid environment variable etc. with “ERROR: Function failed”,”ERROR: ParseError”? How to resolve this?

Issue:

The bitbake process terminates after complaining about a non-existent path or environment variable.

Example console log #1:

ERROR: Function failed: iarmbus: LIC_FILES_CHKSUM points to an invalid file: ${RDK_ROOT_PATH}/components/generic/iarmbus/core/include/libIARM.h

Example console log #2:

ERROR: ParseError at /mnt/home/gpsahu01/cmf/test/meta-virtualization/recipes-extended/images/cloud-image-controller.bb:29: Could not inherit file classes/image-vm.bbclass

Possible solution:

This may be due to a wrongly setup environment e.g. we have executed “meta-rdk/setup-environment” instead of sourcing “meta-cmf/setup-environment”



Bitbake fails with “fatal: Not a git repository” after selection of option in meta-cmf/setup-environment, and why?

Issue:

The issue is observed during setup and machine selection stage, setup-environment script will throw unexpected error about non-existing layer paths.

Example console log:

gpsahu01@dvm-wcdcc-tata-001:~/cmf/emulator-2.1-20160919$ source meta-cmf/setup-environment

1) meta-raspberrypi/conf/machine/raspberrypi0.conf             7) meta-rdk-bsp-emulator/conf/machine/qemux86hyb.conf

2) meta-raspberrypi/conf/machine/raspberrypi2.conf             8) meta-rdk-bsp-emulator/conf/machine/qemux86mc.conf

[…]

Please enter your choice of machine [1..11]: 7

### Shell environment set up for builds. ###

Writing auto.conf …

Writing versions.txt …

-bash: cd: ../meta-browser//: No such file or directory

fatal: Not a git repository (or any parent up to mount point /mnt)

Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

-bash: ../patches/rdk-oe/meta-linaro//*.patch: No such file or directory

-bash: cd: ../meta-openembedded//: No such file or directory

fatal: Not a git repository (or any parent up to mount point /mnt)

Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

Possible solution:

If the host PC has set colored terminal output for commands then it may cause unexpected errors being shown during execution of meta-cmf/setup-environment script. To fix the problem we can run following command:

gpsahu01@dvm-wcdcc-tata-001:~/cmf/emulator-2.1-20160919$ alias ls=’ls –color=no’



Network related issues:

a) How to resolve “Fetch failure/ timeout errors” Eg:”error: Exited sync due to fetch errors”?

Issue:

Fetch timeout or failure can happen due to following network problems.

–          Network not accessible

–          Restriction in Firewall

–          Invalid Proxy configuration

–          Unable to resolve DNS in IPv6 networks

Example console log:

Fetching projects: 96% (91/94) Fetching project openembedded/meta-linaro
Fetching projects: 97% (92/94) fatal: read error: Connection timed out
fatal: read error: Connection timed out
fatal: read error: Connection timed out
error: Cannot fetch meta-virtualization
warn: –force-broken, continuing to sync
Fetching projects: 98% (93/94) error: Cannot fetch meta-java
warn: –force-broken, continuing to sync
Fetching projects: 100% (94/94)
error: Exited sync due to fetch errors

Possible solution:

–          Using VPN may have some restrictions sometime it may not allow GIT access.

–          Ensure that the ports for HTTPS, SSH, HTTP are opened by the firewall and the policy doesn’t block common open source repositories.

–          In case of IPv6 networks issues, force GIT to use IPv4.

Also Following options can be considered while debugging:

Option #1) Need to flush the IP rules:
enter the command
$ iptables -F
and check
$) git clone git://git.lighttpd.net/lighttpd/lighttpd-1.x.git

Option #2) Check for the port 22 is open or not by doing nmap
$ nmap -p 22 10.11.107.0-255″
(check for ipaddress 10.11.106.62)
$ ssh -v git@github.com
if it adds it will ask for input()yes/no- Type yes
$ git clone git://github.com/lighttpd/lighttpd1.4.git;branch=lighttpd-1.5.x

Option #3) replacing the git// with https:// which uses port 443
$ git config –global url.”https://”.instead of git://
and try $ “git clone git://git.lighttpd.net/lighttpd/lighttpd-1.x.git

Option #4) in a few cases, the access to GIT repository is via SSH. To use SSH URLs with GIT repository, an SSH key-pair must be generated on the build PC and add the public key to your GitHub account.
For information on setting up an SSH key-pair, see “Generating an SSH key.”
https://help.github.com/articles/generating-an-ssh-key/



Open source software related issue:

a)Unable to find revision or branch from upstream  “ERROR: Fetcher failure: Unable to find revision ,ERROR: Function failed: Fetcher failure for URL”, How to solve this?

Issue:

When we try to build a very old branch of the code, the manifest file will not be up-to-date as few of the open-source URLs might not be continuing support of older branches or versions of software.

Example console log:

WARNING: Failed to fetch URL git://code.qt.io/qt/qtlocation.git;branch=stable, attempting MIRRORS if available
ERROR: Fetcher failure: Unable to find revision f28408346243cf090326f4738fd838219c21e00f in branch stable even from upstream
ERROR: Function failed: Fetcher failure for URL: ‘git://code.qt.io/qt/qtlocation.git;branch=stable‘. Unable to fetch URL from any source

Possible solution:

It is recommended to build with more recent branches, as the code will be well maintained and will have updated features.


b)How to resolve problems caused due to the source URL is no longer available/ site is down with the error “ERROR: Function failed: Fetcher failure for URL?”

Issue:

An Open source URL is broken either due to the website is down temporarily or it is permanently removed.

Example console log:

WARNING: Failed to fetch URL http://directfb.org/downloads/Core/linux-fusion/linux-fusion-9.0.3.tar.gz, attempting MIRRORS if available
ERROR: Fetcher failure: Fetch command failed with exit code 4, no output
ERROR: Function failed: Fetcher failure for URL: ‘http://directfb.org/downloads/Core/linux-fusion/linux-fusion-9.0.3.tar.gz‘. Unable to fetch URL from any source

Possible Solution:

Temporary workaround: In case of archives (.tar or .zip etc.), if the file is available from a previously built stack then it can be copied and an empty file with the name <archive-name>.done has to be created to bypass looking for downloading the file.

Fixing the recipe: If the problematic recipe is available from any other alternative mirror, update the same in SRC_URI part of the recipe. Few components may be available in common mirrors such as github, web.archive.org, oipf.tv etc.



While building image for “rdk-generic-mediaclient-image”, the build is almost completed (98%) but getting virtual memory exhausted error and the build fails with failed with exit code ‘1’  for wpe-webkit. What is the solution?

Looks like memory issue hence changing Ubuntu to 64 bit version should resolve the issue. The below are the Ubuntu configurations,

  • Ubuntu 16.04 – 64 bit
  • 6GB RAM

16GB Swap



How to enable/disable a FEATURE in build?

To include a specific feature that is not available in base build, enable the feature specific DISTRO flag in platform specific config file. For example to include USPA feature in Rpi build,

Add the DISTRO specific flag in Rpi platform specific conf file

In File meta-cmf-raspberrypi/conf/distro/include/rdk-rpi.inc

Add DISTRO_FEATURES_append = ” usppa” (to include the feature if not there)

DISTRO_FEATURES_remove = ” usppa” (to remove the feature)

Make sure the recipe is part of the package build

In File meta-rdk/recipes-core/packagegroups/packagegroup-rdk-ccsp-broadband.bb must be included as a DISTRO protected feature RDEPENDS_packagegroup-rdk-ccsp-broadband += ” ${@bb.utils.contains(‘DISTRO_FEATURES’, ‘usppa’, “usp-pa”, “”, d)}”



How to solve error due to RDK_FLAVOR not defined?

ERROR: ParseError at /home/a1602446/build-raspberrypi-rdk-broadband/conf/local.conf:247: Could not include required file conf/distro/include/##RDK_FLAVOR##.inc

Above error occurs intermittently, which can be fixed by retrying the source command for setup_environment file.

In case of Rpi, it is 

  • source meta-cmf-raspberrypi/setup-environment


How to enable or disable any feature using macro?

Please refer Compile-time Build Variants Flags



Random issues appearing when the previous build process was aborted

Issue:

Bitbake fails on populate sysroot state when building with an un-clean stack.

Example console log:

ERROR: Function failed: llvm_sysroot_preprocess (log file is located at /mnt/home/gpsahu01/cmf/test/build-qemux86hyb/tmp/work/i586-rdk-linux/llvm3.3/3.3-r0/temp/log.do_populate_sysroot.9648)

Possible solution:

This may happen when a previous build process was unexpectedly terminated or aborted. Re-build after cleaning the problematic recipe or image (bitbake <recipe> -c cleanall) would fix the issue.



Issues related to patching (ERROR: Function failed: patch_do_patch)

Issue:

Bitbake terminates the compilation process on ‘do_patch’ task. This may happen in following cases:

–          When using an old recipe file where the SRC_URI link has updated its folder structure.

–          Wrongly formatted patch file (run dos2unix for conversion)

–           Incorrect patch level (p0, p1, etc.)

Example console log:

ERROR: Command Error: exit status: 1 Output:
Applying patch 0001-src-Makefile.am-Dont-check-if-we-are-cross-compiling.patch
can’t find file to patch at input line 18
Perhaps you used the wrong -p or –strip option?
The text leading up to this was:
————————–

diff –git a/src/Makefile.am b/src/Makefile.am

index eb50e37..c1e3d64 100644

— a/src/Makefile.am

+++ b/src/Makefile.am
————————–
No file to patch. Skipping patch.
2 out of 2 hunks ignored
Patch 0001-src-Makefile.am-Dont-check-if-we-are-cross-compiling.patch does not apply (enforce with -f)
ERROR: Function failed: patch_do_patch

Possible Solution:

From the above output it seems that the file to which patch will be applied is not found, possible reason may be the source folder structure doesn’t match with the destination folder structure. E.g. the source directory or ${S} starts from the relative path ‘src’ folder and we are trying to patch outside of it.

By default bitbake patches the files with patch level ‘p1’ so creating a patch file which matches destination folder structure would solve this issue. Another option is to alter the patch level. E.g.

SRC_URI += file://docsis_3383.patch;striplevel=0



Invalid md5sum error (md5sum mismatch in recipe,ERROR: gst-plugins-playersinkbin-noop: md5 data is not matching)

Issue:

Bitbake complains about md5sum mismatch when a recipe has retained old md5sum value while the source file is updated.

Example console log:

ERROR: gst-plugins-playersinkbin-noop: md5 data is not matching for file://gstplayersinkbin.c;md5=0f518921aef846c156f91ce4dd6b7c76
ERROR: gst-plugins-playersinkbin-noop: The new md5 checksum is 958142c8f2783c6c4f357f561585b4da

Possible solution:

Update the new md5sum value of the file in recipe. This can be done using following steps:

:…/meta-rdk/recipes-extended/gst-plugins-playersinkbin/files$ md5sum -t gstplayersinkbin.c
958142c8f2783c6c4f357f561585b4da gstplayersinkbin.c

Now change the above value in recipe:

LIC_FILES_CHKSUM = “file://gstplayersinkbin.c;md5=958142c8f2783c6c4f357f561585b4da ”



How to solve ”Invalid syntax” error due to python version mismatch during repo commands?

Example Console Log :

repo: warning: Python 2 is no longer supported; Please upgrade to Python 3.6+.
Downloading Repo source from https://gerrit.googlesource.com/git-repo
remote: Finding sources: 100% (32/32)
remote: Total 32 (delta 14), reused 32 (delta 14)
Unpacking objects: 100% (32/32), done.
File “/mnt/home /cmf/.repo/repo/main.py”, line 79
file=sys.stderr)
^
SyntaxError: invalid syntax

If you’re using an older system without Python 3.6+, try downloading an older version of the Repo Launcher that still supports Python 2.7.

Possible Solution :

# create a bin directory

mkdir ~/bin

export PATH=~/bin:$PATH

curl https://storage.googleapis.com/git-repo-downloads/repo-1 > ~/bin/repo

chmod a+x ~/bin/repo



How to solve Issue due to do_fetch error?

ERROR: trower-base64-git+AUTOINC+fbb9440ae2-r0 do_fetch: Fetcher failure: Unable to find revision fbb9440ae2bc1118866baefcea7ff814f16613dd in branch master even from upstream

ERROR: trower-base64-git+AUTOINC+fbb9440ae2-r0 do_fetch: Fetcher failure for URL: 'git://github.com/Comcast/trower-base64.git'. Unable to fetch URL from any source.

ERROR: trower-base64-git+AUTOINC+fbb9440ae2-r0 do_fetch: Function failed: base_do_fetch

ERROR: Logfile of failure stored in: /builds/__repo/build-brcm968360GW/tmp/work/cortexa7t2-vfp-rdk-linux-gnueabi/trower-base64/git+AUTOINC+fbb9440ae2-r0/temp/log.do_fetch.18310

ERROR: Task (/builds/__repo/meta-rdk-ext/recipes-support/trower-base64/trower-base64_1.0.bb:do_fetch) failed with exit code '1

Few points to check here,

  • First check if the SRC_URL can be accessed manually in browser

  • Check the path of the URL is proper and check the branch detail as well

For example, above error can be fixed by appending branch=main in the SRC_URL path


Where to Find


Reference Platform

Why the command dmcli eRT getv datamodel is failing in emulator?

The dmcli command for emulator platform use simu instead of eRT and this is the reason for failing in emulator.

A sample command is :

dmcli simu getv Device.



RDK-B


We see in the list of supported features in RDK-B Reference Platform: so, without WPS how will the devices connect over WiFi to a Raspberry Pi running RDK-B reference platform?

The devices can connect over wifi to Raspberrypi by knowing the SSID and the corresponding password of the RaspberryPi Wifi network, which will be WPA2-PSK protected.



Emulator


Is it possible to get pre-built RDK-B emulator image to run on VirtualBox?

As of now, RDKM is not providing a ready-to-use pre-built image for emulator. But you can easily create an emulator build in an Ubuntu linux machine by following the instructions given at https://wiki.rdkcentral.com/display/RDK/RDK-B+Emulator+Build+Guide 



Turris Omnia


How to upgrade/downgrade u-boot in Turris Omnia?

mkdir tmp/;
cd tmp/
wget https://repo.turris.cz/hbl/omnia/packages/turrispackages/u-boot-omnia_2019-07-7_arm_cortex-a9_vfpv3.ipk
tar xf u-boot-omnia_2019-07-7_arm_cortex-a9_vfpv3.ipk
tar xf data.tar.gz
cd usr/share/omnia/
flash_eraseall /dev/mtd0
nandwrite /dev/mtd0 uboot-devel
cd ../../../..
rm -rf tmp



How to upgrade/downgrade rescue image in Turris Omnia?

mkdir tmp; cd tmp/
wget https://repo.turris.cz/hbl/omnia/packages/turrispackages/rescue-image_3.2-1_arm_cortex-a9_vfpv3.ipk
tar xf rescue-image_3.2-1_arm_cortex-a9_vfpv3.ipk
tar xf data.tar.gz
cd usr/share/rescue-image/
flash_eraseall /dev/mtd1
nandwrite /dev/mtd1 image.fit.lzma
cd ../../../..
rm -rf tmp



How to resolve “Bad Linux ARM zImage magic!” when installing medkit image?

When we pass Legacy zImage(kernel) image with newer model of turris Omnia we get this error. We need to provide FIT rescue image for newer model of Turris Omnia



How to recover from corrupted RDKB image and flash new image with OpenWRT (Older model of Turris Omnia has failsafe OS)?

Go into u-boot prompt and get back to OpenWRT (failsafe) OS
=>env set yocto_mmcload false
=>saveenv
=>reset

Format /dev/mmcblk0p3 and /dev/mmcblk0p5 and new RDKB firmware into p3 and p5 partitions
To get back to RDKB image
=>env set yocto_mmcload setenv bootargs “$yocto_bootargs cfg80211.freg=$regdomain”; ext2load mmc 0:3 0x01000000 zImage; ext2load mmc 0:3 0x02000000 armada-385-turris-omnia.dtb
=>saveenv
=>reset



How to recover from corrupted RDKB image and flash new image without OpenWRT(Newer model of Turris omnia)?

Follow “Flashing with Medkit & Sysupgrade images” section in https://wiki.rdkcentral.com/pages/viewpage.action?pageId=114986683



What are different Image formats?

Legacy and FIT image



How firmware upgrade works for Turris Omnia?

TurrisFwUpgrade.sh is written with two models in mind(older and newer)Older model has this partitions in internal flash
mmcblk0p1 – openwrt bootfs
mmcblk0p2 – openwrt rootfs
mmcblk0p3 – rdk bootfs
mmcblk0p4 – Extended partition
mmcblk0p5- rdk rootfs(1)
mmcblk0p6 – nvram
mmcblk0p7 – rdk rootfs(2) for firmware upgradeNewer model has this partitions in internal flash
mmcblk0p1 – rdk bootfs
mmcblk0p2 – rdk rootfs(1)
mmcblk0p3 – rdk rootfs(2) for firmware upgrade
mmcblk0p4 – Extended partition
mmcblk0p5 – nvramThis TurrisFwUpgrade.sh script will fill new rootfs in alternate partition swap the rootfs partition and copy zImage (in bootfs) in internal flash memory.



RDK-Camera


How to change resolution to capture data from camera?

We can change the resolution in rms.conf file that is there in /ust/local/rms/bin/ directory.



Have you used any cloud server to store 24*7 buffer for CVR?

Yes, we have used AWS server to store 24*7 data for CVR.



How to Capture data from camera?

Use gstreamer plugin mainly, v4l2src plugin to capture data from camera.



Why it is not possible to access webpage to view the live streaming content to check RMS feature?

AS of now we used confidential page to check this feature,we are trying to support google based signalling server to resolve this conflict.



Which “Encoded” format supported for RMS liver streaming and CVR?

h264 encoded format is supported for RMS live streaming and Continuous video recording(CVR).


RDK-V

Does the RDK license cover the Digital Living Network Alliance (DLNA)?

No. An organization must be a member of the Digital Living Network Alliance to obtain a DLNA license.



As there is no Digital Media Server in RDK, which module provides content for DLNA?

Media-streamer module provides content for DLNA. The implementation is a part of the media-streamer component, and is implemented on top of the libgupnp code.



Do the RDK Servers run with DLNA link protection?

Yes



How do I download old versions of rdkv-xxxxqx?

Use below command format –

  • repo init -u https://code.rdkcentral.com/r/manifests-m rdkv.xml -b rdkv-20200207                    

(The quarterly release name can be given with -b option)



how to add event listeners and subscribe the available events in dash.js?

It is possible to consume mediaplayer events in Lightning -http://cdn.dashjs.org/latest/jsdoc/streaming_MediaPlayerEvents.js.html

Example:

const events = [“playbackStateChanged”, “playbackCompleted”, “playbackSpeedChanged”,

“playbackFailed”, “mediaMetadata”, “timedMetadata”, “playbackProgressUpdate”,

 “playbackStarted”, “bufferingChanged”, “durationChanged”, “decoderAvailable” ];

events.forEach(event => {

 player.addEventListener(event, (e) => {

 this.fire(event, {event: e});

});            

});



In which scenarios an application need to use service manager API if IARM Bus interface is already available?

IARM bus interface are used to get the events notification from the system level like IR key, power, storage space, etc. could be better used in native apps.

Servicemanager acts as a subscriber who will receive the events from IARM Bus and post it to MSO Backend. The ServiceManager is the one well known facility for cloud-based applications to gain access to device vended functionality whether they are written in HTML 



If one has to write a new Service for ServiceManager, would the base class be Service, or AbstractService?

The better alternative is of course the “AbstractService” class as it is the newer version and derived from the “Service” class and has a superset of features of the service class. However, pure virtual functions may be useful for enforcing OOPS convention of data hiding and abstraction.



How to add new parameters to TR069 data model? Which files needs to be modified in order to “see” the parameters on the emulator?

First modify the config/xml file which will be there in the component you are writing objects and then respective handlers you have to call in xml.



Does WPE support Web Assembly?

  • WPE doesn’t support WebAssembly.
  • It wont be faster for general use cases and memory management is worse since it’s a fixed heap without garbage collection.
  • Web assembly is interesting but currently they’re targeting big monolithic codebases in c++ etc like games but more on desktop memory profiles. All the feedback we got thus far has told us their experience hasn’t been a win on perf or memory


Does Comcast support canPlayType() for determining codec support?

WPE WebKit has limited support for HTMLMediaElement.canPlayType() and MediaSource.isTypeSupported(). It implements checks for container, video width/height/framerate, and basic verification of codec (it doesn’t check for profile & level)



DASH.js has a problem with sending license requests to a playready server,Why?

Make sure DASH.js uses utf-8 as a content type format for license requests (playready challenge is utf-8 encoded)



Does media element would support directly playing HLS and/or DASH, if so can we avoid using Google’s Shaka if wanted?



Is there any native rendering of subtitles like 608/708, SRT, WebVTT, TTML, etc? Can we add or select subtitle tracks via the media element. Is there limitations based on protocol or media container (HLS, DASH, MP4, MKV)?

  • WPE: no native subtitles support (608/708 could be integrated from main UI application) 


Can we select the audio track to use via the media element? Often media can have multiple audio tracks in different languages and/or commentary?

WPE media element: no audio track selection;  WPE MSE Google Shaka: selectAudioLanguage(language, role), or selectVariantTrack(track);   WPE AAMP UVE: set



How to open a website that requires MoneyBadger in Chrome?

Inject the following JS code to handle MoneyBadger requests (some)
window.ServiceManager = {};
     window.ServiceManager.version = ‘2.0’;
     window.ServiceManager.getServiceForJavaScript = function(name, serviceReadyCb) {
         class BridgeObject
         {
             JSMessageChanged(msgStr)
             {
                 let msg = JSON.parse(msgStr);
                 console.log(‘badger action=’, msg.action, ‘pid=’, msg.pid);
                 if (msg.action === ‘deviceCapabilities’ || msg.action === ‘info’) {
                     setTimeout((msg) => {
                         let caps = {
                             videoDimensions: [3840, 2160],
                             hdr: { settopHdrSupport: ‘DolbyVision’, tvHdrSupport: ‘DolbyVision’ },
                             hdcp: { connected: true, currentHDCPVersion: ‘2.2’ }
                         }
                         window.$badger.callback(msg.pid, true, caps)
                     }, 0, msg);
                 } else {
                     window.$badger.callback(msg.pid, false, {})
                 }
                 return true
             }
         }
         if (name === ‘com.comcast.BridgeObject_1’)
             serviceReadyCb(new BridgeObject);
     }



HTTPS: What TLS versions and which ciphers are supported by rdkbrowser2 / WPE?

 Open <span style=”color: #0000ff”><a href=”https://www.ssllabs.com/ssltest/viewMyClient.html” class=”external-link” rel=”nofollow”>https://www.ssllabs.com/ssltest/viewMyClient.html+</a></span> on box to get a report of supported TLS versions and ciphers



Is it possible to use a remote control with rdkbrowser2.sh?

Yes, it is possible to use a remote control with rdkbrowser2.sh

 touch /opt/remote_input_enable  and reboot.



Is local storage feature available in WPE Browser?

By default local storage is disabled. If the app requires this support, you need to contact Project management to enable it for the specific app.



With regards to crashupload is there a feature to prevent the deletion of the corefiles from the box, which is useful during development and integration?

You can modify the script to avoid the deletion of older files:

https://code.rdkcentral.com/r/plugins/gitiles/rdk/components/generic/crashupload/+/refs/heads/rdk-next/uploadDumps.sh#321



How is the Turner Reservation Manager (TRM) used to allocate a tuner to a QAM source?

Client requests a tuner through URL(http,live), TRM server receives the request and checks for the valid reservation and reserves the tuner so that the client is provided with the service requested. Client also can extend or delete the reservation. It is also possible for a client to request a list of the active reservations.

For more details, Please refer https://wiki.rdkcentral.com/display/RDK/TRM#TRM-HowTRMworks



To get CPE/RF MAC address of the STB, is there an API or standard RDK way to obtain this that will not be hardware specific?

getDeviceInfo() – Retrives the device information of the device .
To get a mac address getDeviceInfo() needs to be called with string “getMacAddress” as an argument like getDeviceInfo(“macAddress”)



Does RDK have support for Fast Channel Change?

Yes , Please refer this link : Session Manager



Does user need to sign any special license or pay a fee to use Amazon Alexa voice Integration service if he/she has Alexa Echo Dot configured in their home Wifi?

NO



How scalable and secure is the current solution- RDK Alexa Echo Dot Voice Application?

End state architecture has scalability and security built into it.Refer RDK Alexa Echo Dot Voice Application 



Is there any example for gstreamer to enc/dec media file?

This is a sample pipeline to play dtcp encrypted content using gst-launch

gst-launch-1.0 httpsrc location=”http://127.0.0.1:8080/hnStreamStart?live=ocap://0x2c23&continueTSB=true” blocksize=131072 ! dtcpdec dtcp-src-ip=”127.0.0.1″ dtcp-port=5000 buffersize=131072 ! playersinkbin is-live=true.



Where to find the include header files of a component?



How to get the crash dump for box reboot?

  • The coredump files will be available in following directory for a systemd based box – /var/lib/systemd/coredump/
  • Additionally for system logs, you can browse through following files in /opt/logs –
    1. core_log.txt

    2. rebootInfo.log

    3. messages.txt

  • Previous boot Logs can be also seen from  /opt/logs/PreviousLogs/


OPKG shows me only the packages already installed and is unable to update them. What tool can I use to install packages?

There is no package manager support for downloading/installing packages. However you can manually install ipk packages.



Wondered if there was a screen resolution setting to force the rdk hardware to a given resolution?

RDK Device Settings is the component which handles the following configurations:

  • Audio Output Ports (Volume, Mute, etc.)
  • Video Ouptut Ports (Resolutions, Aspect Ratio, etc.)
  • Front Panel Indicators
  • Zoom Settings
  • Display (Aspect Ratio, EDID data etc.)
  • General Host configuration (Power managements, event management etc.)

These properties are persisted in the STB and are read/applied on each boot-up.

For example: On a RDK emulator, the device setting properties are persisted in ‘/opt/persistent/ds/hostData’ .

There are few sample applications available to test/force the settings e.g. setResolution can be used to force the resolution settings.



What are the logging requirements for the Comcast RDK?

The Comcast RDK requires kernel logs, DOCSIS ECM logs, and syslog messages to be logged into specific files. These details can be provided by Comcast on request. The RDK set-top diagnostics and troubleshooting infrastructure requires these logs to be present and accessible via the ESTB interface to aid in the rapid troubleshooting of the device during development and deployment.



Can you clarify the partitioning scheme and other requirements for on-board flash memory and disk drives?

Flash and hard disk drive (HDD) requirements for RDK devices will differ depending on the deployment configuration. For example, a DVR will have an HDD but some other devices will not.

Flash is used to store the advanced bootloader (ABL), primary and secondary firmware images, serialization data, and other data that need to persist, including logs. Where possible on HDD devices, the HDD is leveraged to store dynamic content leaving flash on those devices to be primarily read-only. The partitioning scheme for on-board flash and HDD will therefore differ depending on the physical makeup of the device.  

Please contact Comcast for more information.



Do libcrypto, openSSL and libpgp need to follow robustness rules in their implementation, as with DRM? Or are they just ported as is on the platform? Do they need to be optimized in hardware?

libcrypto, openSSL and libpgp can be ported as it is. However the SoC security APIs need to be implemented to support Comcast security requirements.

There are no requirements for hardware optimization.

RDK-V UI


How to copy build/dist into rpi from dev pc?

  • Connect your device with lan and get the box/device ip, make sure your dev pc and device is connected with the same network, so that you will be able to access your device from dev pc.
  • From dev pc: $ scp -r <dist or build folder which contains index.html, appBundle.js and other files> root@<your box/device ip:/home/root>


Where to find residentapp.sh file to configure resident App or offline app?



ThunderUI, How to resolve concurrently ‘npm run watch’ ‘npm run serve’ issue in windows 8/10?

Execute $ npm run watch and then npm run serve separately in separate terminal.(tried on VS code)



ThunderUI, How to resolve ‘NODE_ENV’ is not recognized as an internal or external command operable program or batch file. while executing npm run build?

For this,Install windows node env globally:

$ npm install -g win-node-env


RDK-B

After building the full Raspberry Pi image, the rootfs doesn’t seem to contain libpcap. So, although the rootfs of emulator build does contain it. Any specific reason for such difference?

  • The rootfs doesn’t contain libpcap.so, as tcpdump utility is not appended in the packagegroup-rdk-oss-broadband.bbappend file in the Raspberry-pi build whereas you can find the tcpdump utility appended for the corresponding file for Emulator build.
  • So, if we include tcpdump utility in the above mentioned file, libpcap. So file will be present in the rootfs of the raspberry-pi build.
  • See below output from the raspberry-pi device after adding tcpdump –

root@RaspberryPi-Gateway:/# find . -iname libpcap* ./usr/lib/libpcap.so.1.7.4 ./usr/lib/libpcap.so.1



 Is it possible to just download the pre built image of RDK-B that can be loaded onto an SD card without having to build it?



Why eRT subsystem fails on emulator?Is this because of the absence of embedded router?

The eRT (embedded router) subsystem is generally used to perform dmcli operations on Raspberry pi which can function as a basic router. To perform dmcli operations in emulator we use simu.



What are the steps involved in compiling the Go Lang application? Do you have yocto recipes for the same?

We’re simply building the application using go build (without any Yocto recipes) as shown below –

env CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=1 go build



Does RDK officially support GO Lang compiled binaries? As the base of RDK seems to be linux, is it safe to assume that, the GO compiled program binaries will run normally on RDK-B? What are the steps involved in compiling the Go Lang application?

  • RDK officially doesn’t support GO language compatibility. But you may always try GO binaries as most RDKM code bases are based on Yocto open-embedded builds and the binaries work out of the box.
  • You can simply build the application using go build (without any Yocto recipes) as shown below –
    • env CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=1 go build


Which types of data models/namespace are available under the eCM subsystem like “Device.WiFi.” under eRT?



Is there any support for containers in RDK-B as of today?

Please refer https://wiki.rdkcentral.com/display/RDK/RDKB+Containerization+in+RPI+-+User+Manual+-+2019+M3 .



How to enable debug logs for a component ?

Below are the two ways to enable debug logs for component

  1. adding prints in the respective place of code
  2. using rdkb logger(LogAgent) .
    LoggerEnable – to enable/disable logs for particular component. If it is TRUE logs are enabled otherwise logs are disabled.
    LogLevels – To set different log levels for each component. By default all modules log level is 4 (RDK_LOG_INFO).


What are the steps to run valgrind for ccsp components?

The steps are –

  • Port valgrind to the platform (if not already available)
  • Compile the component with debug symbols enabled (i.e, avoid stripping the component executable/library. alternatively, you may replace the stripped binary with unstripped binary if it is not a read-only image)
  • Stop the service and start the binary as part of valgrind (just like we load any normal binary using valgrind)
  • Once you have enough data collected (or observed the issue you were trying to debug), you may stop it and examine the xml file for details.


Describe a way to get ipset on RDK-B Emulator?

  • ipset is available in real RDK-B devices( like the XB6 devices for example). To enable ipset for RDKB emulator, you can do that as the yocto recipes for ipset are already available at /meta-openembedded/meta-networking/recipes-extended/ipset/38.bb
  • You need to add the recipe to the package group for emulator to use it up during build time (you may add them in ./meta-rdk-bsp-emulator/recipes-core/packagegroups/packagegroup-rdk-ccsp-broadband.bbappend)


How to customize kernel modules for RDK-B emulator?

Follow the below steps to customize kernel –

  • Need to Create config file within linux bb/bbappend file available directory
    Path: meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi
    ( XXX.cfg ) – Example:camera.cfg
  • Configuration parameter addition: Add config data to created config file so as to enable it. For example, add the below line to our camera.cfg file
    CONFIG_VIDEO_BCM2835=y
  • Need to add created config file under SRC_URI of linux bb/bbappend file mentioned in step 1
    SRC_URI = “file://camera.cfg”
  • Do compilation and Installation
    bitbake “component-name” -c compile -f
    bitbake “component-name” –f


Is there igmp_snooper program in RDK-B?

Yes, igmp_snooper program is present in RDK-B .

  • There is a shell script named “service_mcastsnooper.sh” under /etc/utopia/service.d directory, and in the script, it will execute “igmp_snooper $sw_opt $if_opt $querier_opt 



What are the possible solutions available to manage RDK-B Data Model?

The data model can be managed via TR-069 , TR-181, management protocols like SNMP, WebUI, WEBPA .



How to know the Ccsp components reside in which subsystems? {e-x, Device.WiFi. falls under eRT subsystem. likewise for eCM subsystem)

  • The eCM and eRT subsystems will always coexists in a DOCSIS based WAN frontend gateway devices. Any request for eCM parameters will be routed to eCM Message Bus Adapter component which uses SNMP or other protocols to talk to the cable modem firmware in the backend.
  • In Rpi, we have only eRT and in emulator we have simu.
  • eCM is applicable only to DOCSIS based devices , which uses SNMP based OIDs.


What is the minimum rdkb hardware requirement and functionalities supported by minimum requirement ?

Minimum Hardware requirement :

  • A Raspberry Pi 3B with the below configuration can be an ideal minimum requirement to support most of the functionalities for RDK-B.
  • The configuration of RPi 3B is CPU: Quadcore 1.2 GHz Broadcom BCM2837 64bit with 1GB RAM.
  • R-Pi 3B would be sufficient for the basic wireless functionality using 2.4GHz. In case of 5 GHz band support R-Pi 3B+ would be good (Note : R-Pi 3B+ doesn’t support simultaneous dual band operations).
  • Flash: The minimum size is around 285 MB. Anything above this should work just fine for loading/storing the build.
  • RAM: As far as the logs/database is concerned, anything around 16 MB should be sufficient.

The above requirement supports all the basic functionalities  of RDK-B.



Is RPC-download implementation not included in current RDK-B source code? After downloading and reviewing RDK-B source code, I can’t find the source code to implement RPC-download to download firmware & make firmware upgrade. The namespace responsible for RPC-download defined in tr069pa is “com.cisco.spvtg.ccsp.fu.Configuration.”, but no program registers this namespace.

  • RPC download is not supported in RDK-B.
  • RDK-B never had “cisco.spvtg.ccsp.fu.Configuration”. This part of the code has come through initial code drop and is deprecated.


Can we modify wifi configuration of router through command line such as modifying ssid name, ssid password, wifi security protocol etc in RDK?

Yes. RDKB has the below options to modify SSID name, password, security protocol etc.

  • A WebUI, where you can modify these items just like the UI for most normal routers.
  • ‘dmcli’ command line utility which will execute TR69 commands to modify the mentioned items.    


Is it possible to interact with TR-181 data model with IPC (inter process communication)? Assume that there is a service running on RDK-B stack that wants to change WiFi setting or get the status of WiFi from data model. If possible, is there any specification available to communicate with RDK-B stack?

Yes. You can invoke the data models via dmcli commands from your service or via Cdm_GetParam set of APIs from your code. The TR-181 data model specifications that are available in the TR-181 data model XML for each component can be referred.



In current source code, the client side MUST install device private key and certificate files which are pair for ACS certificate, then it possible to have HTTPS connection with ACS. HTTPS is not supported in case of NO device key and certificate files pre-installed, right?

The CA certificate file and device certificate/private key can be configured in ccsp_tr069_pa_cfg.xml for https support.



How to create a temporary guest wifi remotely (via WebPA, TR-069) on a RDK-B?

There are already reserve SSID for Guest WiFi network. Just enable the SSID using the respective DM to get the features in place.



What is jst and duktape in webui ?

Duktape is a lightweight javascript engine (https://duktape.org/). Alone it does not provide a web development engine like php or node.js. Therefore,on top of duktape there is a templating engine(called jst) and web server api. To make migration as easy as possible the style of templating and api signiture will match php as closely as possible. Many php functions and variables will be rewritten in javascript, so that changes to the exist code is minimized.



What is Persisting firewall rule?

It actually defines what kind of Internet traffic is allowed or blocked. For more details, Please Refer : https://wiki.rdkcentral.com/display/RDK/Firewall+-+Rule+persistence



What is the procedure to add new parameter to the existing object?

Please refer https://wiki.rdkcentral.com/display/RDK/Integration+Guide+for+third-party+applications+into+RDK-B+stack .



I am trying to setup a connection between rasp pi and my Web server. I have raspberry pi 3 B+ with RDK-B image on it. I am not able to find parodus logs in it. How to find the logs?

Use journalctl -xu parodus or can look for parodus.log in the log folder i.e. /rdklogs/logs/.



How to upgrade python version in yocto as part of image build?

In <image>.bbappend file , upgrade python version using ROOTFS_POSTPROCESS_COMMAND
Code :

#python upgrade
IMAGE_INSTALL_append = " python3 "
ROOTFS_POSTPROCESS_COMMAND += "enable_python3; "
enable_python3() {
ln -sf /usr/bin/python3 ${IMAGE_ROOTFS}${bindir}/python
}

On compiling the code and flashing the image , python3 will be available in your board . Check with below command.

root@RaspberryPi-Gateway:~# python --version
Python 3.5.2



What to do if I encounter a Checksum mismatch while building image for RaspberryPi?

Checksum mismatch error is related to Fetcher failure for URL . The ways to fix this error are as follows

  1. the url might be deprecated . Hence should use the right URL with right path
  2. md5 checksum must be pointing to older one , which should be replaced with the latest checksum
  3. if the component is not required ( or not maintained ) , then they can be masked from inc file


How to log RDK Components to component log files instead of stdout ?

  • For this you need to convert all C/C++ logging statements(like printf) to use standard logging functions CcspTraceInfo, CcspTraceWarning,CcspTraceError etc. CcspTraceXxxx functions are based on open-source ‘log4c’.
  • By using the above apis the logs are automatically written to logfiles.
  • After conversion to standard logging functions ,you can verify the logs under /rdklogs/logs/.



RDK-COMMON

Is there a consolidated logging system like SYSLOG available?

yes, all logs are maintained in persistent path (opt/logs) log rotation available if size goes beyond. Log server are in place. More details on how logging is done in RDK can be found here:   Log Upload, RDK Logger 



Telemetry


Do we really need to setup DCM configuration in the Xconf to use telemetry?

Yes, Because telemetry itself is a subset of Device Configuration management aka DCM and we need to configure the DCM logupload settings before setting up telemetry configuration



In telemetry 2.0, what is the use of setting up profiles via T2 Report Profiles(JSON blob with configuration) compared to the legacy telemetry profiles?

By using T2 Report profiles, we can setup multiple telemetry profiles. Each profile can have different set of telemetry markers , telemetry upload location URL and telemetry upload schedule. The different telemetry JSON data will be uploaded separately. Thus multiple telemetry profiles is achieved.



Will the reports be uploaded to Splunk server/ Telemetry upload server when the T2 Report profiles are set using dmcli command?

Yes, the T2 report profile will have the upload URL along with the telemetry markers, The upload repository in different profiles can be same or different. So based on the configured URL in these T2 report profiles, the data will be uploaded to the respective URLs .


RDK-CLOUD

How to configure xconf in local machine?

To know the Complete steps for xconf local setup , Please refer : https://wiki.rdkcentral.com/display/RDK/Xconf+Server+-+User+guide+for+configuration+and+feature+validation



If I wanted to run my Cassandra database on a separate node, where in the Xconf configuration would I pass in the details for that?

In service.properties, you can add the following properties.  The “seeds” property is just a comma-separated list of a few Cassandra hosts.  If you are using a single host, then it’s just that one.  The other properties may not be needed.

connectionPools.SharedConnectionPool.seeds=192.168.0.100,192.168.0.101
connectionPools.SharedConnectionPool.localDatacenter=DC_NAME
connectionPools.SharedConnectionPool.readConsistencyLevel=CL_LOCAL_QUORUM
connectionPools.SharedConnectionPool.writeConsistencyLevel=CL_LOCAL_QUORUM
connectionPools.SharedConnectionPool.autoDiscoverHosts=true



Is it possible to run xconf-angular-admin and xconf-dataservice on separate nodes? If yes, is there any specific configuration that will basically allow both the services to discover each other?

Yes, it can be run on separate nodes. The admin and data service do not need to discover each other.  They both use the Cassandra database, so they need to be able to reach it.  If you install the admin and data service on separate nodes, you will probably have Cassandra on a third node.  The service.properties file for each service should include the “seeds” property.



How to configure Firmware Download Location in XConf?

Steps –

  1. Go to the Firmware menu and select Download Location Filter.
  2. Select Edit.
  3. Enter the FQDN for the firmware download server.
  4. Enter the full http location for the firmware download server.
  5. Enter an IP address for TFTP and enter 100%.  (This download method will not be used.)
  6. Select Save.

Refer https://wiki.rdkcentral.com/display/RDK/Xconf+Server+-+User+guide+for+configuration+and+feature+validation#XconfServerUserguideforconfigurationandfeaturevalidation-FeatureValidation(Firmwareupdate) for more details.



How to use WebPA to interact with the data model? Is this local web service running on RDK-B to manage RDK-B data model?

There should be a webpa server running somewhere (to which the device can contact). If the server is in place, you can run the commands to fetch data models from a PC that can connect to server or even from the RPi terminal itself.



What is the connection between webpa and xconf server? Any documentation is there to check?



Is there any feature in xconf server to update webpa cluster url in device?

As of now we don’t have a provision to update the webPA url from xconf.



How to set a parameter on the RDK device? For example, if we need to change the SSID?

This is setting a parameter using webPA 

  • Setting the SSID Password :

curl -X PATCH http://35.155.171.121:9003/api/v2/device/mac:b827eb5681cd/config -d ‘{“parameters”: [ {“dataType”: 0, “name”: “Device.WiFi.SSID.10001.SSID”, “value”: “Testing”}]}’ -H ‘Authorization:Basic d2VicGFAMTIzNDU2Nzg5MAo=’

  • Getting the SSID for the board.

curl -X GET ‘http://35.155.171.121:9003/api/v2/device/mac:b827eb5681cd/config?names=Device.WiFi.SSID.10001.SSID‘ -H ‘Authorization:Basic d2VicGFAMTIzNDU2Nzg5MAo=’



While trying to create a model using POST api request, I am getting 404 error. (xconf_Server ip i have no exposed or mentioned here and we are using 9092 for xconf server) GET/retrieval works fine. But again DELETE has the same problem.

You can delete a model using below command

  • $ curl -i -X DELETE http://xconf_server_ip:9092/delete/models/XYZ123

Retrieve list of models & check the particular entry is deleted:

  • $ curl -i http://xconf_server_ip:9092/queries/models


Could you tell me the command to create mac list, retrieve and delete mac list?

.ns list for mac list



Can you share the steps to setup themis as key server for authorization to scytale?

Themis was not part of the community XMidt server, we will discuss with developer and update the wiki.



What is WebPA?

  • WebPA is the communication channel from Cloud to RDK based home gateway devices. It helps to manage devices from Cloud. It was built from the ground up specifically with security and performance as priorities.  
  • WEBPA protocol provides functionality of read/write access to device management parameters.
  • The “PA” in WebPA stands for “Protocol Adapter.” It’s a component used to connect devices to clouds in a way that RDK licensees call “trivially scalable.”

Refer https://wiki.rdkcentral.com/display/RDK/WebPA for more information.



What is basic WebPA Setup and WebPA testing process?

Refer Environment Setup in https://wiki.rdkcentral.com/display/RDK/RDK-C+%3A+WebPA+Support



Difference between WebPA and TR69?

TR-69 polls wide-and-deep across a device landscape, on a less frequent basis whereas WebPA can precision-poll for the most useful data, much more quickly. That’s mainly because it’s lightweight, and because the load can be redistributed into all the apps needing to access the data.



Can you mention few basic examples of Curl commands?

Example 1: Fetch device or feature parameter detail from client( RPI ) device through parodus by using webpa server.

  • curl -H ‘Authorization:Basic dXNlcjp3ZWJwYQo=’ -i ‘http://192.168.2.75:9003/api/v2/device/mac:b827eb2e722b/config?names=Device.DeviceInfo.X_RDKCENTRAL-COM_IMAGENAME‘

Example 2: Setting the SSID Password :

  • curl -X PATCH http://35.155.171.121:9003/api/v2/device/mac:b827eb5681cd/config -d ‘{“parameters”: [ {“dataType”: 0, “name”: “Device.WiFi.SSID.10001.SSID”, “value”: “Testing”}]}’ -H ‘Authorization:Basic d2VicGFAMTIzNDU2Nzg5MAo=’

Example 3: Getting the SSID for the board.

  • curl -X GET ‘http://35.155.171.121:9003/api/v2/device/mac:b827eb5681cd/config?names=Device.WiFi.SSID.10001.SSID‘ -H ‘Authorization:Basic d2VicGFAMTIzNDU2Nzg5MAo=’

Refer WEBPA Validation Procedure Steps in https://wiki.rdkcentral.com/display/RDK/RDK-C+%3A+WebPA+Support#RDKC:WebPASupport-WEBPAValidationProcedure for more information.



Is it possible to configure TFTP location for Firmware upgrade in Xconf ?

Yes ,it is possible to configure TFTP ipv4 and ipv6 locations in Xconf. Follow the steps specified here https://wiki.rdkcentral.com/display/RDK/Xconf+Server+-+User+guide+for+configuration+and+feature+validation#XconfServerUserguideforconfigurationandfeaturevalidation-AddTFTPlocation



Any tools to process big data for presentation on Xconf server side?

Xconf doesn’t store any data, be it logs or telemetry data. It only provides the configuration to the client device regarding where to upload the data, when to upload the data and what data it needs to be uploaded. So Xconf server doesn’t need any big data processing tools.



Xconf


Is there a direct interaction or dependency between the RDK cloud components Xconf and WebPA?

There is no direct interaction, both Xconf and WebPA serve different purpose. While Xconf is used by devices to fetch and configure the rules, webPA can be used to push/set the rules/attributes on a CPE device.



Does xconf upload the logs to any servers?

No, xconf doesn’t directly facilitate upload logs/telemetry data. It provides devices information on where/when to upload the log files or telemetry json files



With the new maven-frontend-plugin, do we need to install node and npm in the server?

No, the maven-frontend-plugin plugin downloads/installs Node and NPM locally for your project, runs npm install. It’s supposed to work on Windows, OS X and Linux.



Is it possible to override the firmware download location set from the ‘Download location filter’ page?

Yes, If anyone needs to override the firmware download location, it’s best to do it with a define property rule. It will only affect those devices identified in the rule.
Just like tftp location is overridden like this – https://wiki.rdkcentral.com/display/RDK/Xconf+Server+-+User+guide+for+configuration+and+feature+validation#XconfServerUserguideforconfigurationandfeaturevalidation-AddTFTPlocation


MISCELLANEOUS

What is the Roadmap for the RDK?

The roadmap is always available to the Preferred and Preferred Plus members of RDK at https://wiki.rdkcentral.com/display/ASP/Roadmap . To become a preferred member as well as to know the benefits, please visit https://rdkcentral.com/memberships/  . For the non preferred members, you can get answers to specific queries on Roadmap items by contacting support@rdkcentral.com or asking at https://wiki.rdkcentral.com/display/FORUMS/FORUMS+Home .



How to analyze the crash core dump ?

Please refer https://wiki.rdkcentral.com/display/RDK/Breakpad+steps



When did the “RDK Entity” established for governance of RDK Components,features and process ?

On 15 August 2013 Comcast Cable and Time Warner Cable jointly announced the formation of RDK Management, LLC to fulfill the role of the “RDK Entity”.



How will backward compatibility be supported as new versions of the RDK are released?

We will maintain compatibility with the previous RDK version as described by the guidelines in the agreement. Additional details will be posted on the RDK Wiki as they become available.



What happens in the RDK if you do not want to take a whole new baseline?

Licensee are not required to take a new baseline.



What if any commercial licenses are there, are there any that require royalties?

RDKM does not assess run-time royalties for the Generic RDK.



What sort of modifications to the RDK are needed to support Digital Video Broadcasting (DVB)?

The infrastructure to support DVB exists today; but additional components may need to be developed to support the particular network type. Typical enhancements include converting a URI to a network-specific identifier in the SI handling, and enhancing the security processor to implement CA that doesn’t use the cable card.



Which Closed Caption specifications are implemented in RDK?

RDK supports CEA-708 and EIA-608.



Are fonts for closed-captioning provided with RDK?

The font-type used for Closed Captioning belongs to an opensource family called Droid with specific glyphs for closed captions. Incase operators are using licensed fonts they have to meet the exclusive license requirements for those fonts.

OEM vendors will need to work with font vendors to provide fonts that comply with FCC standards. RDK Support is looking into whether FCC-compliant open-source fonts are available, and will provide that information in a future update.



What is required to support a new Video on Demand (VOD) system in RDK?

To add VOD support for a different system, the VOD client would be rewritten to talk to the appropriate backend to provide content. This is an independent implementation and not coupled to any specific MSO configuration. The client is responsible for tuning to the content, connecting it to a sink, and starting streaming. It comes into play only after a VOD request is received by the receiver, the purchase is completed, and the connection is created (i.e., broadcast has started from servers side). Because time shift buffers are not allowed for VOD content, trickplay commands are merely forwarded to the content source, which is responsible for taking the appropriate actions.



Does RDK support Audio and Video Text tags in HTML5?

Yes, RDK supports these tags in the current version



What is the status of the RDK Device Setting API?

Device Settings is integrated with IARM, which invokes the HAL API to effect changes requested by the application. Interface specifications are available for application developers.



Are there any certified RDK-compliant DMP or DMS devices today?

The IP client provided by RDK works with the RDK Server, not the general DMS. This is the direction for now. CVP-1 and CVP-2 certification are planned for RDK Servers.



Will there be a clear separation of IP and Hybrid components?

Separate RDK release packages will be available for IP and Hybrid versions. The requirements will draw a clear distinction between IP and Hybrid components



Are there APIs to control front-panel brightness?

Control of front-panel brightness and other front-panel controls such as LED displays, power-button and similar controls will be specified as part of the Comcast Manufacturer Interface Specification.



Why are so many components built from external source? The recipes for these components build from git but this is then overridden by meta-cmf/conf/distro/include/rdk-external-src.inc which means these components are never saved in the sstate cache making builds much longer than necessary. Also, many of the components compile on every rebuild even though nothing has changed.

The answer can be “extsrc is used to faciliate easy development work. If it is preferred otherwise, there is a XXX-nosrc.xml manifest file which will be retained after the first build and hence saving time 



What will be changing in the development environment?

Many developments  & improvements happening in RDK .Few are listed below.

For latest updates see Announcements at https://wiki.rdkcentral.com/ page and  “What is the Roadmap for the RDK?” question in this page to know about the Roadmap of RDK.



I have changes to 2 or more repos that are dependent on each other.  How do I force them to be submitted at the same time so the build doesn’t break?

  1. git commit your changes in both the local repos
  2. Create a branch and check it out in both repos make sure it has the SAME NAME (i.e. git checkout -b my_special_changes)
  3. Then finally do a git review in both repos (or more specifically git review master or git review stable2)

What this does:

In gerrit the changes will be put up for review in the branch you specified in your git review command (master or stable2). At the same time it will set the Topic field to the name of your local branch (i.e. my_special_changes). When gerrit sees topic fields with identical names it binds them together. So it forces project maintainers to press the “Submit Together” button so they go in at the same time once given +2.



TDK- How to install Groovy 2.0.6 in VM (until M75)?

Install SDK if it is not already installed by following the steps under the previous heading. Install Groovy version 2.0.7 / 2.0.6 (until M75)using the below command 

  • sdk install groovy 2.0.6

Check groovy version :

  • groovy -version


TDK- How to install Groovy 2.3.0 in VM? (M76 onwards)?

From M76 release onwards, the supported groovy version is groovy 2.3.0. Install SDK if it is not already installed by following the steps under the previous heading. Install Groovy version 2.3.0 using the below command –

  • sdk install groovy 2.3.0

Check groovy version :

  • groovy –version


TDK- How to install MySQL?

Follow are the commands to install MySQL

  • sudo apt-get install mysql-server      

mysql installation will ask for the password during installation. (give the root password)

If validate_password plugin is present for Mysql, set the password policy as LOW using the below command

  • set GLOBAL validate_password_policy=LOW; flush privileges”;

Login to mysql prompt

  • sudo mysql -u root -p

It will ask for password, give the root password given during installation.



Are there size restrictions for the firmware image?

There is no size restrictions imposed by RDK as such, the limits depends on SoC and OEM factors including Flash size. The firmware image will be compressed using SquashFS with LZMA compression.



Does IARM support advanced options such as marshaling, intersection, language specific code generation? Are there performance metrics for IARM?

No advanced options are currently supported by the IARM.  It is mainly an event bus with a pub/sub metaphor.  A lot of what is available is driven by the need.  If some of the features are needed we should see a feature request.  We are open to discussion of improvement as long as there is a case for it. No metrics have been captured at this time outside of the overall cloud metrics where IARM is part of the overall latency.



How are redundant components (e.g., Mongoose and Lighttpd) addressed?

The various components in RDK have dependencies on other components, and some of these have similar functions. As long as the claims on memory and other system resources is small (e.g., Mongoose is a single file) it may be expedient to retain these redundant components.



Do we need to support/provide HDMI 2.0?

It is optional and some devices is known to have HDMI 2.0 such as accelerator.



How to get plain RDK source code without soc?

 Checkout relevant code repos based on your requirements from https://code.rdkcentral.com/r/admin/repos

  1. For Open sourced components, search for required component in the filter option to get the relevant code repo.
  2. For Licensed components, sign in to https://code.rdkcentral.com/r/admin/repos using username and password,and search for required component in the filter option to get the relevant code repo.

Go To Top