RDK Resources
[*RDK Preferred*]
Code Management Facility
RDK Forums
[RDK Conferences]
RDK Support
Archives
Papers & Presentations Archive
...
The source code for BundleGen can be found on Consult Red's GitLab here: https://redgitlab.redembedded.com:8443/rdk-sig-dac/bundlegen
A README.md file is included in the repo with instructions on how to set up a dev environment and use bundlegen on both Fedora and Ubuntu
...
View file | ||||
---|---|---|---|---|
|
TODO:: Add steps to reproduce demo
...
This configuration file requires comments/feedback to ensure it covers all use cases. The idea is this config could be mostly automatically generated by a tool either run on the STB or by Bitbake, with only minor sections needing to be filled in by hand. An operator would maintain a platform configuration per-device, with the ability to create a generic "operator.json" file that would allow options to be set for all operator devices (which could be overridden by individual platforms as required).TODO:: Add example...
Below is the metadata for the Comcast Xi6 STB used in the demo video. Note the RDK section is currently unused by bundlegen
Code Block | ||
---|---|---|
| ||
{
"platformName":"xi6",
"os":"linux",
"arch":{
"arch":"arm",
"variant":"v7"
},
"rdk":{
"version":"2020Q4",
"supportedFeatures":[
"Controller",
"DeviceInfo",
"Monitor",
"OCDM",
"TraceControl",
"WifiManager",
"com.comcast.CoPilot",
"com.comcast.DeviceProvisioning",
"com.comcast.FrameRate",
"com.comcast.HdcpProfile",
"com.comcast.HdmiInput",
"com.comcast.StateObserver",
"com.comcast.StorageManager",
"org.rdk.ActivityMonitor",
"org.rdk.DeviceDiagnostics",
"org.rdk.DisplaySettings",
"org.rdk.FrontPanel",
"org.rdk.HomeNetworking",
"org.rdk.LoggingPreferences",
"org.rdk.Network",
"org.rdk.OCIContainer",
"org.rdk.Proxies",
"org.rdk.SleepTimer",
"org.rdk.TTSResource",
"org.rdk.TTSSettings",
"org.rdk.Timer",
"org.rdk.UserPreferences",
"org.rdk.Warehouse"
]
},
"hardware":{
"graphics":true,
"maxRam":"4096M"
},
"storage":{
"persistent":{
"storageDir":"/tmp/data",
"maxSize":"100M"
}
},
"gpu":{
"westeros":{
"hostSocket":"/tmp/westeros-dac"
},
"extraMounts":[
{
"source":"/tmp/nxserver_ipc",
"destination":"/tmp/nxserver_ipc",
"type":"bind",
"options":[
"bind",
"ro"
]
}
],
"envvar":[
"LD_PRELOAD=/usr/lib/libwayland-client.so.0:/usr/lib/libwayland-egl.so.0"
],
"devs":[
{
"type":"c",
"path":"/dev/nexus",
"major":33,
"minor":0,
"access":"rw"
}
],
"gfxLibs":[
{
"src":"/usr/lib/libEGL.so",
"dst":"/usr/lib/libEGL.so"
},
{
"src":"/usr/lib/libEGL.so",
"dst":"/usr/lib/libEGL.so.1"
},
{
"src":"/usr/lib/libGLESv2.so",
"dst":"/usr/lib/libGLESv2.so"
},
{
"src":"/usr/lib/libGLESv2.so",
"dst":"/usr/lib/libGLESv2.so.2"
},
{
"src":"/usr/lib/libwayland-egl.so.0",
"dst":"/usr/lib/libwayland-egl.so"
},
{
"src":"/usr/lib/libwayland-egl.so.0",
"dst":"/usr/lib/libwayland-egl.so.0"
},
{
"src":"/usr/lib/libwayland-egl.so.0",
"dst":"/usr/lib/libwayland-egl.so.1"
},
{
"src":"/usr/lib/libnxclient.so",
"dst":"/usr/lib/libnxclient.so"
},
{
"src":"/usr/lib/libnexus.so",
"dst":"/usr/lib/libnexus.so"
},
{
"src":"/usr/lib/libnxpl.so",
"dst":"/usr/lib/libnxpl.so"
},
{
"src":"/usr/lib/libwesteros_simpleshell_client.so.0",
"dst":"/usr/lib/libwesteros_simpleshell_client.so.0"
},
{
"src":"/usr/lib/libwayland-server.so.0",
"dst":"/usr/lib/libwayland-server.so.0"
}
]
},
"mounts":[
],
"network":{
"options":[
"nat",
"open",
"private"
]
},
"envvar":[
"XDG_RUNTIME_DIR=/tmp"
],
"resourceLimits":[
{
"type":"RLIMIT_NPROC",
"hard":300,
"soft":300
},
{
"type":"RLIMIT_RTPRIO",
"hard":6,
"soft":6
}
],
"disableUserNamespacing":false,
"usersAndGroups":{
"uidMap":[
{
"containerID":0,
"hostID":996,
"size":1
}
],
"gidMap":[
{
"containerID":0,
"hostID":992,
"size":1
}
]
},
"logging":{
"mode":"file",
"logDir":"/var/log"
},
"dobby":{
"pluginDir":"/usr/lib/plugins/dobby",
"pluginDependencies":[
"/lib/libc.so.6",
"/lib/libdl.so.2",
"/lib/libcap.so.2",
"/lib/libgcc_s.so.1",
"/lib/libm.so.6",
"/lib/libpthread.so.0",
"/lib/libresolv.so.2",
"/lib/librt.so.1",
"/lib/libsystemd.so.0",
"/usr/lib/liblzma.so.5",
"/usr/lib/libnl-3.so.200",
"/usr/lib/libnl-route-3.so.200",
"/usr/lib/libstdc++.so.6",
"/usr/lib/libyajl.so.2",
"/lib/ld-linux-armhf.so.3"
]
}
} |
...
This metadata would sit alongside the MAS metadata, as this info is more low-level and not required to be known by an app-store service.
Below are two example app metadata files - one for the console-based hello-world app and the other for the flutter app (not shown in demo videos)
Code Block | ||||
---|---|---|---|---|
| ||||
{ "id":"com.docker.helloworld", "type":"application/vnd.rdk-app.dac. |
...
native",
"graphics":false,
"network":{
"type":"none"
},
"storage":{
"persistent":[
],
"temp":[
]
},
"resources":{
"ram":"5M"
},
"features":[
],
"mounts":[
]
} |
Code Block | ||||
---|---|---|---|---|
| ||||
{
"id":"com.rdk.flutter",
"type":"application/vnd.rdk-app.dac.native",
"graphics":true,
"network":{
"type":"nat",
"dnsmasq":"true"
},
"storage":{
"persistent":[
{
"size":"60M",
"path":"/home/private"
}
],
"temp":[
{
"size":"100M",
"path":"/home/temp"
},
{
"size":"10M",
"path":"/var/volatile"
}
]
},
"resources":{
"ram":"256M"
},
"features":[
],
"mounts":[
]
} |
...
...