RDK FAQ
Access and Authentication
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
-
Obtain valid RDK credentials : Users must have a valid RDK Central Credentials. To register use the link below
- RDK Central Registration Link – https://wiki.rdkcentral.com/signup.action
-
-
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.
- Unable to login to code.rdkcentral.com with username (All LOWERCASE) and password – If you are getting authentication failure, it is possible that your email address is linked with another username that you have used previously or you have logged in to code.rdkcentral.com with a mixed case username. Either case, you can email to support@rdkcentral.com to mitigate this issue.
- Able to login to code.rdkcentral.com with username/password – try and browse this repo –https://code.rdkcentral.com/r/admin/repos/components/generic/mediaframework . If you are not able to browse this repo, you can email to support@rdkcentral.com to mitigate this issue. if you are able to browse the repo, but unable to clone the it is probably an environment issue. Check your .netrc file
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.
|
You can prevent this behaviour by changing BB_SRCREV_POLICY variable in you local <sandbox>/conf/local.conf
|
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 namedlog.
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.taskname-Eg:compile logs are present in the file log.do_compile.
- 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 :
- In <image>.bbappend file
IMAGE_INSTALL_append = ” gdb” - 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” - In <component>.bbappend
CFLAGS += ” -D_DEBUG -g “ - Compile and flash the binary to device
- 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 |
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
RDK Home :
Developer Portal Home:
RDK-V :
RDK-B :
RDK Reference Platform :
RDK Accelerator :
- RDK Accelerator Home Page
- Product Specifications
- RDK Video Accelerator Certification
- Getting Started – OEM
- Getting Started – SoC
- Getting Started – MSO
RDK Device Management :
WEBINARS Home :
Test Development Kit (TDK) :
- Test Development Kit (TDK) Home
- RDK Video Certification
- TDK-V Porting on Raspberry Pi
- TDK FAQ Document
Release details:
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
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?
- Yes, WPE media element: “aamp://” schema WPE AAMP: UVE API <span style=”color: #0000ff”><a href=”https://firebolt.app/aamp/UVE/index.html” class=”external-link” rel=”nofollow”>https://firebolt.app/aamp/UVE/index.html+</a></span>
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:
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
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?
- All include header files of a component are present in https://code.rdkcentral.com.
- After login into https://code.rdkcentral.com search for the respective component and go to the component repo which shows all the corresponding files.
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 –
-
core_log.txt
-
rebootInfo.log
-
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?
- Login into box: $ ssh root@<your box ip>
- Go to dir: $ cd /lib/rdk
- Edit residentApp.sh: $ vi residentApp.sh
- You will see Residentapp = “https://rdkwiki.com/rdk-apps/accelerator-home-ui/index.html#splash” and offlineApp=”http://127.0.0.1:50050/lxresui/index.html“
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?
- Follow https://developer.rdkcentral.com/preview-rdk/ for pre-built images.
- Also you can built images by referring:
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?
- Please refer to https://code.rdkcentral.com/r/plugins/gitiles/rdkb/components/opensource/ccsp/CcspWifiAgent/+/refs/heads/rdk-next/config-atom/TR181-WiFi-USGv2.XML. This gives objects, parameters list for WiFi along with functions call. The XML file (TR181-WiFi-USGv2.XML) file provides details regarding the data models available under Device.WiFi.
- . In older releases , the XML files are available under /usr/ccsp/<component> . But with the latest code, instead of reading and parsing the XML at runtime, the new approach includes conversion of XML to .C/.cpp with the help of XML2C and creating a shared library (libWi-Fi.so). These changes are done for rdkb to reduce image size and improve boot times.
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
- adding prints in the respective place of code
- 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.
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 :
|
On compiling the code and flashing the image , python3 will be available in your board . Check with below command.
|
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
- the url might be deprecated . Hence should use the right URL with right path
- md5 checksum must be pointing to older one , which should be replaced with the latest checksum
- 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
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.
Steps –
- Go to the Firmware menu and select Download Location Filter.
- Select Edit.
- Enter the FQDN for the firmware download server.
- Enter the full http location for the firmware download server.
- Enter an IP address for TFTP and enter 100%. (This download method will not be used.)
- 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.
- As such they don’t have any connection between them.
- While xconf is for pushing device specific configurations to CPE, webPA is for remote device management.
- You can refer the https://wiki.rdkcentral.com/display/RDK/XConf+Server and https://wiki.rdkcentral.com/display/RDK/WebPA for more details.
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.
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.
- 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
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.
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.
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.
- Doxygen : Video & Broadband documentations are available in the following locations.
- Github : https://github.com/rdkcentral/
- Systemd
For latest updates see Announcements at https://wiki.rdkcentral.com/ page and “ ” 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?
- git commit your changes in both the local repos
- 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)
- 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
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
- For Open sourced components, search for required component in the filter option to get the relevant code repo.
- 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.