User Tools

Site Tools


eg-gap_genivi_yocto_tizenivi_gap_analysis

This is an old revision of the document!


GENIVI/Yocto/Tizen IVI gap analysis

(as of 2015/10/13)

Introduction

Early 2014, AGL chose Tizen IVI as the reference distribution for its Automotive Software Stack.

In mid-2014, thus during the same time frame, was announced the “Tizen on Yocto” project, which intended to bring the flexibility of Yocto to the Tizen distribution.

GENIVI then distributed its reference software as a Yocto layer, directly hosted at the Yocto project homepage.

In 2015 though, visible progress on Tizen IVI slowed down. Finally no definitive merge between GENIVI packages, Tizen IVI and Yocto happened before the last known Tizen IVI release.

In this document, we present an analysis of AGL/Phase 1 regarding GENIVI components and propose a strategy to integrate GENIVI and other projects smoothly into AGL.

For this study, the following Git repositories have been considered :

GENIVI Components

GENIVI/Yocto/Tizen IVI differences

There were discussions in August 2015 about the OS/Common Libs recipes development and how to integrate GENIVI layers into AGL (see also here and here).

An analysis has been done to identify packages impacted by the GENIVI layer. The list contains 19 packages (systemd packages were excluded).

Name Poky 1.7 GENIVI 8 TIZEN IVI 3.0 Gap motivation Description
Bash 4.3.30 3.2.48 [1] 4.3.30 GPLv2 vs. GPLv3 Basic shell interpreter
Coreutils 8.22 6.9 [1] 8.22 GPLv2 vs. GPLv3 Basic shell utilities
Gawk 4.1.1 3.1.5 [1] 4.1.1 GPLv2 vs. GPLv3 Formatting and parsing tool
Gettext 0.18.3.2 0.16.1 [1] 0.18.3 GPLv2 vs. GPLv3 Multilingual support framework
Readline 6.3 5.2 5.2 [1] GPLv2 vs. GPLv3 Command-line support library
Parted 3.1 3.1 3.1 Depends on (GPLv2) coreutils Partition edition utility (GPLv3)
Fuse 2.9.3 2.9.3 [2] 3.1 Userspace filesystem drivers
Procps / Procps-ng 3.2.8 3.2.8 3.3.9 Tizen IVI has procps-ng, GENIVI/Yocto has procps (has not been updated for years and requires distro-specific patches) /proc virtual filesystem utilities (ps, top…)
Iptables 1.4.21 1.4.21 1.4.21 Tizen IVI provides an additional “iptables-apply” utility Netfilter firewall configuration utility
Unzip 6.0 6.0 6.0 GENIVI/Yocto provides an additonal security patch (CVE 2015-1315) ZIP archive extraction utility
Libarchive 3.1.2 3.1.2 3.1.2 GENIVI/Yocto provides an additonal security patch (CVE 2013-0211) Multi-format archive and compression library
quota 4.0.1 4.0.1 Not provided by Tizen Filesystem quota configuration utilities
tcp-wrappers 7.6 7.6 Not provided by Tizen TCP/IP wrapper utilities (finger, tcpd…)
libcgroup 0.41 0.41 Not provided by Tizen Kernel control groups manipulation library
os-release - - Not provided by Tizen (Tizen IVI uses other scripts for this purpose) Sets “/etc/os-release” info
volatile-binds - - Not provided by Tizen Yocto-specific systemd service for temporary mounts
glib-networking 2.38.0 2.38.0 2.38.0 ? Network subset of glib library requiring additional dependencies

[1] : maintained in Poky, but not the default version

[2] : forked and maintained in GENIVI

Another analysis has been posted on the AGL mailing list. This last one was used as an alternative source of information. Following is a raw copy of posted document on AGL mailing list :

