DeprecatedPortingGuideS5PC110 » History » Version 10
Paul Kocialkowski, 12/23/2012 11:41 AM
| 1 | 1 | Paul Kocialkowski | h1. PortingGuideS5PC110 |
|---|---|---|---|
| 2 | |||
| 3 | *This guide assumes your phone has a S5PC110/Exynos 3110 SoC* |
||
| 4 | |||
| 5 | 3 | Paul Kocialkowski | h2. Prerequisites |
| 6 | 1 | Paul Kocialkowski | |
| 7 | 3 | Paul Kocialkowski | Before porting your device to Replicant, you must make sure it complies with the following: |
| 8 | * Already supported by CyanogenMod (or, worst-case scenario, by a non-official CyanogenMod port) |
||
| 9 | * CyanogenMod support for this device is available for one of Replicant versions (pick the latest) |
||
| 10 | * The phone is GSM: Replicant doesn't support CDMA phones yet |
||
| 11 | * It is likely to be usable without blobs nor firmwares and with Replicant replacements |
||
| 12 | 1 | Paul Kocialkowski | |
| 13 | 3 | Paul Kocialkowski | h2. Investigating the phone hardware |
| 14 | 1 | Paul Kocialkowski | |
| 15 | 3 | Paul Kocialkowski | Before doing anything, you will need to know the codename of the device. You can find it out on "CyanogenMod Wiki":http://wiki.cyanogenmod.org/ or on "CyanogenMod download page":http://get.cm/. |
| 16 | For instance, the "Nexus S":http://wiki.cyanogenmod.org/wiki/Nexus_S codename is: @crespo@. |
||
| 17 | 1 | Paul Kocialkowski | |
| 18 | 3 | Paul Kocialkowski | 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. |
| 19 | The easiest way to do this is to spot the device repository in "CyanogenMod repos":https://github.com/CyanogenMod/ and look for the @extract-files.sh@ or @proprietary-blobs.txt@ file. |
||
| 20 | For instance, the list of non-free components for the "Nexus S":https://github.com/CyanogenMod/android_device_samsung_crespo is "extract-files.sh":https://github.com/CyanogenMod/android_device_samsung_crespo/blob/ics/extract-files.sh |
||
| 21 | |||
| 22 | 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. |
||
| 23 | |||
| 24 | 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. |
||
| 25 | |||
| 26 | h2. Getting everything ready |
||
| 27 | |||
| 28 | In order to prepare everything for the Replicant port: |
||
| 29 | * Install CyanogenMod on the phone |
||
| 30 | * Install the [[BuildDependencies]] |
||
| 31 | * Get the sources: [[GettingReplicantSources]] |
||
| 32 | * Read Replicant developer guide: [[DeveloperGuide]] |
||
| 33 | * Learn how to do debug: [[GettingLogs]] [[GDBDebugging]] |
||
| 34 | |||
| 35 | 8 | Paul Kocialkowski | h2. Cloning the device files |
| 36 | |||
| 37 | Once your Replicant tree is ready, you can start by adding the necessary repos for your device. |
||
| 38 | That means cloning the necessary repos in the right place. These repos are: |
||
| 39 | 10 | Paul Kocialkowski | * A *device-specific repo*. On CyanogenMod, it is usually called: @android_device_vendor_device@. |
| 40 | * Sometimes one or more *common repo(s)*, usually called: @android_device_vendor_devices-common@. |
||
| 41 | 1 | Paul Kocialkowski | Some devices don't need any common repo, but some do. |
| 42 | 10 | Paul Kocialkowski | * A *kernel repo*. On CyanogenMod, it is usually called: @android_kernel_samsung_devices@. |
| 43 | 8 | Paul Kocialkowski | The kernel repo can be shared across a family of devices (for instance, on kernel repo for Samsung Exynos, one for Samsung OMAP, etc). |
| 44 | 10 | Paul Kocialkowski | If there are different branches in the kernel repo, be sure to use the one that will match userspace: if you are porting to ICS, take the branch called @ics@ or ask the people who know which branch to use. |
| 45 | Generally speaking, the following kernel versions match the given userspaces: |
||
| 46 | 1 | Paul Kocialkowski | |
| 47 | 10 | Paul Kocialkowski | | *Android version* | *CyanogenMod version* | *Kernel version* | |
| 48 | | Android 2.3 | CM 7.x | 2.6.35 | |
||
| 49 | | Android 4.0 | CM 9.x | 3.0.8 | |
||
| 50 | | Android 4.1 | CM 10 | 3.0.31 | |
||
| 51 | | Android 4.2 | CM 10.1 | 3.4 | |
||
| 52 | |||
| 53 | 9 | Paul Kocialkowski | Clone these repos in the correct locations and remove the prefix (e.g. @android_device_samsung_crespo@ must be cloned in @device/samsung/@ and renamed to @crespo@). |
| 54 | |||
| 55 | 8 | Paul Kocialkowski | h3. Creating the kernel repo |
| 56 | |||
| 57 | 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. |
||
| 58 | 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. |
||
| 59 | That means the kernel sources will be available online. Here are some websites where such releases are done: |
||
| 60 | * "Samsung Open Source Release Center":http://opensource.samsung.com/ |
||
| 61 | 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). |
||
| 62 | This will hold a kernel archive with all the sources and instructions on how to build it and which defconfig to use. |
||
| 63 | |||
| 64 | Once you have the kernel sources, read the instructions to find out which defconfig to use. |
||
| 65 | |||
| 66 | Since manufacturers usually don't release the git history along with the files, you'll need to recreate a git repo: |
||
| 67 | * Clone the mainline kernel in the same version as the Makefile from the sources you just obtained |
||
| 68 | * Remove the cloned files *except the .git directory* |
||
| 69 | * Move the manufacturer kernel tree at the place of the files you just removed |
||
| 70 | * 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") |
||
| 71 | |||
| 72 | 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@). |
||
| 73 | 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@. |
||
| 74 | |||
| 75 | 9 | Paul Kocialkowski | h3. Adding the device to the build targets |
| 76 | |||
| 77 | Now that the repos are cloned, you need to modify some makefiles to cope with Replicant paths. |
||
| 78 | In the device repository (@device/vendor/device@), modify the file called @cm.mk@ and replace the @vendor/cm/@ occurrences by @vendor/replicant/@. Other makefiles may need that as well (in any case, build will fail very early if you missed one). In that same @cm.mk@ file, change the PRODUCT_NAME variable by repalcing the @cm@ prefix with @replicant@ (e.g. change PRODUCT_NAME := cm_crespo to PRODUCT_NAME := replicant_crespo). |
||
| 79 | |||
| 80 | Now that your device files are ready, you can declare a new build target: these are held in @vendor/replicant/jenkins-build-targets@. |
||
| 81 | Modify that file and add a line (at the end) with the PRODUCT_NAME you set and the @-eng@ suffix (e.g. @replicant_crespo-eng@). |
||
| 82 | |||
| 83 | From now on, everything should be ready to start a build. To check for errors or missed occurrences, start a terminal in the Replicant tree root and lunch: |
||
| 84 | <pre> |
||
| 85 | source build/envsetup.sh |
||
| 86 | lunch replicant_device-eng |
||
| 87 | </pre> |
||
| 88 | |||
| 89 | Adapt replicant_device-eng from what you added to the @jenkins-build-target@ (e.g. @replicant_crespo-eng@). |
||
| 90 | If an error occurs, it will explicitly report it and you'll need to fix it before doing anything. |
||
| 91 | If everything works correctly, you should see something like: |
||
| 92 | <pre> |
||
| 93 | ============================================ |
||
| 94 | PLATFORM_VERSION_CODENAME=REL |
||
| 95 | PLATFORM_VERSION=4.0.4 |
||
| 96 | TARGET_PRODUCT=replicant_crespo |
||
| 97 | TARGET_BUILD_VARIANT=eng |
||
| 98 | TARGET_BUILD_TYPE=release |
||
| 99 | TARGET_BUILD_APPS= |
||
| 100 | TARGET_ARCH=arm |
||
| 101 | TARGET_ARCH_VARIANT=armv7-a |
||
| 102 | HOST_ARCH=x86 |
||
| 103 | HOST_OS=linux |
||
| 104 | HOST_BUILD_TYPE=release |
||
| 105 | BUILD_ID=IMM76L |
||
| 106 | ============================================ |
||
| 107 | 1 | Paul Kocialkowski | </pre> |
| 108 | |||
| 109 | h2. Building the kernel |
||
| 110 | 10 | Paul Kocialkowski | |
| 111 | Once the devices repos are in place and the build target is configured, you are now able to start building things. |
||
| 112 | |||
| 113 | 8 | Paul Kocialkowski | |
| 114 | 9 | Paul Kocialkowski | Now that the devices repos are in place, |
| 115 | 8 | Paul Kocialkowski | |
| 116 | For doing that, you need to sport where the kernel source is held. CyanogenMod |
||
| 117 | |||
| 118 | 1 | Paul Kocialkowski | h2. Get the source and build a kernel image |
| 119 | |||
| 120 | * adding the 3rd party repos if any |
||
| 121 | * add kernel: where the find the kernels? |
||
| 122 | - official feeds |
||
| 123 | - the ones on GIT (teamhacksung, better ask CM people) |
||
| 124 | - 3rd party projects |
||
| 125 | * add kernel to product files on vendor/replicant |
||
| 126 | 2 | Paul Kocialkowski | |
| 127 | * change ro.modversion on product vendor file |
||
| 128 | 4 | Paul Kocialkowski | |
| 129 | 6 | Denis 'GNUtoo' Carikli | h2. Various hardware and software fixes to get things working. |
| 130 | 1 | Paul Kocialkowski | |
| 131 | 6 | Denis 'GNUtoo' Carikli | h3. To get software video decoding (OMX stuff): |
| 132 | 7 | Denis 'GNUtoo' Carikli | |
| 133 | 4 | Paul Kocialkowski | * remove OMX libs for hardware video decoding |
| 134 | 1 | Paul Kocialkowski | * remove libstagefrighthw.so |
| 135 | 5 | Denis 'GNUtoo' Carikli | like that: http://gitorious.org/replicant/device_samsung_crespo/commit/c8edb6539977c8820d665691d53c33892cfa4fdd |