[Galaxy S II General] TECK:
Update: I upgraded my phone with XXKI3 2.3.5 firmware, from XXKH3.

The lag is gone, definitely a big improvement compared to XXKH3 version. The phone is very responsive and fast. Quadrant shows 4200+, pretty impressive:

The bootloader was updated, you cannot reset anymore your phone with a download jig. However, Intratech uploaded the old bootloader:

Personally, I flashed the file with Odin (PDA).

The phone ring is set to silent, instead of default "Over the horizon" ringtone. Make sure you change it, your phone is not broken. See the complete list of changes, related to previous ROM.

Guide

I'm posting this procedure in a separate thread, as is easier to be linked into different forum posts. My Bell Canada phone came originally with the UGKG2 firmware, so everything listed below is based on my own experience with this version, I do not know or confirm it will work with other firmware. I currently run the official (?) XXKI3 Gingerbread 2.3.5 firmware, downloaded from samfirmware.com site (see details below). This is a wipe device release.

Personally, I read that other people flashed their phones with a different firmware... but I did not wanted to do it on my phone. I sticked with the same family XXKGx, just to be safe. Please read Electroz's explanation below.

There are 3 types of release builds: leaked, Frankenstein (compiled and tested by devs, based on demand) and official (Kies updates).

The procedure is simple (I presume you are familiar with Odin, Download Mode &Co.):

1) Get yourself the stock firmware and kernel (thank you Intratech)

2) Setup your drivers properly, avoid the Kies insanity (see below)

3) Flash the new firmware (my flash procedure, you can/should skip Re-Partition/PIT as Intratech explained)

4) Flash phone with CF-Root (I used the CF-Root-SGS2_XX_OXA_KI3-v4.1-CWM4.zip file)

5) Wipe (cache + factory reset)

6) Uninstall all Samsung crap and install additional system apps (i.e. Car Home)

7) Flash back the stock KI3 kernel (thank you Intratech, password: intratech@XDA)

8) Wipe (cache + factory reset)

9) Connect your device to a download jig, to reset the flash counter (old bootloader needed)

Phone & Modem Drivers Setup

Note: This procedure was tested with Windows 7 Ultimate 64bits. If you already installed Kies, uninstall all related software/drivers and clean your registry. Or do a clean Windows install just to be safe.

1) With your anti-virus off, put your phone in Download mode and connect the USB cable. Windows Update will start to download right away the modem and USB drivers. Make sure you select the Windows Update option, when asked into driver install window.

2) Once the modem drivers installed, disconnect the cable, reboot the phone in normal mode and reconnect the cable again. A new set of drivers will be installed for the rest of USB interface.

Important: You need do it in the SPECIFIC order mentioned above, or else the modem drivers will not be installed and you will not be able to use properly Odin. I know this because I tried the other way around.

Initial Phone Setup

Once the phone rebooted, you will be welcomed to the Android Setup.

1) First, set the language from English UK to whatever you like.

A Network warning related to Date and Time will pop, tap on Cancel.

2) Tap the Android robot and setup your phone.

There is NO need to change any other settings, the phone will automatically detect the Bell network.

If for some reason it does not, once you completed your basic setup go to:

Settings > Wireless and Network > Mobile networks > Network operators

It will start the scanning and pop 3 Bell networks, pick the first one. Again, this is in case your phone does not work with calls, voicemail or SMS.

Notes

You should uninstall the CWM app once you flashed back the stock kernel, is half useless. I tested the new Superuser app from Android Market, it will properly upgrade to latest version and also upgrade the su binary on XXKI3 firmware. If you plan to poke around your phone with the Terminal, you will lose all the fancy Linux commands. (grep etc.)

Personally, I purchased ChainsDD's Superuser Elite key. It will allow you to pin protect your rooted device, among other useful things that are planned to be added (built-in terminal). I upgraded Superuser to version 3 and everything works properly.

Battery Power Savings

I always leave my phone with all default options, including screen auto-adjust. The only options I turn off are:

Settings > About phone > Software update > Auto update Disabled

Settings > Applications > Samsung Apps > Off

Personally, I have no idea who started the battery calibration myth in S2. It is useless to "overcharge" the battery, as the software has a check to stop automatically the charge once the battery is 100% while the battery itself has a build-in controller that can't be wiped.

Example of battery stats with the phone in idle mode for approx. 18hrs (86%) and 109hrs (2%):

Running Services