Recipe Scope Detail Depends
coreutils_6.9.bb No coreutils_8.22.bb is included in minimal package
gettext_0.16.1.bb No gettext_0.18.3.2.bb is included in minimal package
glib-networking_2.38.0.bb Yes gnutls, nettle
readline_5.2.bb No gettext_0.18.3.2.bb is included in minimal package
systemd_216.bb No Systemd related
bash_3.2.48.bb No bash_4.3.bb is included in minimal package
gawk_3.1.5.bb No gawk_4.1.1.bb is included in minimal package
iptables_1.4.21.bb Yes None
parted_3.1.bb Yes None
procps_3.2.8.bb Yes None
quota_4.01.bb Yes tcp-wrapper
tcp-wrappers_7.6.bb Yes None
unzip_6.0.bb Yes None
fuse_2.9.3.bb Yes Need meta-ivi from GENIVI, Need to adopt patch same as GENIVI None
gettext_0.16.1.bb No gettext_0.18.3.2.bb is included in minimal package
libcgroup_0.41.bb Yes None
os-release.bb Yes None
systemd-compat-units.bb No Systemd related
systemd-serialgetty.bb No Systemd related
systemd_216.bb No Systemd related
volatile-binds.bb No Systemd related, This package is only for correcting location of “unmount” binary on rootfs
gawk_3.1.5.bb No gawk_4.1.1.bb is included in minimal package. Duplicated of above.
libarchive_3.1.2.bb Yes None

Explanation of motivations

GPLv2 vs. GPLv3 issue

Recent GNU software tends to use the GPLv3 license, which compared to former GPLv2, adds some addtional constraints onto software distribution. Such restrictions are often considered as an issue for derived proprietary embedded systems. For a detailed description of potential issues, please read this.

Instructions for building the older 6.0.0 GENIVI release contained an explicit mention to prohibit the use of GPLv3.

Tizen IVI had no such restriction.

As a result, some packages differ as they are kept at their older GPLv2 revisions. They are currently :

  • Bash
  • Gawk
  • Coreutils
  • Gettext

Bash, Gawk and Coreutils are merely tools, and can easily be replaced. Gettext, on the other hand, is a widely-used internationalization library with ramifications deep inside the system.

Please aslo note that these dependencies impact the following package :

  • Parted

Side notes As a side note, recent GENIVI build instructions do not contain the GPLv3 mention anymore. Does this mean that GENIVI now allows GPLv3 packages ? A formal clarification on GPL licensing policies would be more than welcome.

Suggestions Whether GENIVI would allow GPLv3, it would then be possible to switch to more recent versions of many packages (except for Gettext). If it does not, then we have to keep these older versions until a suitable replacement is found. Potential replacements include :

Package misalignment

Tizen Yocto was supposed to align all its packages versions with Yocto 1.7. There is only one package which does not comply :

  • Fuse

The Tizen IVI version is a bit older. As there is no technical explanation, this is most likely to be a mistake or an oversight. Updating should be straightforward.

Suggestions Stick to the Yocto/OpenEmbedded version.

Custom patches

Yocto provides two packages with applied patches, making them differ from Tizen IVI :

  • Unzip
  • Libarchive

The patches are security fixes, one of which (CVE 2015-1315 for Unzip) was released subsequently to TIzen IVI's latest release (mid-February 2015). Using these Yocto-patches versions is a no-brainer.

Suggestions Keep the Yocto versions, with custom patches.

Nonexistent packages

There are some packages which simply do not have any correspondence between distributions. This mostly happens for “administrative” packages (i.e. used for compilation or production of the final image) or for strategical reasons.

= Packages present in Tizen IVI, but NOT in GENIVI/Yocto =

  • Procps-ng : “procps” is the traditional package providing /proc-related command-line tools (ps, top, skill…). However, it has not been updated for years and requires lots of custom patches for today's uses ; hence why Tizen IVI prefers to use its “procps-ng” fork instead.

Yocto 1.7, though, unfortunately does not provide this package.

Suggestions Keep the Tizen IVI version, store it in the AGL tree, and submit it to the upstream Yocto project meanwhile. This way, future AGL releases may be able to use Procps-ng directly without maintaining the packaging.

= Packages present in GENIVI/Yocto, but NOT in Tizen IVI =

  • Quota
  • Libcgroup
  • Tcp-wrappers
  • Os-release
  • Volatile-binds

