Galaxy S5 mini built kernel
TODO: this article needs cleanup
Original Kernel version 3.4.39-5886751
NB: I was trying to enable OTG support on the Galaxy S5 mini by setting some options and rebuilding the kernel from the sourcecode.
Device identification
Samsung Galaxy S5 mini Android version LMY47X (lollipop 5.1.1) PDA (Build): G800FXXU1BPC4, XX=europe CSC (sales code): G800FPHN1BPD1, you can check your ROM CSC by dialling *#1234#
Official firmware
- http://www.sammobile.com/firmwares/database/SM-G800F/
- G800FXXU1BPC4
- G800FPHN1BPD1
Add OTG support
Note: the provided boot.img is NOT WORKING, probably as it is based on kitkat (4.x)
based on: G800FXXU1ANG1
Samsung firmware sources
sourcecode for G800FXXU1BPC4? https://github.com/tobigun/samsung-kernel-smg800f/tree/usb-otg FILE: /arch/arm/configs/kminilte_00_defconfig CONFIG_MUIC_SM5502_SUPPORT_OTG=y CONFIG_MUIC_SM5502_SUPPORT_AUDIODOCK=y CONFIG_MUIC_SM5502_SUPPORT_DESKDOCK=y
Compile Kernel - doing the same for 5.1.1
Download source code: SM-G800F_EUR_LL_Opensource G800FXXU1BOL4 (lollipop 5.1.1)
Modify 5 lines, look for "SM5502": ${KERNLOC}/arch/arm/configs/* CONFIG_MUIC_SM5502_SUPPORT*=y
Need arm compiler (toolchain) using 4_9-2015q3:
Note: in README_Kernel.txt it said to use 4.8 but an 'asm' error and some googling made me try other versions.
On Ubuntu 14.04 we seem to need these: sudo apt-get -y install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32ncurses5
Compile
KERNLOC=/some/path/to/where/you/work KERNLOC=/media/wilbert/Data/data_nobackup/mobile_galaxy_s5_mini_g800f/BuildingKernel/Kernel
Take Kernel.zip from the sourcecode G800FXXU1BOL4 and extract to ${KERNLOC}
Extract compiler software to ${KERNLOC}/.. cd ${KERNLOC}/.. tar xjf gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
cd ${KERNLOC} export ARCH=arm export CROSS_COMPILE=../gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi- make clean make xyref5260_evt0_defconfig make zImage
Note: in README_Kernel.txt it said to use "make -j64" but it does not show any errors in the output so I used "make zImage".
Tried to solve these ERRORS:
- function __show_regs, process.c, invalid asm: operand number out of range
- switched to 4_9-2015q3 compiler
- function sys_mount, namespace.c, kernel_dev may be used uninitialized
- add "-Wno-maybe-uninitialized" to KBUILD_CFLAGS in Makefile
- function show_target_loads, cpufreq_interactive.c, operation on ret may be undefined
- add "-Wno-sequence-point" to KBUILD_CFLAGS in Makefile (should not be ignored but I was not about to rewrite the sourcecode)
Success (after the passing of time and lines of text):
... OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready
Create boot.img using new zImage
Using Android Image Kitchen tools:
Find and download the original firmware:
Read/unpack the original firmware with kitchen:
- extract the kitchen to a folder, for example ${KERNLOC}/..
- extract .tar.md5 from your firmware zip
- place .tar.md5 in the "kitchen/original_update" folder
- rename .tar.md5 to .tar, otherwise the kitchen won't recognize. No need to remove the md5 within the file
- run the kitchen with ./menu, pick option 1, read and pick defaults
- you now have a working directory such as "WORKING_nnddyy_hhmmss"
- go to ADVANCED OPTIONS and pick 12, write boot.img (w) contents to a new folder "BOOT-EXTRACTED"
- you can now change files there, replace zImage in "BOOT-EXTRACTED" with the compiled one arch/arm/boot/zImage
- built a new boot.img (b) from the contents of "BOOT-EXTRACTED", the resulting boot.img will replace the original boot.img in de working folder "WORKING_nnddyy_hhmmss"
Flashing boot.img (to replace the kernel)
- Linux flashing with heimdall (can use this in stead of windows Odin)
- http://glassechidna.com.au/heimdall/
sudo add-apt-repository ppa:modycz/heimdall sudo apt-get update sudo apt-get install heimdall
- disconnect USB cable
- boot device in download mode: hold home, volume DOWN & power
- connect USB with a original cable
- sudo heimdall flash --BOOT boot.img --no-reboot
- to power off the device, hold hold home, volume DOWN & power for some time
- you will see a text telling the kernel is 'not seandroid enforcing'
Flashing TWRP recovery
- disconnect USB cable
- boot device in download mode: hold home, volume DOWN & power
- connect USB with a original cable
- sudo heimdall flash --RECOVERY recovery.img --no-reboot
- to power off the device, hold hold home, volume DOWN & power for some time
Boot into recovery:
- power off the device, then hold hold home, volume UP & power for some time
- Note: if you do not boot into recovery immediately it might be disabled
Restore original recovery to get rid of the message 'not seandroid enforcing'
- can be extracted from the stock ROM
CWM 13 for G800F
Extract/create boot.img.tar.md5
Some tools allow an md5 check appended to a tar archive (like Odin).
extract boot.img
tar -xf boot.tar.md5
re-create
tar -c -H ustar boot.img > boot.tar cp boot.tar boot.tar.md5.tmp md5sum -t boot.tar >> boot.tar.md5.tmp mv boot.tar.md5.tmp boot.tar.md5
other stuff
TODO
Rooting G800FXXU1BPC4
- Reboot your device into Odin mode: turn off your device, then press Volume-Down + Home + Power button at the same time and release them. Confirm the following message with the Volume-Up button.
- Connect your device to your PC via USB
- Make sure the device driver's are installed on your PC
- Start Odin
- Select PDA and select the kernel image (boot.tar.md5)
- Check that only "Auto Reboot" and "F. Reset Time" is set
- Click on "Start": the kernel image should be flashed now and the device should reboot afterwards
Full nandroid-backup using custom recovery
http://techbeasts.com/install-twrp-recovery-samsung-galaxy-s5-mini-g800f/ http://cwm-twrp-androids.com/download/samsung-galaxy-s5-mini-duos.html
http://teamw.in/project/twrp2/
dd Install Method (Requires Root):
Download the latest image file (.img) from the download link above. Place it in the root of your /sdcard folder and rename it to twrp.img. Run the following commands via adb shell or a terminal emulator app:
su
dd if=/sdcard/twrp.img of=/dev/block/platform/13540000.dwmmc0/by-name/RECOVERY
Unrooting?
You can perform a clean unroot after you root, and Chainfire's 'Triangle Away' app might be of some help here
Does it reset KNOX void counter?