Difference between revisions of "Porting Guide"

From WebOS-Ports
Jump to navigation Jump to search
Line 55: Line 55:
 
== Creating an OpenEmbedded machine layer ==
 
== Creating an OpenEmbedded machine layer ==
  
FIXME
+
To build webOS with OpenEmbedded you need to create machine layer for it (also called board support package (BSP)). There are already some available in the [http://git.shr-project.org/git/?p=meta-smartphone.git;a=summary meta-smartphone] layer which can be used as reference. A very good guide on how to create a machine layer is available [https://www.yoctoproject.org/docs/current/bsp-guide/bsp-guide.html here] from the [https://yoctoproject.org/ Yocto Project].
  
 
== Integration with several webOS components ==
 
== Integration with several webOS components ==

Revision as of 16:26, 14 October 2013

Overview

To rapidly support a wide range of devices, our architecture reuses some of the drivers and hardware enablement available for Android.

As a consequence, at the current images you'll find some of the Android services running at the device next to the webOS services.

For quick reference, these are the current components used from Android:

  • Linux Kernel (stock Android kernel provided by the vendor, with a few changes to support some extra features needed by Ubuntu)
  • OpenGL ES2.0 HAL and drivers
  • Audio/Media HAL and services, to re-use the hardware video decoders
  • RILD for modem support

Other than the very basic services (needed to re-use the binary blobs already available), the rest is just pure webOS goodness .

Porting webOS ports to another target device consists of several steps:

  1. Building the Android pieces
  2. Kernel modifications
  3. Creating an OpenEmbedded machine layer
  4. Integration with several webOS components

All in all you should try to make each part of your work available for other people and easily to reproduce so other people can start helping with the port.

Building the Android pieces

Please refer to the Ubuntu Touch porting guide and the chapter Building the Android pieces for details.

Kernel

The used kernel is directly based on an Android device kernel without any extra modifications. We will create a recipe in the OpenEmbedded machine layer later.

As a requirement from the webOS userspace, we need to add a few extra kernel configs that are usually not enabled by default for Android.

  • CONFIG_SYSVIPC=y
  • CONFIG_NAMESPACES=y
  • CONFIG_UTS_NS=y
  • CONFIG_IPC_NS=y
  • CONFIG_USER_NS=y
  • CONFIG_PID_NS=y
  • CONFIG_NET_NS=y
  • CONFIG_DEVTMPFS=y
  • CONFIG_DEVTMPFS_MOUNT=y
  • CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
  • CONFIG_FSNOTIFY=y
  • CONFIG_DNOTIFY=y
  • CONFIG_INOTIFY_USER=y
  • CONFIG_FANOTIFY=y
  • CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
  • CONFIG_SWAP=y
  • # CONFIG_ANDROID_PARANOID_NETWORK is not set
  • CONFIG_VT=y
  • CONFIG_VT_CONSOLE=y

Creating an OpenEmbedded machine layer

To build webOS with OpenEmbedded you need to create machine layer for it (also called board support package (BSP)). There are already some available in the meta-smartphone layer which can be used as reference. A very good guide on how to create a machine layer is available here from the Yocto Project.

Integration with several webOS components

To integrate an Android based propably with webOS ports some components need to be modified.

nyx-modules

The nyx module are responsible within webOS to support certain hardware features in a device independet manner. We already modified the Open webOS standard implementation so it should work with most Android device. The only thing which need to be done for a need porting device is to add a device configuration file to the repository (or as patch in your OE machine layer).

The machine configuration file needs to be placed within the src/machine directory of the nyx-modules repository and should look like this:

set(MODULE_SYSTEM_WEBOS_LINUX	YES)
set(MODULE_KEYS_WEBOS_LINUX	YES)
set(MODULE_TOUCHPANEL_WEBOS_LINUX	YES)
set(MODULE_LED_CONTROLLER_WEBOS_LINUX	YES)
set(MODULE_HAPTICS_TIMEDOUTPUT_WEBOS_LINUX	YES)
add_definitions(-DKEYPAD_INPUT_DEVICE=\"/dev/input/event2\")
add_definitions(-DBATTERY_SYSFS_PATH=\"/sys/class/power_supply/battery/\")

The last two lines needs to be adjusted to fit your porting device. If you need further assistance you can also look at the already existing configuration files for other machines at [1].

LunaSysMgr

FIXME