Out of these 5 packages, 1 is a command-line tool (“quota”), 1 an application library (“libcgroup”) and the last 3 (“tcp-wrappers”, “os-release”, “volatile-binds”) are Yocto-specific administrative packages.

  • “Quota” permits to put size restrictions on users' profiles. This feature was not implemented in latest Tizen IVI (multi-user had just been implemented in Tizen 3.0) but can prove itself useful in a near future and should be straightforward to integrate.
  • “Libcgroup” permits applications to easily manipulate kernel Control Groups ; it could be useful to control/isolate applications on embedded systems.
  • “tcp-wrappers”, “os-release” and “volatile-binds” are administrative packages used mostly for OS image preparation and boot. For instance, “os-release” customizes the “/etc/os-release” file, used by most tools to identify the distribution ; Tizen IVI does it too, but in its “tizen-release” package.

Suggestions Keep “quota”, “libcgroup” and “os-release” from Yocto 1.7. Remove use of “tcp-wrappers” and “volatile-binds” until it proves itself useful. “os-release” could be replaced by a specific package named “agl-release”.

GENIVI Yocto layer ("meta-ivi")

Dependencies induced by GENIVI layer

GENIVI also maintains a publicly-accessible repository of Yocto recipes, supposed to be used on top of Yocto (as an additional layer).

Here is a list of these recipes, and what they contain and related to.

These recipes do not exist in Yocto.

Name Motivation Category
audiomanager_6.2.bb Required by AGL 1.0 specification GENIVI System - Audio Manager
audiomanager_git.bb Required by AGL 1.0 specification GENIVI System - Audio Manager
common-api-c_2.1.6-p1.bb -dbus_2.1.6-p6.bb GENIVI Libraries - Misc (IPC)
dlt-daemon_2.11.1.bb Required by AGL 1.0 specification GENIVI Libraries - Logging daemon
encryptfs-utils_104.bb GENIVI configuration - disable NSS dependency Base - Utilities
fuse_2.9.3.bb System - Libraries
gstreamer1.0_1.2.3.bb Library - Multimedia (audio/video)
gstreamer1.0-libav_1.2.3.bb Library - Multimedia (audio/video)
gstreamer1.0-omx_1.0.0.bb GENIVI patches Library - Multimedia (audio/video)
gstreamer1.0-plugins-bad_1.2.3.bb GENIVI configuration - enable bluez5, disable bluez4 Library - Multimedia (audio/video)
gstreamer1.0-plugins-base_1.2.3.bb Library - Multimedia (audio/video)
gstreamer1.0-plugins-good_1.2.3.bb Library - Multimedia (audio/video)
gstreamer1.0-plugins-ugly_1.2.3.bb Library - Multimedia (audio/video)
keyutils_1.5.8.bb GENIVI patches Base - Utilities
layer-management_1.1.bb Required by AGL 1.0 specification GENIVI System - Layer Manager
layer-management_git.bb Required by AGL 1.0 specification GENIVI System - Layer Manager
libitzam_6.0.4.bb Embedded-oriented Library - Database
node-health-monitor_1.3.5.bb Required by AGL 1.0 specification GENIVI System - System health daemon
node-startup-controller_1.0.2.bb Required by AGL 1.0 specification GENIVI System - User context controller daemon
node-state-manager_2.0.0.bb Required by AGL 1.0 specification GENIVI System - User context controller daemon
persistence-administrator_1.0.5.bb Required by AGL 1.0 specification GENIVI System - Data persistence daemon
persistence-client_library_1.0.0.bb Required by AGL 1.0 specification GENIVI Libraries - Data persistence
persistence-common-object_1.0.3.bb Required by AGL 1.0 specification GENIVI Libraries - Data persistence
wayland-ivi-extension_1.2.0.bb Required by AGL 1.0 specification GENIVI System - Graphics
wayland-ivi-extension_1.3.0.bb Required by AGL 1.0 specification GENIVI System - Graphics

For reference, we used the following extraction command:

# find meta-ivi -name *.bb | egrep -v "(packagegroup|recipes-yocto-ivi)" | xargs -n 1 basename | sort

The following package already exist in Yocto/OpenEmbedded, and are modified by the meta-ivi layer :

