[GUIDE]Development for GalaxyTab 7.7 and Plus. How hard could it be?

Search This thread

daniel_hk

Inactive Recognized Contributor
Nov 12, 2012
1,634
5,344
Hong Kong
Realme X2
Hi Daniel,

as a beginner, I followed your great guide. My target is LinageOS cm13.

Sync went well after some iterations, my local_manifest.xml looks like this:
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!-- device related -->
  <project path="hardware/atheros" name="danielhk/android_hardware_atheros_wlan"/>
  <project path="hardware/samsung" name="CyanogenMod/android_hardware_samsung"/>
  <project path="device/samsung/p6800" name="danielhk/android_device_samsung_p6800"/>
  <project path="packages/apps/SamsungServiceMode" name="CyanogenMod/android_packages_apps_SamsungServiceMode"/>
  <project path="vendor/samsung" name="danielhk/proprietary_vendor_samsung_smdk4210"/>
  <project path="device/samsung/smdk4210-tab" name="danielhk/android_device_samsung_smdk4210-tab"/>
  <project path="kernel/samsung/smdk4210" name="danielhk/android_kernel_samsung_smdk4210"/>
</manifest>

The "mka bacon" now fails with:

build/core/base_rules.mk:157: *** vendor/samsung/smdk4210-tab/props: MODULE.TARGET.SHARED_LIBRARIES.libUMP already defined by hardware/samsung/exynos4/hal/libUMP.

Furthermore - a minor issue maybe:
"images/tvdpi" missing. Seems to be a font, required.

Can you share your experience building cm13 before?

Thanks and Best Regards

A year or two is a few centuries in technology. CM/Lineage has changed a lot since cm-13.0. My "experience" was already obsolete for some time.

As far as I know and remember:
1. CM/Lineage now use opensource libUMP. You need to remark the libUMP entry in the Android.mk inside vendor/samsung/smdk4210-tab
2. tvdpi is also obsolete. You can use a symlink to say "xdpi". You may reference the links for some other dpi in the same folder.

Good luck! ;)
 

frami2

Member
Mar 19, 2017
22
39
libUMP.so in CM11

Hi @daniel_hk and @p3dboard

I'm still trying to succeed my first build. I'm now targeting CM11 - since this guide is about CM11. I followed your discussion regarding RIL and also commented out RIL things like P3dboard for now (but the chain of dependency seems to be a bit different in CM11). Now all RIL error are gone it seems.
Now, the error is regarding libUMP.so, required by libgralloc_ump in the exynos HAL area.
How is libUMP.so to be handled in CM11? I did'nt find it anywhere in my source tree neighter as source MODULE nor as prebuilt lib.

Later I would be curious how you finally solved to get RIL compiling

Thanks and Best regards
Frank
 

p3dboard

Senior Member
Oct 20, 2013
1,003
616
Hi

I'm still trying to succeed my first build. I'm now targeting CM11 - since this guide is about CM11. I followed your discussion regarding RIL and also commented out RIL things like P3dboard for now (but the chain of dependency seems to be a bit different in CM11). Now all RIL error are gone it seems.
Now, the error is regarding libUMP.so, required by libgralloc_ump in the exynos HAL area.
How is libUMP.so to be handled in CM11? I did'nt find it anywhere in my source tree neighter as source MODULE nor as prebuilt lib.

Later I would be curious how you finally solved to get RIL compiling

Thanks and Best regards
Frank

Hi Frank,

I just used Daniels precompiled RIL libraries in my builds, so I didn't compile them at all. If you go to the SlimLP rom thread that I had going, you can download my compile notes, which would probably help you build a CM12 based rom with a few changes. You'll might need to set the target / source in your Manifest.xml so that it grab's the CM11 repositories from Daniels Github (if you haven't already done that).

I had a bit of fun getting through the errors, but eventually got the compiling working, but its a bit of playing around.

My old P6810 just runs Daniels Carbon Rom Android 4.4.4 build, as I found that Android 4.4.4 was fairly stable, and I mainly use it for reading. My main device now is a newer Nvidia Shield tablet.
 

frami2

Member
Mar 19, 2017
22
39
First build succeeded - still many issues

Hi @daniel_hk,

finally, I got my first lineageos cm13 to build. Current local manifest, ignoring bluetooth, is for now:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

