RDK Resources
[*RDK Preferred*]
Code Management Facility
RDK Forums
[RDK Conferences]
RDK Support
Archives
Papers & Presentations Archive
Papers & Presentations Archive
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 86 Next »
Frequently Asked Questions
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"
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
User registration without valid company email address
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>
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
Approach RDK support with the necessary approval to get the requested privilege.
Github no more supports direct password login and allows only Personal Access tokens. To generate a new token,
Eg: machine github.com login sampleuser password ghp_73ozr1OhWvUI1htuRCVwPyWF4Va1234ABCD
GitHub Workflow Steps:
Possible reasons and solutions:
If you are already using the Personal Access Token and getting a 403, chances are that the token has auto-expired.
You can generate a new token in Github by going to "https://github.com -> Settings -> Developer Settings -> Personal Access Tokens", Clicking on "Generate a new token" and then replacing your old token inside the ~/.netrc file with the newly generated one.
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
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
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.
There are tools within BitBake that enable this level of details.
In addition, the toaster is a new graphical user interface for BitBake that makes these tools much easier to use.
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
:
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:
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.
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
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.
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.
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.
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
|
|
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
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.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 .
* 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.
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
|
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:
Make sure .bbappend has the same root name as their corresponding .bb recipes.
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
git rebase —abort
git rebase rdkgerrit/master ( or rdkgerrit/stable2)
git checkout --ours FILE
grep -lr ‘<<<<<<<<’. | xargs git checkout --ours
git checkout --yours FILE
grep -lr ‘<<<<<<<<’. | xargs git checkout –theirs
FILES_${PN}-dev += " file1 file2 etc"
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
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 .
The signal core dump that are generated under /tmp can be decoded using gdb
Procedure :
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.
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.
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
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.
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”
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'
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/
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.
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
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.
Looks like memory issue hence changing Ubuntu to 64 bit version should resolve the issue. The below are the Ubuntu configurations,
16GB Swap
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)}"
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
Please refer Compile-time Build Variants Flags
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.
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 |
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
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 \”
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
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
RDK Reference Platform :
RDK Accelerator :
RDK Device Management :
WEBINARS Home :
Test Development Kit (TDK) :
Release details:
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.
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.
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 RDK-B Emulator Build Instructions .
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
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
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
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
Follow "Flashing with Medkit & Sysupgrade images" section in https://wiki.rdkcentral.com/pages/viewpage.action?pageId=114986683
Legacy and FIT image
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.
We can change the resolution in rms.conf file that is there in /ust/local/rms/bin/ directory.
Yes, we have used AWS server to store 24*7 data for CVR.
Use gstreamer plugin mainly, v4l2src plugin to capture data from camera.
AS of now we used confidential page to check this feature,we are trying to support google based signalling server to resolve this conflict.
h264 encoded format is supported for RMS live streaming and Continuous video recording(CVR).
No. An organization must be a member of the Digital Living Network Alliance to obtain a DLNA license.
Yes.
Use below command format -
(The quarterly release name can be given with -b option)
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});
});
});
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 .
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.
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.
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)
Make sure DASH.js uses utf-8 as a content type format for license requests (playready challenge is utf-8 encoded)
WPE media element: no audio track selection; WPE MSE Google Shaka: selectAudioLanguage(language, role), or selectVariantTrack(track); WPE AAMP UVE: set
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);
}
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
Yes, it is possible to use a remote control with rdkbrowser2.sh
touch /opt/remote_input_enable and reboot.
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.
You can modify the script to avoid the deletion of older files:
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
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”)
Yes , Please refer this link : Session Manager
No
End state architecture has scalability and security built into it.Refer RDK Alexa Echo Dot Voice Application .
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.
core_log.txt
rebootInfo.log
messages.txt
There is no package manager support for downloading/installing packages. However you can manually install ipk packages.
RDK Device Settings is the component which handles the following configurations:
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.
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.
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.
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.
Execute $ npm run watch and then npm run serve separately in separate terminal.(tried on VS code)
For this,Install windows node env globally:
$ npm install -g win-node-env
root@RaspberryPi-Gateway:/# find . -iname libpcap* ./usr/lib/libpcap.so.1.7.4 ./usr/lib/libpcap.so.1
Currently no such pre-built images are available for download. You can follow the simple build instructions to generate your own build.
Eg:
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.
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
Below are the two ways to enable debug logs for component
The steps are –
For reference please look into this attachment :
Follow the below steps to customize kernel –
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
The data model can be managed via TR-069 , TR-181, management protocols like SNMP, WebUI, WEBPA .
Use NTP sync to run in the background to sync time with NTP servers.Update the NTP servers in ntp conf file if needed.
Minimum Hardware requirement :
The above requirement supports all the basic functionalities of RDK-B.
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.
The CA certificate file and device certificate/private key can be configured in ccsp_tr069_pa_cfg.xml for https support.
There are already reserve SSID for Guest WiFi network. Just enable the SSID using the respective DM to get the features in place.
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.
It actually defines what kind of Internet traffic is allowed or blocked. For more details, Please Refer : Firewall - Rule persistence
Use journalctl -xu parodus or can look for parodus.log in the log folder i.e. /rdklogs/logs/.
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
Checksum mismatch error is related to Fetcher failure for URL . The ways to fix this error are as follows
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
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
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.
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 .
To know the Complete steps for xconf local setup , Please refer : Xconf Server - User guide for configuration and feature validation
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 -
Refer Xconf Server - User guide for configuration and feature validation#FeatureValidation(Firmwareupdate) for more details.
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 of now we don't have a provision to update the webPA url from xconf.
This is setting a parameter using webPA
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='
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='
You can delete a model using below command
Retrieve list of models & check the particular entry is deleted:
.ns list for mac list
Themis was not part of the community XMidt server, we will discuss with developer and update the wiki.
Refer WebPA for more information.
Refer Environment Setup in RDK-C : WebPA Support#C:WebPASupport-EnvironmentSetup
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.
Example 1: Fetch device or feature parameter detail from client( RPI ) device through parodus by using webpa server.
Example 2: Setting the SSID Password :
Example 3: Getting the SSID for the board.
Refer WEBPA Validation Procedure Steps in RDK-C : WebPA Support#C:WebPASupport-WEBPAValidationProcedure for more information.
Yes ,it is possible to configure TFTP ipv4 and ipv6 locations in Xconf. Follow the steps specified here Xconf Server - User guide for configuration and feature validation#AddTFTPlocation
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.
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.
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.
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.
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 - Xconf Server - User guide for configuration and feature validation#AddTFTPlocation
DISCLAIMER: Please note that the use of the RDK Wiki is subject to its Privacy Policy & Terms of Use. In addition, this Wiki may be accessed by all RDK licensees and their contractors.
Powered by a free Atlassian Confluence Open Source Project License granted to RDKCentral. Evaluate Confluence today.