Project

General

Profile

Actions

DeprecatedPortingGuideS5PC110 » History » Revision 8

« Previous | Revision 8/18 (diff) | Next »
Paul Kocialkowski, 12/23/2012 10:32 AM


PortingGuideS5PC110

This guide assumes your phone has a S5PC110/Exynos 3110 SoC

Prerequisites

Before porting your device to Replicant, you must make sure it complies with the following:
  • Already supported by CyanogenMod (or, worst-case scenario, by a non-official CyanogenMod port)
  • CyanogenMod support for this device is available for one of Replicant versions (pick the latest)
  • The phone is GSM: Replicant doesn't support CDMA phones yet
  • It is likely to be usable without blobs nor firmwares and with Replicant replacements

Investigating the phone hardware

Before doing anything, you will need to know the codename of the device. You can find it out on CyanogenMod Wiki or on CyanogenMod download page.
For instance, the Nexus S codename is: crespo.

First thing to consider before starting a port, when all of the above is assumed, is to see how many non-free components are required by CyanogenMod.
The easiest way to do this is to spot the device repository in CyanogenMod repos and look for the extract-files.sh or proprietary-blobs.txt file.
For instance, the list of non-free components for the Nexus S is extract-files.sh

From that list, spot what is related to what hardware component (audio, camera, sensors, gps, modem, etc): that gives an idea of the amount of work required to add support for the phone.

During the port, you might need to find precise infos about the hardware that is in the phone. A good to do this is by looking at the kernel defconfig for the device, another way is to download the Service Manual for the device.

Getting everything ready

In order to prepare everything for the Replicant port:

Cloning the device files

Once your Replicant tree is ready, you can start by adding the necessary repos for your device.
That means cloning the necessary repos in the right place. These repos are:
  • A device-specific repo. On CyanogenMod, it is usually called: android_device_vendor_device.
  • Sometimes one or more common repo(s), usually called: android_device_vendor_devices-common.
    Some devices don't need any common repo, but some do.
  • A kernel repo. On CyanogenMod, it is usually called: android_kernel_samsung_devices.
    The kernel repo can be shared across a family of devices (for instance, on kernel repo for Samsung Exynos, one for Samsung OMAP, etc).

Creating the kernel repo

If the kernel repo is nowhere to be found, you'll need to get the kernel source directly from the vendor, especially if your device is supported by a 3rd party CyanogenMod fork.
Keep in mind that the Linux kernel is GPLv2, so vendors have the legal obligation to release the modified kernel sources as soon as they sell you the device.
That means the kernel sources will be available online. Here are some websites where such releases are done:
  • Samsung Open Source Release Center
    For Samsung kernels. Search the device codename (e.g. I9000) and download the package called "Opensource Update" (e.g. GT-I9000_Opensource_GB_Update2.zip).
    This will hold a kernel archive with all the sources and instructions on how to build it and which defconfig to use.

Once you have the kernel sources, read the instructions to find out which defconfig to use.

Since manufacturers usually don't release the git history along with the files, you'll need to recreate a git repo:
  • Clone the mainline kernel in the same version as the Makefile from the sources you just obtained
  • Remove the cloned files except the .git directory
  • Move the manufacturer kernel tree at the place of the files you just removed
  • Add all the files in git (git add -A) and commit (git commit) with a message explaining what you just imported (e.g. "GT-I9000 GB Opensource Update 2")

Now that you have a git repo, you can move it to the Replicant code tree, under the name: kernel/vendor/devices (e.g. kernel/samsung/aries).
Make sure to make the devices name match the devices in android_device_vendor_devices-common if the kernel is shared across these devices or to match the device in android_device_vendor_device.

Building the kernel

The first step when porting a new device to Replicant is to build a kernel image and ensure it works.
Start by looking if

For doing that, you need to sport where the kernel source is held. CyanogenMod

Get the source and build a kernel image

  • adding the 3rd party repos if any
  • add kernel: where the find the kernels?
    - official feeds
    - the ones on GIT (teamhacksung, better ask CM people)
    - 3rd party projects
  • add kernel to product files on vendor/replicant
  • change ro.modversion on product vendor file

Various hardware and software fixes to get things working.

To get software video decoding (OMX stuff):

Updated by Paul Kocialkowski over 11 years ago · 8 revisions

Also available in: PDF HTML TXT