<!-- bluez support-->
<remove-project name="LineageOS/android_system_bt"/>
<remove-project name="LineageOS/android_packages_apps_Bluetooth"/>
<remove-project name="LineageOS/android_packages_apps_BluetoothExt"/>

<!--remote name="bluez-android" fetch="https://github.com/bluez-android" />
<remote name="korg" fetch="git://git.kernel.org/pub/scm/bluetooth/"/-->

<!-- Track my bluez with M patch -->
<!--project path="external/bluetooth/bluez" name="danielhk/android_external_bluetooth_bluez" group="pdk" revision="master" /-->
<!-- <project remote="korg" path="external/bluetooth/bluez" name="bluez" group="pdk" revision="master"/> -->
<!--project remote="korg" path="external/bluetooth/sbc" name="sbc" group="pdk" revision="master"/-->
<!--project remote="bluez-android" path="external/bluetooth/glib" name="glib" group="pdk" revision="master"/-->


<!-- device related -->
<project path="external/stlport" name="LineageOS/android_external_stlport" />
<project path="hardware/atheros" name="danielhk/android_hardware_atheros_wlan" />
<project path="hardware/samsung" name="LineageOS/android_hardware_samsung" />
<project path="packages/apps/SamsungServiceMode" name="CyanogenMod/android_packages_apps_SamsungServiceMode" />


<!-- device trees and kernel -->
<project name="danielhk/android_device_samsung_p6800" path="device/samsung/p6800" />
<project name="danielhk/android_device_samsung_smdk4210-tab" path="device/samsung/smdk4210-tab" />
<project name="danielhk/android_kernel_samsung_smdk4210" path="kernel/samsung/smdk4210" />
<project name="danielhk/proprietary_vendor_samsung_smdk4210" path="vendor/samsung" />

</manifest>

After making small code changes for every syntax error I got the rom starting finally. The RIL syntax issues - I just copied a more recent "ril.h" from one of the central RIL folders to the smdk4210 specific folders with the outdated ril.h.
Bluetooth is deactivated. At first start the keyboard did'nt come up - same issues as for p3board.
Just recently, I managed to deactivate the keyboard dock/ hardware keyboard at all, so that even the touch keys come up at first start of the rom, for entering WIFI credentials, etc.

Current status (very unstable):
- WIFI works basically - Browser is working
- Touch keyboard is working
- Camera also works

Main problems:
- external sd card is not working (where can I upload the logcat?) - also the rom does not start while an sd-card is in
Main issue seems to be:
05-25 20:16:31.159 6905 6905 E StorageSettings: Failed to partition
05-25 20:16:31.159 6905 6905 E StorageSettings: java.lang.IllegalStateException: missing output stream
05-25 20:16:31.159 6905 6905 E StorageSettings: at android.os.Parcel.readException(Parcel.java:1628)
05-25 20:16:31.159 6905 6905 E StorageSettings: at android.os.Parcel.readException(Parcel.java:1573)
05-25 20:16:31.159 6905 6905 E StorageSettings: at android.os.storage.IMountService$Stub$Proxy.partitionPublic(IMountService.java:1052)
05-25 20:16:31.159 6905 6905 E StorageSettings: at android.os.storage.StorageManager.partitionPublic(StorageManager.java:697)
05-25 20:16:31.159 6905 6905 E StorageSettings: at com.android.settings.deviceinfo.StorageWizardFormatProgress$PartitionTask.doInBackground(StorageWizardFormatProgress.java:118)
05-25 20:16:31.159 6905 6905 E StorageSettings: at com.android.settings.deviceinfo.StorageWizardFormatProgress$PartitionTask.doInBackground(StorageWizardFormatProgress.java:92)
05-25 20:16:31.159 6905 6905 E StorageSettings: at android.os.AsyncTask$2.call(AsyncTask.java:295)
05-25 20:16:31.159 6905 6905 E StorageSettings: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-25 20:16:31.159 6905 6905 E StorageSettings: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
05-25 20:16:31.159 6905 6905 E StorageSettings: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
05-25 20:16:31.159 6905 6905 E StorageSettings: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
05-25 20:16:31.159 6905 6905 E StorageSettings: at java.lang.Thread.run(Thread.java:818)
05-25 20:16:31.166 2975 7061 W ActivityManager: Duplicate finish request for ActivityRecord{5ded6c6 u0 com.android.settings/.deviceinfo.StorageWizardFormatConfirm t11 f}
- graphical glitches and no youtube video play, it looks weird, rotation not always working