Name Motivation Category
bluez5_%.bbappend GENIVI patches System - Bluetooth
busybox_1.22.1.bbappend GENIVI configuration - provide additional tools : unzip…. System - Tools
connman_%.bbappend GENIVI configuration - disable Bluetooth management System - Network
dbus_%.bbappend GENIVI patches _ AF_DBUS support System - Libraries
gstreamer1.0-plugins-bad_%.bbappend GENIVI configuration - enable bluez5 Library - Multimedia (audio/video)
libpcap_1.6.1.bbappend Not present in Yocto Library - Network
mesa_10.%.bbappend GENIVI configuration - enable Gallium System - Graphics
neard_0.14.bbappend GENIVI configuration - disable bluez4 Libraries - Network (NFC)
ofono_%.bbappend GENIVI configuration - disable bluez4, enable bluez5 Library - Telephony (GSM/UMTS)
pulseaudio_5.0.bbappend GENIVI configuration - disable bluez4, enable bluez5 System - Audio
qemu_2.%.bbappend GENIVI configuration - enable PulseAudio Application - Virtualization
qt4-embedded_%.bbappend GENIVI configuration - enable QML Application Framework (Qt)
shadow-securetty_4%.bbappend GENIVI configuration - enable vexpress A9 ports ?
weston_1.5.0.bbappend GENIVI patches - add IVI-Shell System - Graphics
xkeyboard-config_%.bbappend GENIVI configuration - pull Gettext Data - Misc (keyboard layouts)
xserver-xorg_%.bbappend GENIVI configuration - add systemd service System - Graphics

For reference, we used the following extraction command :

# find meta-ivi -name *.bbappend | xargs -n 1 basename | sort

Explanation of motivations

AGL 1.0 specification compliance (original packages)

Most of the non-Yocto (“specific”) packages implement parts of the AGL 1.0 specification, for which there is no notable implementation in the upstream field nor in Tizen IVI.

Concerned sections of the specification are studied further below (see [AGL 1.0 specification matching]), but here is a short summary :

  • audiomanager : Sound Manager (AGL§4.1.4)
  • dlt-daemon : Diagnostic Services (AGL§5.2.4)
  • layer-management - wayland-ivi-extension : Window Manager (AGL§4.1.2)
  • node-health-monitor : Health Monitoring (AGL§5.1.5)
  • node-startup-controller - *-state-controller : Lifecycle Management (AGL§5.1.7)
  • persistence-administrator - *-client-library - *-common-object : Persistent Storage (AGL§5.1.5)

Among already existing packages, some are also patched to match the AGL specification :

  • weston_1.5.0.bbappend : add IVI-Shell = Window Manager (AGL§4.1.2)
Bluetooth with bluez5, QML... (existing packages)

Most of the existing Yocto packages reimplemented in the GENIVI layer have patches serving the following purposes :

  • gstreamer1.0-plugins-bad - neard - ofono - pulseaudio : switch from bluez4 to bluez5
  • qt4-embedded : enable the QML/Qt graphical widget definition language
  • … and other negligible things.

Suggestions for an AGL integration workflow

As Yocto provides a basis for a working (embedded) operating system, and the most recent versions of Tizen IVI and GENIVI are based on it, there is no need to duplicate its work. In other words : basic and not-to-be-modified packages such as “glibc”, “zlib”… can be pulled from Yocto directly, without any involvement besides adding contextual patches.

This will also allow maintainers to focus on integration tasks for RENESAS and GENIVI compliance. This mainly consists in :

  • RENESAS-specific work (kernel modules for BSP support) ;
  • IVI packges, consisting of packages pulled from either Tizen IVI or GENIVI Legacy (IVI-Shell, Automotive Message Broker …).

In this respect, the team should actively :

  • push new packages for upstream integration (e.g. RENESAS BSP support inside Yocto/OpenEmbedded, procps-ng support inside Poky…) so that their maintenance cost decreases over time ;
  • for packages out of place on upstream channels (ex : IVI-specific software such as Automotive Message Broker, ICO…), maintain them on a third-party repository providing additional Yocto layers.

Next sections will detail how this could be done.

General distribution proposal

Yocto allows to extend existing recipes by using .bbappend files.