I use Wifi N with a Cisco E4200 DD-WRT (phone at 20"), these are my running services:

PID USER VSZ STAT COMMAND
1 root 508 S /init
2 root 0 SW [kthreadd]
3 root 0 SW [ksoftirqd/0]
4 root 0 SW [migration/0]
5 root 0 SW [watchdog/0]
9 root 0 SW [events/0]
11 root 0 SW [khelper]
15 root 0 SW [async/mgr]
16 root 0 SW [pm]
19 root 0 SW [suspend]
20 root 0 SW [sync_system_wor]
151 root 0 SW [s5p-tmu]
337 root 0 SW [sync_supers]
339 root 0 SW [bdi-default]
341 root 0 SW [kblockd/0]
356 root 0 SW [khubd]
359 root 0 SW [kseriod]
394 root 0 SW [irq/331-max8997]
434 root 0 SW [kmmcd]
527 root 0 SW [kondemand/0]
540 root 0 SW [pet_watchdog/0]
549 root 0 SW [khungtaskd]
550 root 0 SW [kswapd0]
599 root 0 SW [aio/0]
612 root 0 SW [crypto/0]
1237 root 0 SW [sec_jack_wq]
1240 root 0 SW [irq/350-sec_hea]
1245 root 0 SW [spi_gpio.3]
1262 root 0 SW [svnet_txq]
1274 root 0 SW [file-storage]
1300 root 0 SW [irq/328-mxt224_]
1306 root 0 SW [irq/325-k3g]
1312 root 0 SW [irq/326-proximi]
1315 root 0 SW [cm3663_light_wq]
1316 root 0 SW [cm3663_prox_wq]
1366 root 0 SW [mali_dvfs]
1369 root 0 SW [mali-pmm-wq]
1378 root 0 SW [sii9234_wq]
1379 root 0 SW [irq/481-mhl_int]
1380 root 0 SW [irq/496-mhl_wak]
1383 root 0 SW [irq/343-max1704]
1394 root 0 SW [kstriped]
1396 root 0 SW [kmpathd/0]
1398 root 0 SW [kmpath_handlerd]
1399 root 0 SW [ksnapd]
1400 root 0 SW [kconservative/0]
1414 root 0 SW [ktflash_requlat]
1429 root 0 SW [usbhid_resumer]
1432 root 0 SW [binder]
1441 root 0 SW [irq/333-IPC_HOS]
1452 root 0 SW [mmcqd]
1481 root 0 SW [l2cap]
1482 root 0 SW< [krfcommd]
1488 root 0 SW [dynamic hotplug]
1501 root 0 SW [melfas_touchkey]
1506 root 0 SW [fimc0_iqr_wq_na]
1509 root 0 SW [fimc1_iqr_wq_na]
1512 root 0 SW [fimc2_iqr_wq_na]
1515 root 0 SW [fimc3_iqr_wq_na]
1518 root 0 SW [hdcp work]
1529 root 0 SW [tvout resume wo]
1535 root 0 SW [sec-battery]
1538 root 384 S /sbin/ueventd
1761 root 0 SW [Si4709_wq]
1782 root 0 SW [jbd2/mmcblk0p9-]
1784 root 0 SW [ext4-dio-unwrit]
2563 root 0 SW [jbd2/mmcblk0p7-]
2564 root 0 SW [ext4-dio-unwrit]
2566 root 0 SW [jbd2/mmcblk0p1-]
2567 root 0 SW [ext4-dio-unwrit]
2570 root 0 SW [jbd2/mmcblk0p10]
2571 root 0 SW [ext4-dio-unwrit]
2579 system 868 S /system/bin/servicemanager
2580 root 6616 S /system/bin/vold
2581 system 1972 S /system/bin/notified_event
2583 root 732 S /system/bin/debuggerd
2584 radio 9512 S /system/bin/rild
2585 system 4624 S /system/bin/npsmobex
2586 system 8476 S /system/bin/drexe
2590 bluetoot 1372 S /system/bin/dbus-daemon --system --nofork
2591 root 932 S /system/bin/installd
2592 keystore 1804 S /system/bin/keystore /data/misc/keystore
2594 system 14192 S /system/bin/tvoutserver
2595 shell 800 S /system/bin/sh /system/bin/rtc_log.sh
2612 shell 780 S /system/bin/immvibed
2907 wifi 2644 S /system/bin/wpa_supplicant -Dwext -ieth0 -c/data/wifi/bcm_su
3374 media 56536 S < /system/bin/mediaserver
3375 root 15472 S /system/bin/netd
3376 root 126m S zygote /bin/app_process -Xzygote /system/bin --zygote --star
3391 system 276m S system_server
3496 root 0 SW [iscan_sysioc]
3497 root 0 SW [dhd_watchdog]
3498 root 0 SW [dhd_dpc]
3499 root 0 SW [dhd_sysioc]
3502 system 152m S com.android.systemui
3511 app_99 168m S com.sec.android.inputmethod.axt9
3521 radio 155m S com.android.phone
3522 app_66 148m S android.process.media
3528 app_53 134m S com.sec.pcw.device
3532 system 134m S com.samsung.bt.avrcp
3536 bluetoot 134m S com.broadcom.bt.app.system
3544 app_12 176m S com.sec.android.app.twlauncher
3604 app_54 173m S com.google.process.gapps
3631 app_12 148m S android.process.acore
3688 app_84 135m S com.sec.android.app.FileTransferManager
3777 app_36 137m S com.sec.android.widgetapp.weatherclock
3927 app_38 136m S com.sec.android.widgetapp.apnews
4193 app_91 137m S com.sec.android.app.clockpackage
4220 app_16 137m S com.android.providers.calendar
4234 app_100 134m S com.sec.android.daemonapp.accuweather
4255 app_78 159m S com.google.android.gm
4333 app_81 174m S com.cooliris.media
4366 app_119 144m S com.google.android.apps.reader
4376 app_103 170m S com.levelup.beautifulwidgets
4435 app_37 138m S com.sec.android.widgetapp.stockclock
4453 app_16 138m S com.android.calendar
4476 system 156m S com.android.settings
4486 app_112 177m S com.google.android.music
4633 app_82 137m S com.sec.android.app.fm
4752 app_40 135m S com.sec.android.app.samsungapps.una
6623 app_68 185m S < com.google.android.apps.maps
9014 dhcp 916 S /system/bin/dhcpcd -ABK eth0
10732 graphics 139m S com.sec.android.app.screencapture
11958 system 138m S com.wssyncmldm
11989 system 135m S com.sec.android.providers.drm
11997 app_1 139m S com.smlds
12037 app_102 139m S com.skype.raider
13094 app_5 141m S jackpal.androidterm
13136 app_115 135m S com.noshufou.android.su
13170 app_68 149m S com.google.android.apps.maps:NetworkLocationService
13180 app_68 144m S com.google.android.apps.maps:FriendService
13503 app_83 141m S com.sec.android.app.FileTransferServer
13579 root 0 SW [flush-179:0]
13646 shell 1684 S /sbin/ext/busybox sh /sbin/sleep 3600
13651 shell 1676 S /sbin/ext/busybox /sbin/sleep 3600
13707 app_68 154m S com.google.android.apps.maps:HotpotService
13788 system 135m S com.android.MtpApplication
13825 app_5 796 S /system/bin/sh -
13858 root 796 S sh -
13966 root 1684 S /sbin/ext/busybox sh /sbin/ps
13971 root 1716 R /sbin/ext/busybox /sbin/ps

CSC (Cell Site Controller)

The default CSC setting in XXKI3 is KOR. You can check it with: *#272*{IMEI}#

where the {IMEI} value represents the 15 digits of your IMEI (International Mobile Equipment Identity).

I personally used the default option (KOR) and the phone works perfect, with great reception:

There are some people who wonder if they should change the CSC. I will quote Intratech on this matter as he answered perfectly to my question:

Fast Dormancy

Some people noticed that their network idle on 3G, instead of HSPA+. That is absolutely normal, because of the "fast dormancy" feature. If enabled, HSPA+ will rapidly disconnect from the network once the information is sent or received. That will penalize the actual network you are on, unless the carrier network and your phone talk to each other in a way that takes battery life as well as network congestion into consideration. For this to work, both networks and smartphones have to implement a standardized version of the fast dormancy feature. Bell Canada supports this feature and by default Fast Dormancy is enabled into XXKI3 firmware.

You can check it with: *#9900#

You should call your carrier to see if they have it implemented. Probably your tech support will look like you are speaking Chinese and escalate it to a more knowledgeable guy. This is the average download speed I get on XXKI3 (network is switching automatically on HSPA+):

There are some reports where people confirmed that the UGKG2 build allowed you to reach faster download speeds (up to 9MB). Personally I think 6MB over a cell network is already more than perfect for tethering, not to mention that there are many factors to be taken into consideration when you deal with a wireless transmission. (location, tower antenna, weather, etc.)

Random Restart

The screen needs minimum 500Mhz to get out of Sleep Mode. Some custom ROM's use a low voltage or "underclock" feature that reduces the power consumption but also the number of CPU steps. That is what makes your phone crash and reboot randomly. If you use an external sdcard, do a sd wipe just to be safe. It should take several hours, so do it over the night. Personally, I did not experienced any random reboots using neither the XXKH3 or XXKI3 firmware.

Some people might have bad battery contacts on their S2. Basically, the phone shuts down while in your pocket. Clean the battery terminals with some audio head tape cleaner and cotton swabs, than make sure the contacts are proper.

You could also have a RAM (hardware) issue. Bad memory degrades fast so you will see your random reboots pop at a faster frequency. If you did all the above and still experience random reboots, run adb logcat to see what is going on at that specific moment. If you get error codes like:

code 1 (SEGV_MAPERR), fault addr 00000000

you are dealing with bad memory unfortunately and need to service your phone.

Manage system apps with Terminal

Personally, I decided to stick with a terminal for now, I feel more comfortable to see what is going on with my own eyes in my phone. A good alternative to Terminal would be the SystemApp Remover, is faster and more robust compared to Titanium Backup as it does only one task (backup/remove system apps).

I did an output list of all the packages:

$ pm list packages -f >> /sdcard/packages 2>&1

so I know now where each package is located and what is the associated name.

All I have to do is run:

$ su
# rm -f /system/app/package.{apk,odex}
# pm clear PACKAGE
# pm uninstall PACKAGE

Running "mount | grep system" tells me right away where and how /system is mounted:

/dev/block/mmcblk0p9 on /system type ext4 (ro,relatime,barrier=1,data=ordered)

so all I have to do is change the mount perms to write, instead of read:

# mount -o remount,rw /dev/block/mmcblk0p9 /system

Package Manager commands:

# pm
usage: pm [list|path|install|uninstall]
pm list packages [-f] [-d] [-e] [-u] [FILTER]
pm list permission-groups
pm list permissions [-g] [-f] [-d] [-u] [GROUP]
pm list instrumentation [-f] [TARGET-PACKAGE]
pm list features
pm list libraries
pm path PACKAGE
pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
pm uninstall [-k] PACKAGE
pm clear PACKAGE
pm enable PACKAGE_OR_COMPONENT
pm disable PACKAGE_OR_COMPONENT
pm setInstallLocation [0/auto] [1/internal] [2/external]

The list packages command prints all packages, optionally only
those whose package name contains the text in FILTER. Options:
-f: see their associated file.
-d: filter to include disbled packages.
-e: filter to include enabled packages.
-u: also include uninstalled packages.

The list permission-groups command prints all known
permission groups.

The list permissions command prints all known
permissions, optionally only those in GROUP. Options:
-g: organize by group.
-f: print all information.
-s: short summary.
-d: only list dangerous permissions.
-u: list only the permissions users will see.

The list instrumentation command prints all instrumentations,
or only those that target a specified package. Options:
-f: see their associated file.

The list features command prints all features of the system.

The path command prints the path to the .apk of a package.

The install command installs a package to the system. Options:
-l: install the package with FORWARD_LOCK.
-r: reinstall an exisiting app, keeping its data.
-t: allow test .apks to be installed.
-i: specify the installer package name.
-s: install package on sdcard.
-f: install package on internal flash.

The uninstall command removes a package from the system. Options:
-k: keep the data and cache directories around.
after the package removal.

The clear command deletes all data associated with a package.

The enable and disable commands change the enabled state of
a given package or component (written as "package/class").

The getInstallLocation command gets the current install location
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media

The setInstallLocation command changes the default install location
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media

Removed System Apps

This is the list of /system apps I removed from XXKI3 firmware:

BuddiesNow.apk

Days.apk

DigitalClock.apk (I use Beautiful Widgets instead)

Email.apk (I use Gmail only)

EmailWidget.apk

GameHub.apk

GenieWidget.apk

install_flash_player.apk

Kies.apk

KiesAir.apk

kieswifi.apk

Kobo.apk

MiniDiary.apk

MusicHub_U1.apk

MusicPlayer.apk (I use Google Music instead)

PolarisOffice.apk

PressReader.apk

ReadersHub.apk

SamsungApps.apk

SamsungAppsUNA3.apk

SamsungIM.apk

SecretWallpaper1.apk

SecretWallpaper2.apk

SevenEngine.apk

ShareApp.apk

SnsAccountFb.apk

SnsAccountLi.apk

SnsAccountMy.apk

SnsAccountTw.apk

SnsDisclaimer.apk

SnsImageCache.apk

SnsProvider.apk

SocialHub.apk

VoiceToGo.apk (I use Car Home instead)

Zinio.apk

Apps ported to Galaxy S2

Some of my favorite apps, not available into Market and ported to Galaxy S2:

Google Car Home

Market Access

Google+ 2.0 (works with a Google Apps account)

Terms

ROM - software stored into read-only memory. ROM retains its contents even when the phone is turned off. ROM is referred to as being nonvolatile, whereas RAM is volatile.

Kernel - portion of the OS that handles drivers, hardware control and access for the rest of the OS.

Modem - handles the communication with your carrier.

Root - superuser privileges in any Linux OS.