Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Introduction

Containers offer a logical packaging mechanism in which applications can be abstracted from the environment in which they run. Containers are often compared with virtual machines (VMs).  a guest operating system such as Linux or Windows runs on top of a host operating system with virtual access to the underlying hardware. Like virtual machines, containers allow to package your application together with libraries and other dependencies, providing isolated environments for running your software services.

Image Removed

Why Containers?

  • Instead of virtualizing the hardware stack, containers virtualize at the operating system level, with multiple containers running atop the OS kernel directly which means containers are more lightweight: they share the OS kernel, start much faster, and use a fraction of the memory compared to booting an entire OS.
  • Container consists of an entire run-time environment: an application, plus all its dependencies, libraries and other binaries, and configuration files needed to run it, bundled into one package. By containerizing the application platform and its dependencies, differences in OS distributions and underlying infrastructure are abstracted away.

Advantages of Containers

  • A container may be only tens of megabytes in size, whereas a virtual machine with its own entire operating system may be several gigabytes in size.
  • Containerization allows for greater modularity. Rather than run an entire complex application inside a single container, the application can be split in to modules.

Implementation details

  Containers layer - meta-rdk-containers:    

  •     Consists of main container image(rdk-generic-hybrid-lxc-image).
  •     Latest "lxc-container-generator" has been added for container generation at do_rootfs stage.
  •     Distro feature and latest lxc version updated in qemux86hybsecure.conf.

  Emulator layer - meta-rdk-bsp-emulator:

  •        Added emulator specific package groups and plugins to the container image.

  New Container generation process:

     This subsection describes how the new container generation process is replacing the earlier process.

  •       In this process containers will be generated using  "lxc-container-generator"  recipe, which will use corresponding .xml files to generate containers.
  •       All  dependencies(such as required binaries,libraries,script files) will be provided in each container .XML file.
  •       For permissions of files  "add-users-groups-file-owners-and-permissions.inc" file has been added.
  •       At rootfs stage containers will be generated in /container path of rootfs.
  •       Each container will consists of corresponding script (.sh) file for launching that particular container.
  •       Every process will be launched from corresponding component service file. Single (or) multiple processes can be launched/attached to container.

  XML and conf files:

  •     All required XML and configuration files are placed along with lxc-container-generator recipe in meta-rdk-bsp-emulator layer.

  Service files:     

  •   In platformcontrol container: 

                 Three service files used for launching corresponding processes inside container (sysmgr.service, irmgr.service and dsmgr.service) .        

  •   In rmfstreamer container:

                 rmfstreamer.service file has been used.

        Already these two containers are present in the existing system. we have implemented one more container (rdkbrowser2) which is the replacement of wpelauncher container.

      

  •   In  rdkbrowser2 container:

                 rdkbrowser2.service file has been used.

Implemented containers

 Platformcontrol

  • runs sysmgr,irmgr and dsmgr processes.
  • sysmgr will be launched in new container using lxc-execute.
  • irmgr and dsmgr processes has been attached to same container using lxc-attach.

 Rmfstreamer

  •  runs rmfstreamer.
  •  rmfstreamer will be launched in new container using lxc-execute.

Rdkbrowser2

  •  runs rdkbrowser2 browser application inside container.
  •  westeros will be launched in new container using lxc-execute.
  •  rdkbrowser2 will be attached to the same container using lxc-attach.

       Note: As we are in the plan of bringing APPmanager as default application we are not running rdkbrowser2 service file on boot-up.

Building procedure

...

  • Raspberry Pi Official 7" lcd screen display will be working . The 7" touch screen monitor for Raspberry Pi gives users the ability to create all-in-one, integrated projects such as tablets, infotainment systems and embedded projects. 

  • The 800x480 display connects via an adapter board which handles power and signal conversion. 

  •  We can plug keyboard and mouse to the raspberrypi for the userinteraction. 

  • Screen resolution 800 x 480 pixels Connects to the Raspberry Pi board using a ribbon cable connected to the DSI port. 

  • Adapter board is used to power the display and convert the parallel signals from the display to the serial (DSI) port on the Raspberry Pi. 

  • The display works with all existing Raspberry Pi models with RDK images.