Do you have any experience/ hints regarding the sd-card issue? And I know you have some regarding the graphical issues :)

Best regards
Frank
 

daniel_hk

Inactive Recognized Contributor
Nov 12, 2012
1,634
5,344
Hong Kong
Realme X2
Hi @daniel_hk,

finally, I got my first lineageos cm13 to build. Current local manifest, ignoring bluetooth, is for now:



After making small code changes for every syntax error I got the rom starting finally. The RIL syntax issues - I just copied a more recent "ril.h" from one of the central RIL folders to the smdk4210 specific folders with the outdated ril.h.
Bluetooth is deactivated. At first start the keyboard did'nt come up - same issues as for p3board.
Just recently, I managed to deactivate the keyboard dock/ hardware keyboard at all, so that even the touch keys come up at first start of the rom, for entering WIFI credentials, etc.

Current status (very unstable):
- WIFI works basically - Browser is working
- Touch keyboard is working
- Camera also works

Main problems:
- external sd card is not working (where can I upload the logcat?) - also the rom does not start while an sd-card is in
Main issue seems to be:

- graphical glitches and no youtube video play, it looks weird, rotation not always working

Do you have any experience/ hints regarding the sd-card issue? And I know you have some regarding the graphical issues :)

Best regards
Frank

Hi Frank,
I lost most of the things for Samsung so I can only recall my memory.

I guess you use adopted mode for the ext. sdcard. There was something wrong (seems gapps related, I remember opengapps is not working and some reported delta gapps would work) for adopted mode. Try portable mode first. I would work. You may format your sdcard in recovery first. See if it solve the stuck at boot.

For graphical glitches, it appeared in KK. Screen capture was too slow and left out some part of the image. I had changed a few things in screen capture to solve it. Some Samsung related patches were already in LP and MM so it disappeared after LP or MM. Check if you have those Samsung flags enabled.

You may compare with my last cm13 to see if there are other differences.
Good luck!
Daniel
 

p3dboard

Senior Member
Oct 20, 2013
1,003
616
finally, I got my first lineageos cm13 to build. Current local manifest, ignoring bluetooth, is for now:

At first start the keyboard did'nt come up - same issues as for p3board.
Just recently, I managed to deactivate the keyboard dock/ hardware keyboard at all, so that even the touch keys come up at first start of the rom, for entering WIFI credentials,

Hi Frank,
If you could post what you had to do to deactivate the keyboard dock / hardware keyboard, that would be great information for anyone in the future developing a Rom.

Regards,
Peter
 

frami2

Member
Mar 19, 2017
22
39
Hi Frank,
If you could post what you had to do to deactivate the keyboard dock / hardware keyboard, that would be great information for anyone in the future developing a Rom.

Regards,
Peter

Hi Peter,

according to your idea I looked into WindowManagerService.java. I could'nt find the ideal solution to switch between hard and soft keys, what I did is a modification of the place where this should be decided:

Code:
        // Determine whether a hard keyboard is available and enabled.
        /*boolean hardKeyboardAvailable = false;
        if (!mForceDisableHardwareKeyboard) {
            mHardKeyboardAvailable = config.keyboard != Configuration.KEYBOARD_NOKEYS;
        }
        if (hardKeyboardAvailable != mHardKeyboardAvailable) {
            mHardKeyboardAvailable = hardKeyboardAvailable;
            mHardKeyboardEnabled = hardKeyboardAvailable;
            mH.removeMessages(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
            mH.sendEmptyMessage(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
        }*/
        //if (!mHardKeyboardEnabled) {
        config.keyboard = Configuration.KEYBOARD_NOKEYS;
        //}

config.keyboard = Configuration.KEYBOARD_NOKEYS;

always prefers the soft-keys. Anyhow, now both work - once the keyboard dock is connected you can type with the hard keys, but still the soft keyboard is shown on the screen...
Had no time for investing any further - but for now this works for me

Best regards,
Frank
 
  • Like
Reactions: p3dboard

