How to Build
A tutorial to set up your environment and Download Source Code
Build Setup Instructions
Setting up the Host Environment
Pre-Requisites
Requirement | Yocto 2.2 (Morty) | Yocto 3.1 LTS (Dunfell) |
---|---|---|
Linux | 32/64 bit Ubuntu 16.04 LTS Precise supported distributions and versions are here | 64 bit Ubuntu 18.04 LTS Precise supported distributions and versions are here |
Free HDD Space | Minimum 100GB Free Memory | Minimum 100GB Free memory space |
Oracle Virtual Box | 5.0.40 or higher | – |
Wireless Adapter | Brand Name: Tenda ralink & Model Number:W311MI TP-Link Archer T4U AC 1200 | – |
USB to Ethernet Switch | To connect with Ethernet Switch & Multiple Clients | |
Host Tools version |
|
|
Install the following packages for setting up your host VM
The instructions provided below are meant to be executed via the command line on an Ubuntu machine
# essential packages installation # super user mode is required # major essential packages sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib g++-multilib build-essential chrpath socat bison curl # supportive packages sudo apt-get install libfile-slurp-perl libncurses-dev autoconf flex doxygen libtool automake libpcre3-dev zlib1g-dev libbz2-dev subversion minicom putty libssl-dev rpm python-pexpect python-svn python-argparse vim tofrodos meld dos2unix cmake uuid-dev ruby transfig libglib2.0-dev xutils-dev lynx-cur gperf autopoint python-dulwich python-dev openjdk-7-jre
Note : Please note openjdk-7-jre package is not available for Ubuntu-16.04 anymore. Presumably openjdk-8-jre should be used instead.
# essential packages installation # super user mode is required # major essential packages sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib g++-multilib build-essential chrpath socat bison curl cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm
Configure bash as default command interpreter for shell scripts
sudo dpkg-reconfigure dash
Select “No”
To choose bash, when the prompt asks if you want to use dash as the default system shell – select “No”
Configure Git
Upgrade your Git version to 1.8.x or higher
On Ubuntu 16.04 LTS, if you are unable to upgrade your git version using apt-get, then follow the below steps in order to upgrade
sudo apt-get install software-properties-common sudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install git
Once git is installed, configure your name and email using the below commands
# review your existing configuration git config --list --show-origin # configure user name and email address git config --global user.name "John Doe" git config --global user.email johndoe@example.com # configure git cookies. Needed for Gerrit to only contact the LDAP backend once. git config --global http.cookieFile /tmp/gitcookie.txt git config --global http.saveCookies true
Configure repo
In order to use Yocto build system, first you need to make sure that repo is properly installed on the machine:
# create a bin directory mkdir ~/bin export PATH=~/bin:$PATH # Download the repo tool and ensure that it is executable curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
Trivia : Repo is a repository management tool that is built on top of Git. Its main purpose is to help manage projects that consist of many Git repositories, it can also be used to manage uploads to the CMF Gerrit instance and automate aspects of the development workflow.
Repo does not replace Git, it simply aids management of projects that contain multiple Git repositories into a single local working directory. Git will still be used for local operation such as commits etc.
Repo manages this for you by means of an XML based Manifest file. The Manifest file defines which repositories the project uses and links to appropriate revisions of each git repository, i.e where the upstream repositories reside and where they should be cloned locally. It is the manifest.xml (or default.xml) that determines which Git repositories and revisions repo will manage. This manifest.xml file is hosted in a Git repository along with all the other git repositories.
Credential configuration
Note: it is also recommended to put credentials in .netrc when interacting with the repo.
A sample .netrc file is illustrated below
machine code.rdkcentral.com login <YOUR_USERNAME> password <YOUR_PASSWORD> |
---|
Downloading Source Code & Building
Downloading Source Code
Following commands fetch the source code using repo tool
$ mkdir <Directory-Name> && cd <Directory-Name>
Please use the following repo init command
$ repo init -u https://user@code.rdkcentral.com/r/manifests -m manifest.xml -b <branch_name>
Examples :
repo init -u https://code.rdkcentral.com/r/manifests -m rdkb.xml -b rdkb-20180527
repo init -u https://code.rdkcentral.com/r/manifests -m rdkb.xml -b master
repo init -u https://code.rdkcentral.com/r/manifests -m rdkb.xml -b morty
$ repo sync -j`nproc` –no-clone-bundle
- Cloning the code before login once to code.rdkcentral.com, user would get the Authentication error, even though the account is in good standing and has all the required access.
- Please login to code.rdkcentral.com before attempting to clone.
Building
$ source <setup-environment>
The above step configures and sets up your directory to start an appropriate build.
There are different kinds of builds listed. Please read the options and select the number of the build you need.
1) meta-rdk-bsp-emulator/conf/machine/qemuarmbroadband.conf
2) meta-rdk-bsp-emulator/conf/machine/qemux86broadband.conf
3) meta-rdk-bsp-emulator/conf/machine/qemux86hyb.conf
4) meta-rdk-bsp-emulator/conf/machine/qemux86mc.conf
5) openembedded-core/meta/conf/machine/qemuarm.conf
6) openembedded-core/meta/conf/machine/qemux86-64.conf
7) openembedded-core/meta/conf/machine/qemux86.conf
Next, you would need to initiate the build using the following command:
$ bitbake <image-name>
On Successful build, the ROOTFS (in vmdk format) would be available at the following reference location based on the build type :
–$ {HOME}/emulator/build-qemux86broadband/tmp/deploy/images/qemux86broadband/rdk-generic-broadband-image-qemux86broadband-<timestamp>.vmdk
Example :
…/build-qemux86broadband/tmp/deploy/images/qemux86broadband/rdk-generic-broadband-image-qemux86broadband-20160217080610.vmdk
Can the author double check if there is a typo in the command in section 1.1.1?
$ sudo apt-get install build-essential get text bison <snip>
Should that be ‘gettext’ without the space?
there is no tool ‘gettext’ required. The essential packages installation command is reviewed and modified properly
Can you check and update the document
rdk@ubuntu:~$ sudo apt-get install python-software-properties
Reading package lists… Done
Building dependency tree
Reading state information… Done
Package python-software-properties is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
software-properties-common
E: Package ‘python-software-properties’ has no installation candidate
rdk@ubuntu:~$ sudo add-apt-repository ppa:git-core/ppa
I issued command "udo python3.6 ~/bin/repo init -u https://code.rdkcentral.com/r/manifests -m rdkb.xml -b master" for download codes, but auth failed.
Can somebody help?
Do you register on https://code.rdkcentral.com/r/login/ ? If yes, please use the account and pwd to get the code.
Hi Nicki:
I type full email address as user name, so it got failed. It’s OK now, thanks for help.
Has https://code.rdkcentral.com/r/manifests moved to https://code.rdkcentral.com/r/rdkcmf/manifests ? I’m not able to view https://code.rdkcentral.com/r/manifests ("not found") and cloning gives "access at least one ref not permitted".
The manifest path didn’t change – https://code.rdkcentral.com/r/plugins/gitiles/manifests/+/refs/heads/rdk-next
After repo has been initialized repo sync ask user name password again and again. Build not able to download
root@rajagopal-VirtualBox:/home/rajagopal/rdk/test/rdkbuild# sudo repo sync -j4 –no-clone-bundle
Username for ‘https://code.rdkcentral.com‘: rajagopal.s02
Password for ‘https://rajagopal.s02@code.rdkcentral.com‘:
Fetching: 0% (0/126) warming upUsername for ‘https://code.rdkcentral.com‘: Username for ‘https://code.rdkcentral.com‘: Username for ‘https://code.rdkcentral.com‘: Username for ‘https://code.rdkcentral.com‘: rajagopal.s02
Password for ‘https://rajagopal.s02@code.rdkcentral.com‘:
Username for ‘https://code.rdkcentral.com‘: rajagopal.s02
Password for ‘https://rajagopal.s02@code.rdkcentral.com‘:
Username for ‘https://code.rdkcentral.com‘: rajagopal.s02
Why I can’t fetch the code using repo sync guide me.
Hi rajagopal. Have you set your rdkcentral credential into the home directory ‘.netrc’ file as per the ‘Credential configuration’ instructions above in this page? I think ‘repo’ needs this so it can authenticate over and over as it fetches from each ‘git’ repo.
Yes I have create the ‘.netrc’ file in home directory and set as per the my user credential configuration on that file also.
when i create the image file of RDK emulator then come this type error. anyone know what the problem. please help
i am using this repo :
repo init -u https:
//code
.rdkcentral.com
/r/manifests
-b rdk-next -m rdkv-nosrc.xml for creating image file of RDK Emulator.
ubuntu@ubuntu-Latitude-E6430:~/emulator/build-qemux86mc-morty$ bitbake rdk-generic-mediaclient-wpe-image
ERROR: ExpansionError during parsing /home/ubuntu/emulator/meta-rdk-restricted/recipes-extended/closedcaption/closedcaption_git.bb
Traceback (most recent call last):
File "/home/ubuntu/emulator/openembedded-core/bitbake/lib/bb/data_smart.py", line 386, in DataSmart.expandWithRefs(s=’${RDK_RELEASE}+git${SRCPV}’, varname=’PV’):
try:
> s = __expand_var_regexp__.sub(varparse.var_sub, s)
try:
File "/home/ubuntu/emulator/openembedded-core/bitbake/lib/bb/data_smart.py", line 111, in VariableParse.var_sub(match=<_sre.SRE_Match object; span=(18, 26), match=’${SRCPV}’>):
else:
> var = self.d.getVarFlag(key, "_content", True)
self.references.add(key)
File "/home/ubuntu/emulator/openembedded-core/bitbake/lib/bb/data_smart.py", line 737, in DataSmart.getVarFlag(var=’SRCPV’, flag=’_content’, expand=True, noweakdefault=False, parsing=False):
cachename = var + "[" + flag + "]"
> value = self.expand(value, cachename)
File "/home/ubuntu/emulator/openembedded-core/bitbake/lib/bb/data_smart.py", line 410, in DataSmart.expand(s=’${@bb.fetch2.get_srcrev(d)}’, varname=’SRCPV’):
def expand(self, s, varname = None):
> return self.expandWithRefs(s, varname).value
File "/home/ubuntu/emulator/openembedded-core/bitbake/lib/bb/data_smart.py", line 400, in DataSmart.expandWithRefs(s=’${@bb.fetch2.get_srcrev(d)}’, varname=’SRCPV’):
except Exception as exc:
> raise ExpansionError(varname, s, exc) from exc
bb.data_smart.ExpansionError: Failure expanding variable SRCPV, expression was ${@bb.fetch2.get_srcrev(d)} which triggered exception FetchError: Fetcher failure: Fetch command export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"; export SSH_AGENT_PID="1600"; export SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"; export PATH="/home/ubuntu/emulator/openembedded-core/scripts:/home/ubuntu/emulator/build-qemux86mc-morty/tmp/sysroots/x86_64-linux/usr/bin/i586-rdk-linux:/home/ubuntu/emulator/build-qemux86mc-morty/tmp/sysroots/qemux86mc-morty/usr/bin/crossscripts:/home/ubuntu/emulator/build-qemux86mc-morty/tmp/sysroots/x86_64-linux/usr/sbin:/home/ubuntu/emulator/build-qemux86mc-morty/tmp/sysroots/x86_64-linux/usr/bin:/home/ubuntu/emulator/build-qemux86mc-morty/tmp/sysroots/x86_64-linux/sbin:/home/ubuntu/emulator/build-qemux86mc-morty/tmp/sysroots/x86_64-linux/bin:/home/ubuntu/emulator/openembedded-core/scripts:/home/ubuntu/emulator/openembedded-core/bitbake/bin:/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"; export HOME="/home/ubuntu"; git -c core.fsyncobjectfiles=0 ls-remote https://code.rdkcentral.com/r/components/generic/closedcaption failed with exit code 128, output:
fatal: remote error: access at least one ref not permitted
Summary: There was 1 ERROR message shown, returning a non-zero exit code.
I keep getting this error, is there a problme with repo ..?
root@N-20N3PF255NK1:~/source_code# repo init -u https://code.rdkcentral.com/r/manifests -m rdkb.xml -b master
Username for ‘https://code.rdkcentral.com‘: xxxxxxxxx
Password for ‘https://xxxxxxxxx@code.rdkcentral.com‘:
fatal: remote error: access at least one ref not permitted
manifests: sleeping 4.0 seconds before retrying
Username for ‘https://code.rdkcentral.com‘
Try with the last Quarterly release or RDK-next build
Quarterly release tag (Dunfell)
-m rdkb.xml -b rdkb-2022q1-dunfell
repo init -u https://code.rdkcentral.com/r/rdkcmf/manifests
Latest tip of the trunk
-m rdkb.xml -b rdk-next
repo init -u https://code.rdkcentral.com/r/rdkcmf/manifests
HI James,
I tried the above cmd, and i got following error:
damon@ubuntu:~/RDK_SOURCE$ repo init -u https://code.rdkcentral.com/r/rdkcmf/manifests -m rdkb.xml -b rdkb-2022q1-dunfell
Downloading Repo source from https://gerrit.googlesource.com/git-repo
fatal: manifest ‘rdkb.xml’ not available
fatal: manifest rdkb.xml not found
Hi Damon ,
Could you please try with below command
repo init -u https://code.rdkcentral.com/r/manifests -m rdkb-extsrc.xml -b rdkb-2022q1-dunfell
Regards,
Priyankaa KVB
HI Priyankaa K V B
it still failed:
damon@ubuntu:~/RdkSource$ repo init -u https://code.rdkcentral.com/r/manifests -m rdkb-extsrc.xml -b rdkb-2022q1-dunfell
manifests:
fatal: remote error: manifests unavailable
manifests: sleeping 4.0 seconds before retrying
manifests:
fatal: remote error: manifests unavailable
fatal: cannot obtain manifest https://code.rdkcentral.com/r/manifests
further more , how to know which branch dose the repository has and the manifestname?
Thanks!
Damon
HI Priyankaa K V B
I have just checked this page :RDK FAQ
My account cant browse this page https://code.rdkcentral.com/r/admin/repos/components/generic/mediaframework .
the page shown following message:
An error occurred
You might have not enough privileges.
Error 404: Not found: components/generic/mediaframework
Endpoint: /projects/*
can yo help me to check?
thanks.
Damon
Hi Damon ,
Could you please send mail to support@rdkcentral.com or create an INFRA ticket to check access issue
Regards,
Priyankaa KVB
HI Priyankaa K V B
Thank you. I have send a mail to the support team.
BRs
damon
HI Priyankaa K V B
How to compile the westeros for Ubuntu version?
I have compiled the Wayland and westen on my Ubuntu, and the sample case run ok.
But after I cloned the westeros for git: https://code.rdkcentral.com/r/components/opensource/westeros
I didnt find any guide doc to build on Ubuntu, can you help me to point out this?
thanks!
Damon
Hi Deepthi Suseelan ,
Could you please provide your inputs for the above query
Regards,
Priyankaa KVB
Hi I am not able to do the repo init
repo init -u https://code.rdkcentral.com/r/manifests -m rdkb-extsrc.xml -b rdkb-2022q1-dunfell
repo: reusing existing repo client checkout in /home/diptendu/rkdb
Username for ‘https://code.rdkcentral.com‘: souvik
Password for ‘https://souvik@code.rdkcentral.com‘:
manifests:
fatal: remote error: manifests unavailable
manifests: sleeping 4.0 seconds before retrying
I cannot go past the second step of downloading source code
can anyone specify what I am doing wrong.
souvik