The user should be instructed to download a Yocto-Poky 1.7 stable release, and have instructions to download the additional RENESAS Yocto layers as easily as possible.

These layers should not, if possible, alter the underlying Poky distribution. They should fit nicely “on top” of it.

If those layers provide an alternative for a Poky package (for instance, “procps-ng” instead of “procps”), they should provide a .bbappend and a .conf rule so that the alternative gets picked up instead of the Poky one.

If those layers provide a patch for a Poky package, they should provide a .bbappend rule so that the patch gets applied when necessary.

Then, by a single group of commands, the uses should be able to compile the software and create a flashable image containing RENESAS and GENIVI components.

Nevertheless, some of these components, such as drivers, are binary-only due to licensing concerns. In this case, the components should be downloaded in their binary format from a RENESAS or team repository.

The final image should contain all software necessary to boot the RENESAS R-Car board, with graphics, sound… and comply with the AGL specification.

It is the responsibility of maintainers to write the documentation and do the integration related to this.

Specific workflow proposals

Tizen IVI / GENIVI gap merge

1) Merge former 19 packages depending on conclusion of first analysis (see [SECTION] for results);

2) Compare full list of current Yocto 1.7 and Tizen IVI packages. Notice the gaps, identify their motivations as in the first analysis and merge as in 1) (see Appendix for results);

3) Host the result on an accessible repository.

GENIVI layer integration

1) Merge GENIVI packages depending on conclusion of first analysis (see [SECTION2] for results);

2) Compare full list of current Yocto 1.7 and Tizen IVI packages. Notice the gaps, identify their motivations as in the first analysis and merge as in 1) (see Appendix for results);

3) Host the result on an accessible repository.

RENESAS BSP integration

1) Validate that RENESAS BSP layers can be added on top of Poky 1.7. Modify or create new rules (.bbappend, .conf files) if necessary. Push patches to upstream Poky if necessary ;

2) Test on R-Car board(s) ;

3) Host the whole layers on an online repository ;

4) Write instructions on how to generate the final image using this repository.

Advanced study

Global gap : Tizen IVI / Yocto 1.7