Top Liked Posts

  • There are no posts matching your filters.
  • 41
    Planning this for sometimes. So much work ahead. Just studying the new code cause me a lot of time. I think I have to rush it out so that someone may share my burden. Don't have much time to polish it. I'm trying to provide all commands, files and links. Please correct me if something is wrong or missing. Hoping this could be a stepping stone for those interested. If you like challenge, it'll be fun! ;)

    1. Introduction :)
    If you have watched "Top Gear", you would have heard Jeremy Clarkson said "How hard could it be?". Why is it so hard to build a rom for our tab?
    When I first play with rom building, it was quite straightforward. I recuilt my retired PC (Celeron 1.2G with 3G RAM, 40G HD) and follow the guild for building PA. Installing Ubuntu 12.04 and then the necessary packages. Everything is ready in a few hours. It was really challenging your patience to repo sync the source. After a few retries, I finally completed the download in two days! After two hours, my harddisk is full! Then I collected another retired 80G HD from a friend. Re-install everything and build again. Building requried 7 hours on my antique PC. With only a few minor errors to correct, my first rom pa2.55 was out. So how hard could it be? It was our predecessors ( @ohanar, @locerra, etc.) :good: who had already done lots of hardwork on device trees and kernel! If Samsung has really released the hardware related sources, there will not be so much troubles for us. At the time Android 4.2 launch, we have a new problem. Our tab's CSR chip doesn't support Bluedroid. See the Nexus family, everything is ready. Rom building will never be so pain in the ass as us.

    1.1 What's wrong with our hardware :confused:
    GT-7.7 and Plus use the exynos4 smdk4210 board with Mali-400 GPU. Quite a number of devices have similar hardware. The main problem we have would be:
    1.1.1 CSR bluetooth chip.
    CSR chip doesn't support bluedroid which become standard after Android 4.2. Bluez.org has provide a solution for 4.2 early this year but porting to 4.3 and 4.4 may take some time.Working on it now. Anyone has experience on bluetooth are welcome to help.. Bluez working now. See my Thread How to port Bluez to Android 4.4. Cheers!:highfive:
    1.1.2 Athero wifi chip.
    Samusng's wifi driver has issues on 5G support and SOD. I'm using the modified kernel driver from Samsung's 4.1.2 source. Athero provide drivers for 3.1 to 3.10 linux kernels but they have no wakelock support. I also wrote a drive base on Athero's source and add wakelock support but have no time to polish it now. Athero's chip doesn't have firmware for AP as Boardcom. Which is also the way Android platform providing wifi tethering in framework. To support wifi tethering we have to change the framework and the driver. Anyone has experience in linux HostAP are welcome to help. Wifi tethering is ok now! Tutorial will be in Post#2 soon.
    1.1.3 modem chip (xm6260).
    RIL stand for (radio interface library). Most of the phone manufacturer would provide their own vendor lib. The only working blob now is Samsung's ICS propietry libsec-ril.so which is obselete now. The one from stock 4.1.2 not working but no time to trace. It also don't seems to have much difference. This library handle the AT commands issuing to the (baseband to) modem chip. xm6260 has a complete set of command manual. It should not be too hard to rewrite if we can hack the ports. However it is not worth to splend too much time on this. Those has experience in AT commands are welcome to help.
    RIL details: http://www.kandroid.org/online-pdk/guide/telephony.html

    1.2 Where to get the source? :confused:
    1.2.1 Samsung's source for our tab
    The best source would be from Samsung http://opensource.samsung.com/. Sadly, the source from Samsung only cover the kernel. Our tab only have source up to 4.1.2 and kernel source 3.0.31 from Samsung.
    1.2.2 Samsung's source for other devices
    Luckly, we have similar architecture to some newer Samsung models. Their source is our major source now. eg. We can use the Mali driver from Note8 and/or i9300.
    1.2.3 Manufacturere's web site.
    The other source would be from the chip manufacturer. eg. Athero has source for linux.

    1.3 What is going on at boot? :confused:
    1.3.1 Power ON
    a) When power button is long pressed (should be released after the logo shows otherwise it will reboot again every 6 seconds). The manufacturer's bootloader would show the vendor's logo. At that moment, bootloader would sense if there are key being pressed. Standard Android will go to boot menu when pwr + vol- is pressed. Samsung would go to download mode (something like fastboot) and accept pwr + vol+ to start recovery mode. If no other key is pressed, it would be a normal boot.
    b) When USB is plug in (PC usb port or charger) at power off, the tab will be turn on silently. It is in the LPM (low power mode). According to lpm.rc (executed by Init, will be explained in 1.3.3), CPU will be set to POWERSAVING and the program charger is running. It should only handle simple tasks like Detecting the pwr button to show the charging images. If the pwr is long press when showing the charging image, it will reboot as in a).
    3) Lollipop LPM: charger is link to the program /sbin/healthd. The process is similar to b) but lpm.rc is merged to init.rc.
    1.3.2 Boot image
    For our tab, there are two parts for a boot.img or a recovery.img. kernel binary and initramfs. As the name imply, Init-Ram-FS is the initial file system loaded into ram when the devices boot. Kernel binary provide the hardware drivers libraies which communicate with the hardware and baseband. At normal boot or recovery mode, the image (in /boot or /recovery partition) will be decompressed and loaded to memory. Initramfs will be loaded in root(/). It would consume a few hundreds MB of RAM and that's why our free ram is only 7xxM.
    In LPM, it would depends on the last boot state. If it was powered off from recovery, recovery.img will be loaded and handle the LPM. If it was powered off from platform, boot.img will be loaded and handle LPM. That's why It might show different charging images if the charging images for reovery.img and boot.img are different.
    Stock cook roms can unpack and modified the initramfs from the existing zImage. It is created in system/core if we build it from source. Here is a tool which can unpack/repack our boot.img or recovery.img.
    1.3.3 Init
    There is the Init program in every initramfs. This is the first program to run according to the sequence in the init.rc (or lpm.rc when in LPM). Partitions will be mounted and symlinked, default values and permissions are assigned, services will be started, etc. The source of Init is in system/core. The last thing Init do would be the continuous eventloop to process events.

    2. Getting Start :cowboy:
    To start building, we need the building environment. Many tutorials have alreay covered the details so I just list my suggestions. The guide from Google is a bit outdated but really helpful. http://source.android.com/source/building.html
    Basic knowledge of linux is required. All commands are run in a terminal.

    2.1 Hardware
    A decent PC with as much ram as possible. Thanks for the donations, I can upgrade to a better i5 notebook with 4G ram and a 500G partition only for building. It would take 3+hrs. for a clean build. RAM and Harddisk speed are essential. A desktop PC with same configuration will be faster since notebook harddisk is slower. I plan to add more RAM when the price drop (seems to be a long wait :()
    RAM: 4G or above is recommended.
    Harddisk space: 30G+ for system, 60G+ per rom, size of ccache (50G-100G), Roughly, a partition with at least 120G for one rom. Bigger is better.
    A decent internet connection is essential. It will take days to sync the source if you only have bandwidth of 2M or less .

    2.2 OS
    64bit Ubuntu Desktop 12.04 or above. Recommend 13.04 or above. I'm using the latest 14.04.

    2.3 Install the required packages
    These packages are required during building and packing. (eg. gzip is required to compress the kernel binary)
    type command: (have a beer or coffee. It will take a while)
    Code:
    [I][COLOR="Green"]For Ubuntu 12.x and 13.x:[/COLOR][/I]
    sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 \
     libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 lib32z-dev \
     libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc \
     readline-common libreadline6-dev libreadline6 bzip2 libbz2-dev libbz2-1.0 libncurses5-dev lib32readline5 \
     lib32readline-gplv2-dev lib32readline6 libreadline-dev libreadline6-dev:i386 libreadline6:i386 pngcrush \
     libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesd0-dev squashfs-tools schedtool libwxgtk2.8-dev python
    
    sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
    
    [I][COLOR="Green"]For Ubuntu 14.x and 15.x:[/COLOR][/I]
    sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools \
     build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils xsltproc lzop \
     libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev gcc-multilib
    2.4 Insatll android-sdk
    Download (for Linux 64-bit of course): http://developer.android.com/sdk/index.html
    Extract the file to a directory (eg. ~/android-sdk)
    Add the path to ~/.bashrc
    type command:
    Code:
    sudo gedit ~/.bashrc
    at the bottom add the path
    Code:
    export PATH=~/bin:~/android-sdk/tools:~/android-sdk/platform-tools:$PATH

    Quit and restart terminal to commit the changes.
    Verify the path and update the SDK
    type command:
    Code:
    android

    2.5 Install java
    If you have installed eclipse, openJAVA is ready. Some say it is not suitable for android development.
    I've tried both and I found no appearing difference.
    To install SUN JAVA (Ubuntu 13.04 or above)
    type command:
    Code:
    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java6-installer
    For Lollipop: openjdk 7 is required
    Code:
    sudo apt-get install openjdk-7-jdk

    2.6 Install repo
    type command:
    Code:
    mkdir -p ~/bin
    curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo

    2.7 Add usb dev rules
    Which are required for adb and fastboot, eg. View attachment 51-android.zip
    type command:
    Code:
    sudo cp 51-android.rules /etc/udev/rules.d
    sudo chmod 0644 /etc/udev/rules.d/51-android.rules
    2.8 Enable ccache
    type command:
    Code:
    sudo gedit ~/.bashrc
    add lines for CCACHE
    Code:
    export USE_CCACHE=1
    export CCACHE_DIR=~/android/.ccache
    Quit and launch the terminal again to commit the changes
    ccache will cache the object files of gcc for next build, it would increase the speed of subsequent builds alot.
    After source is sync in 2.11 and before build, we can set the size of ccache first.
    type command:
    Code:
    ~/android/rom/prebuilts/misc/linux-x86/ccache -M<size>

    2.9 Init the source
    Make a new working driectory for your rom
    type command: (eg. ~/android/rom)
    Code:
    mkdir -p ~/android/rom
    Each rom has its own manifest.xml listing all the required projects.
    It is usually in the project android (manifest for PA). The readme of this project would provide the command to init.
    eg. CM11.0: https://github.com/CyanogenMod/android/tree/cm-11.0
    type command:
    Code:
    repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0
    It will fetch the manifest.xml and put it into a hidden directory .repo in the current directory (~/android/rom/.repo)

    2.10 preparing local_manifest.xml
    It is not a good pratice to change the manifest.xml directly. If the ROM has change its manifest, you would require to init again. The right way is putting everything your device needed in a seperate file .repo/local_manifests/local_manifest.xml. The device trees and kernel source for GalaxyTab 7.7 and Plus : https://github.com/danielhk?tab=repositories
    eg. cm11.0 for p6800
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
      <project name="danielhk/android_hardware_atheros_wlan" path="hardware/atheros/wlan" />
      <project name="danielhk/android_device_samsung_p6800" path="device/samsung/p6800" />
      <project name="danielhk/android_device_samsung_smdk4210-tab" path="device/samsung/smdk4210-tab" />
      <project name="danielhk/android_kernel_samsung_smdk4210" path="kernel/samsung/smdk4210" />
      <project name="danielhk/proprietary_vendor_samsung_smdk4210" path="vendor/samsung" />
      <project name="CyanogenMod/android_hardware_samsung" path="hardware/samsung" />
    </manifest>
    Note: Settings will follow manifest.xml. cm-11.0's manifest has default remote="github" and revision="refs/heads/cm-11.0" so we can omit the same entries here. For other roms, see the defined names in manifest.xml and change accordingly. You can also add other devices trees here if you want to build them for the same rom.

    2.11 sync and build
    To fetch the source (specified in manifest.xml and local_manifest.xml) to working directory (~/android/rom)
    type command:
    Code:
    repo sync -j32
    -J specify the no. of threads to download. I have a few trials. Seems 32 works for me.
    When it is done. You will find that ~/android/rom is not empty now.

    You may set the ccache size now:
    type command: (eg. 50G)
    Code:
    ~/android/rom/prebuilts/misc/linux-x86/ccache -M50G
    Only if you want to change size, otherwise it only requires once.

    To build a rom, change to the rom directory. Usual commands: (eg. for CM roms)
    Code:
    cd ~/android/rom
    . build/envsetup.sh
    lunch cm_p6800-userdebug
    mka bacon
    CM need to download a prebuilt (Termianl.apk). To simplify this routines, I modified the build script from PA to cm View attachment rom-build.zip.
    Copy it to the rom directory, type command:
    Code:
    cd ~/android/rom
    ./rom-build.sh p6800
    After building is complete with no error, the rom will be output to ~/android/rom/out/target/product/p6800.

    3. What can we do? :laugh:
    3.1 Kernel
    Since Samsung provide the complete kernel source, working on kernel would be comparatively speaking much easier.
    When we say kernel, we mean the boot.img or zImage which already include the initramfs. This image will be flash to the /kernel (/dev/block/mmcblk0p5)
    Hardware and flags are defined in defconfig inside <kernel dir>/arch/arm/config. It is the Linux standard.
    3.1.1 difference between stock kernel and the kernel in custom rom
    The main difference between the two kernels is the location of kernel library modules. Libray modules are mainly for network and storage drivers. By building them as modules, they can be stoped and restarted in case of critical errors.
    Stock kernel put it in /lib which is part of the initramfs. We need to do extra steps to manually copy them to the initramfs after the first build and rebuild again. If you want to build the stock kernel, there is a very good tutorial.
    Custom rom put the kernel library modules in /system/lib. Thus boot.img need to match those modules, otherwise they will not work properly.
    For custom roms, which defconfig to be used is defined in device tree.
    eg. For p6800, in the file device/samsung/p6800/BoardConfig.mk. There is the line:
    Code:
    TARGET_KERNEL_CONFIG := cyanogenmod_p6800_defconfig
    It specify which defconfig file for the kernel
    I wrote a View attachment build-k.zip scirpt to simplify the building of kernel alone. Copy it to the rom working directory (~/android/rom)
    eg. For p6800, type command:
    Code:
    ./build-k p6800
    New boot.img will be output to the same directory as rom if no error.
    3.1.2 Add/modify O/C, U/V, GOVERNORS, hardware drivers, etc.
    As mentioned in 1.2, we can copy/modified the source from i9100 and n7000 kernels. For example, Dorimanx and Slyahkernel provide many useful code for us. The source of i9300 from Samsung may also provide some drivers update (eg. Mali)
    Ref: Exynos4210 cpu menu., Mirror download
    3.1.3 Default Orientation
    Why the incall screen always landscape?
    Many apks assume the default orientation is portrait but our tab's default orientation is landscape. It is a kernel behaviour so that recoveries (including the stock 3e recovery) are all in landscape.
    To avoid this odd behaviour of apks like inCall screen, changing the default orientation in kernel is the ultimate solution.
    It is already in my do list for a long time but trying to keep up with the android plaftform already occupy all my spare time...
    I already have some idea how to do. Anyone interested to help on this can PM me.
    Already fixed in the platform ;)
    3.1.4 Update the kernel source
    The existing kernel is base on Linux 3.0.x. It is outdated but I don't think Samsung would bother to update it. I had tried starting with the 3.4 source from Google but don't have enough time to carry on. I have filled some drivers already. Will take another shot later if I have time...
    Anyone have experience in Linux kernel are welcome to help. No more guides are there, this would be a great challenge but fun!

    3.2 device tree
    Every device requires a device tree which:
    a) Specify the hardware
    b) define some overrided library. (eg. sensor, camera)
    c) provide the extra files to be put in the initramfs. (init.<device>.rc, fstab.<device>, etc.)
    If there are a few models variants, common parts would be put in a seperate common device tree (eg. smdk4210-tab for our tab). In this way, changing can be made once for all variants.
    Most of the work on porting for a specific ROM would be on the device tree. Same as the kernel, we can get some update by modifying from other devices. CM's device tree for i9100, n7000 and i9300, etc. With a good device tree, we can port to any ROM.

    3.3 Bluetooth support after 4.2.
    In 4.2.2, I changed the source of framework, system_core, phone apk and device tree to work with bluez. It was a huge job! Hundreds of lines had been changed. Many files are replaced. It was quite clumsy but was the only way then. This way may not work for 4.3 onward.
    Here are the details of both stack:
    Bluedriod : http://source.android.com/devices/bluetooth.html
    Bluez : http://www.kandroid.org/online-pdk/guide/bluetooth.html
    3.3.1 We may modify the bluedroid to support our chip.
    3.3.2 Working on the bluez support. I'm trying now.
      Bluez5 is OK now. See my thread: How to port Bluez to Android 4.4 ;)

    3.4 Recoveries
    With the device tree and kernel, we can build the recovery from source. CWM would be a side product of CM roms and TWRP has a tutorial.
    The same View attachment build-k.zip script can be used to build recovery alone. In the rom working direcotry, to build recovery only
    type command:
    Code:
    ./build-k p6800 recovery
    With no error, recovery.img will be at the same output directory as rom.
    6
    daniel_hk, Check and commit to your tree my patches for PAC-4.2.2

    Thanks!
    It nice to see someone interested in our development!

    I have look into your changes briefly.
    1. Some changes in media which I'll leave the user to decide. I rather keep the builds as genuie as possible.
    2. Some of them are new commit of the original source which will automatically updated in a sync.
    3. I forgot to upload a few minor projects to github.

    One of which was android_build which will include the files like hciattach building from source. If you study the source of exteranl/bluetooth/bluez, they are there. That means it might have update later. No need to add as a blob.

    Actually the best way is including them in PROJECT_PACKAGES section of the device.mk. It would have the same result without touching the original source. Less touch to the original source means fewer conflict later. I was caught up and did't have time to tidy up everything so I leave it there. Also, files from bluetooth should be put in the smdk4210-tab device tree. All model share the same source.

    vendor_pac should be upload to official PAC's git. They already gave me an account but they use Google+ which I have trouble to login here. I was working on a job and I hadn't follow up. Now I'm working on 4.4 which PAC haven't release yet. So I put aside first.

    You probably didn't have to waste you time if you PM me first.

    Everytime I upload to github is a challenge, it always break before complete. I have to monitor it from time to time. Annoying! So I can only upload once a while when everything is ready...

    To be honest, I really don't have time to keep up with the old source. The new ports already occupy all my spare times. With limited resource, I can only focus on major issues. Bluetooth after 4.3 is my first priorty. If it can be done, means we can go much further.

    If you are interested, you may pick one of the thing I mentioned in this thread to start. Wifi-tethering or the vendor ril library is needed too. You may try it in 4.2.2 first. See what you are good at and interested to. PM me or post again if you have any questions and/or suggestion.

    Thanks again for your effort. ;)
    2
    Local manifest
    https://github.com/danielhk/local_manifest
    All model share the same local_manifest.xml
    1
    daniel_hk, Check and commit to your tree my patches for PAC-4.2.2
    1
    Thanks!
    It nice to see someone interested in our development!

    I have look into your changes briefly.
    1. Some changes in media which I'll leave the user to decide. I rather keep the builds as genuie as possible.
    2. Some of them are new commit of the original source which will automatically updated in a sync.
    3. I forgot to upload a few minor projects to github.

    One of which was android_build which will include the files like hciattach building from source. If you study the source of exteranl/bluetooth/bluez, they are there. That means it might have update later. No need to add as a blob.

    Actually the best way is including them in PROJECT_PACKAGES section of the device.mk. It would have the same result without touching the original source. Less touch to the original source means fewer conflict later. I was caught up and did't have time to tidy up everything so I leave it there. Also, files from bluetooth should be put in the smdk4210-tab device tree. All model share the same source.

    vendor_pac should be upload to official PAC's git. They already gave me an account but they use Google+ which I have trouble to login here. I was working on a job and I hadn't follow up. Now I'm working on 4.4 which PAC haven't release yet. So I put aside first.

    You probably didn't have to waste you time if you PM me first.

    Everytime I upload to github is a challenge, it always break before complete. I have to monitor it from time to time. Annoying! So I can only upload once a while when everything is ready...

    To be honest, I really don't have time to keep up with the old source. The new ports already occupy all my spare times. With limited resource, I can only focus on major issues. Bluetooth after 4.3 is my first priorty. If it can be done, means we can go much further.

    If you are interested, you may pick one of the thing I mentioned in this thread to start. Wifi-tethering or the vendor ril library is needed too. You may try it in 4.2.2 first. See what you are good at and interested to. PM me or post again if you have any questions and/or suggestion.

    Thanks again for your effort. ;)

    Thanks to you Daniel for your immense effort on detailing all this! I'm far from a dev status like you and @UpInTheAir. But my support will always go to you developers. Both of you has done an impressive work for an outdated hardware and keep us happy with your Rom and Kernel. Again, thanks a lot.