Hardware requirement

...

  •    Raspberry Pi 3 Model B+
  •    Raspberry Pi Touchscreen LCD Display (7-inch)
  •    MicroSDHC Class 10 98 MB/s (Sandisk ultra)
  •    Power adapter for raspberrypi
  •    Normal headset  for connecting to raspberrypi 3.5mm jack


    Note: Raspberry Pi Touchscreen LCD Display (7-inch) can be ordered from https://www.amazon.in/Raspberry-Pi-Touchscreen-Display-7-inch/dp/B0153R2A9   

Hardware setup

...

  •  This LCD will connects to the Raspberry Pi board using a ribbon cable connected to the DSI port as shown below. 
    Image Added
  •  LCD display will be powered using connected wires as shown below.  From 7-inch lcd power 5v pin (pin1) needs to be connected to raspberrypi 5v (Pin2) and Gnd pin(pin5) needs to be connected to raspberrypi gnd pin (pin6). 
    Image Added
  •  Connections to GPIO pins and DSI port.
    Image Added
  • Headset connection to RPI 3.5mm jack for audio

           Image AddedImage Added

Building procedure

...

  •     repo     repo init -u https://code.rdkcentral.com/r/manifests -b rdk-next -m rdkv-asp-extsrcnosrc.xml
  •     repo sync --no-tags
  •     source
  •     source meta-cmf-raspberrypi/setup-environment
  •     select meta-cmf-raspberrypi/conf/machine/
  • raspberrypirdkhyblxc
  • raspberrypirdkhybrefapp-seven-inch-lcd.conf
  •    
  • bitbake rdk
  • bitbake  rdk-generic-hybrid-
  • wpe
  • refapp-
  • lxc-
  • image

...

Verification

...

  •     pstree can be used to track the list of containers running as below.After boot-up we can verify that application(Ex:appmanager) will be fitted into 7-inch display resolution as shown below:

              Image Added        

...


...

         ps -Af | grep lxc also lists the current running containers.
         Image Removed
  •     We can verify inside refapp image also.
         Image Added

DEBUG Logs

...

  • strace can give more debug information about containers:For confirming resolution user can see the logs by watching journalctl on particular service.

          Example:
          strace -f -o lxc-execute.log /usr/bin/lxc-attach -n PLATFORMCONTROL -f /container/PLATFORMCONTROL/conf/lxc.conf

          -u 704 -g 704  -- /usr/bin/dsMgrMain

  • lxc-execute.log for debugging purpose.

Test cases

  •    RMFAPP can be used to verify rmfstreamer container.
       Example: play  http://192.168.2.68:8080/vldms/tuner?ocap_locator=ocap://0x125d
  •    RDKBROWSER2 can be used to launch any URL.
       Example:  
              systemctl start rdkbrowser2.service - user can see the webpage in rdkbrowser2.
       If user wants to change URL, then we need to enter into this container and need to change rdkbrowser2.sh binary  as below:
       systemctl stop rdkbrowser2.service
       use command:
       /usr/bin/lxc-execute -n RDKBROWSER2    -f /container/RDKBROWSER2/conf/lxc.conf – /bin/sh
       and then change url in /usr/bin/rdkbrowser2.sh file inside this container environment.

References

           journalctl -x -u appmanager

  • Also user can launch runAppmanager directly for observing console logs.
    systemctl stop appmanager
    sh /lib/rdk/runAppmanager

Test cases

...

  •     On 7-inch display we can verify all features like 
  1.       westeros_test(compositor test application)
  2.       Browser applications like rdkbrowser2
  3.       playback through gstreamer plugins
  4.       rmfApp playback
  5.       aamp playback
  6.       spark applications, appmanager and refapp etc.
  •    Attached system test plan will covers all these test cases.

Reference

...