(see appendix “Audit on GENIVI's components in AGL_Phase-1-ANNEX”)

Listing all packages present in Tizen IVI, and comparing them with Yocto 1.7, gives the following result :

  • Total Tizen packages : 305
  • Tizen Common-specific packages : 90
  • Tizen IVI-specific packages : 17
  • Upstream packages, not synchronized Poky <> Tizen : 58
  • Upstream packages, which exist in Tizen but not in Poky : 42

Hence the following status :

  • Tizen has 305 - 90 - 17 = 198 upstream packages ;
  • Among these 198 packages, 198 - 42 = 156 also exist in Yocto ;
  • Among these 156 packages, 156 - 58 = 98 are synchronized.

We can then propose two strategies depending on package types.

Upstream packages, not in Yocto

There are 42 upstream packages, having public websites and/or repositories, not present in Yocto. Are they necessary ? If they are, they should be pushed to upstream Yocto.

Here are some examples :

  • ibus : internationalization helper library

Mostly needed by weekeyboard (EFL virtual keyboard) : do we need an alternative Wayland virtual keyboard ? Weston already provides one. If not, no work is needed.

  • iniparser : general-purpose configuration parser library

Not used by any important software, no work needed.

  • libbullet : physics engine library

Mostly needed by recent EFL ; should be pulled when it becomes mandatory. Work needed.

  • libinput : general-purpose input library (keyboard, mouse, touch…)

Will be needed by Weston >= 1.70, already present in recent Poky, work not needed.

  • libva : GPU video acceleration support

Appreciably enhances video playback. Will a future version support our GPU ? If it will, work needed.

Out-of-sync packages

There are currently 58 packages in Tizen which are not in sync with their counterpart in Yocto 1.7.

Is there any ground for this ? If there is, patches and custom recipes should be maintained locally ; if not, we should synchronize with Yocto.

Here are some examples :

  • bluez : hardware bluetooth support

Does our bluetooth hardware require the most recent version ? If it does, maintain locally.

  • EFL : UI application framework

Do we need the more recent features, such as the pure-Wayland display manager ? If we do, maintain locally.

  • mesa : graphics stack

Does our GPU require the the most recent version ? if it does, maintain locally.

  • openssl : cryptographic library

Yocto version has the CVE-2014-3567/3568/3569 security vulnerabilities. Patch or maintain locally.

  • libv4l : video4linux, hardware video capture support

Yocto has a more recent version, and supports our hardware. Sychronize with Yocto.

AGL 1.0 specification compliance

(see appendix “Audit on GENIVI's components in AGL_Phase-1-ANNEX”)

The final distribution should ideally be fully compliant with the AGL 1.0 specification. This includes features such as : Application framework, Web runtime with HTML5, Miracast compatibility, Policy Manager.

These features mostly live in non-upstream packages, part of Tizen Common or IVI, such as “crosswalk”, “automotive-message-broker”, “murphy”…

Hence follow some proposals :

  1. Are these features supported in a GENIVI layer (see above) package ? If they are, we should simply use this package, and no further work is needed.
  2. If they are not, is there an existing upstream package, included in Yocto, supporting these features ? If there are, we should list and compare them, and decide if adaptation work is needed.
  3. If not, is there an existing Tizen Common/IVI package supporting these features ? If there are, we should list them, and decide if adaptation work is needed.

Detailed AGL specification 1.0 analysis

This chapter describes how to group the features by package types, then determine existing package names in GENIVI, upstream, and Tizen.

Here follows some of the AGL specification 1.0 points which can materialize as packages (the notation 'AGL§x.y.z' is used to reference an AGL specification 1.0 chapter).

Home Screen (AGL§3.1)

The specification requires a “customizable GUI layout”, defined with items such as “screen resource”, “input resource”, “transition effect”. (AGL§3.1.8.1)

Weston's ivi-shell provides a home screen without any specific automotive applications, fitting those needs. It is included starting from Weston 1.7, which is present in latest Yocto.

However, it also requires “sound resource” management, a “system setting menu”, a “mechanism to change date”, “change wireless communications”… (AGL§3.1.8.2).

For this, we need an enhanced home screen. GENIVI nor upstream do not provide one ; Tizen IVI, though, has 2 optional packages fitting this need : “Modello-Homescreen” (HTML5) and “ico-uxf-homescreen” (native). Note that these 2 packages are not maintained anymore, so we need to resume their maintenance.

Proposal : pull Weston ivi-shell from latest Yocto, pull ICO or Modello homescreen from Tizen IVI, and secure maintenance/development of these.

Window Manager (AGL§4.1.2)

The specification requires a “software component that is responsible for a layout management of windows” (this is satisfied by the standard “weston” package) but also which satisfies “IVI's complex requirements, typically requested from Policy Manager”.

The Use Case (AGL§4.1.2.1) then refers to Policy Manager's (see below) screen resource control section, which specifies :

  • allocation of surfaces (position, size…) ;
  • visibility control (surface visibility depending on driving mode e.g.) ;
  • layer information (z-order…).

The GENIVI Yocto layer “meta-ivi” contains the “layer-management” and “wayland-ivi-extensions” packages, which fulfill these requirements.

Proposal : pull the “layer-management” and “wayland-ivi-extensions” package from GENIVI Yocto layer.

Policy Manager (AGL§4.1.3)

The specification requires a Policy Manager which will “collect lots of status, such as user operation and application status, then issue Vehicle Info Control or Resource Control” (AGL§4.1.3.1.1). The detailed sections specify that it includes Screen (AGL§4.1.3.1.2.a), Sound (AGL§4.1.3.1.2.b), Input (AGL§4.1.3.1.2.c) resources, and precisely which resources. A policy manager is specific to the IVI market, there are no well-known implementations upstream, nor does GENIVI provide one. Tizen IVI, though, had such a software called Murphy. Note that it's not much maintained anymore. Proposal : pull Murphy from Tizen IVI, and security its maintenance/development.

eg-gap_genivi_yocto_tizenivi_gap_analysis.1444789814.txt.gz · Last modified: 2015/10/14 02:30 by mbc