Das Smartphone „Samsung Galaxy S5 (SM-G900F)
“ lässt sich folgendermaßen auf LineageOS umstellen:
Wichtige Links hierzu:
Ist das Smartphone noch nicht mit Administrationsrechten ausgestattet („rooted“), gibt es die Möglichkeit das TWRP über Odin zu installieren. Unter Linux wird dafür das Programm Heimdall verwendet, welches auf ähnliche Weise arbeitet.
Damit das Gerät erkannt wird, muss dieses in den sogenannten „Download-Modus“ gebracht werden:
Jetzt kann das TWRP heruntergeladen werden, passend zum Gerät: twrp-3.2.1-0-klte.img. Dieses wird dann später über Heimdall auf das Gerät gebracht und installiert.
Weiterhin benötigt Heimdall eine sogenannte PIT-Datei (PIT: Partition Information Table), die hier in dem Fall vom Gerät selbst heruntergeladen wurde. Dafür kann das grafische Front-End oder das Konsolenprogramm verwendet werden:
~# heimdall download-pit --output samsung-galaxy-alpha-sm-g900f.pit Heimdall v1.4.2 ... Downloading device's PIT file... WARNING: Empty bulk transfer after receiving packet failed. Continuing anyway... PIT file download successful. Ending session... Rebooting device... Releasing device interface...
Jetzt kann das TWRP auf das Gerät installiert werden. Die grafische Methode sieht wie folgt aus:
Utilities
“ auf „Detect
“ drücken, damit das Gerät erkannt wirdOutput
“: „Device detected
“Flash
“ bei „PIT
“ über „Browse
“ die eben erstellte PIT-Datei ladenPartitions (Files)
“ auf „Add
“ klicken und links bei „Partition Name
“ den Punkt „RECOVERY
“ auswählenFile (recovery.img)
“ die heruntergeladene TWRP-Abbild ladenNo Reboot
“ gesetzt werden, damit das Telefon nicht automatisch neu startetStart
“ (unten rechts) durchgeführtFlash completed successfully!
“ angezeigt und das Telefon startet neu
Die Installation kann ebenfalls per Konsole durchgeführt werden:
~# heimdall flash --RECOVERY twrp-3.2.1-0-klte.img
Nach der erfolgreichen Installation ist es ganz wichtig, dass das Telefon sofort in das Recovery-Abbild bootet, sonst erfolgt ein Überschreiben des Abbildes. So kann das Telefon per Tastendruck in den Recovery-Modus gebracht werden:
Dieser Schritt ist für die Installation eines LineageOS-Abbildes nicht unbedingt notwendig. Soll das Gerät trotzdem ge-„rooted
“ werden, kann das mit dem Programm „Magisk“ durchgeführt werden. Die aktuelle Version findet sich auf der Webseite gleich im ersten Link. Die ZIP-Datei wird auf das Gerät übertragen (oder über das Telefon direkt heruntergeladen) und im Wurzelverzeichnis des internen Speichers abgelegt.
Jetzt muss das Gerät in den Recovery-Modus gebracht werden:
Im TWRP kann dann unter „Install
“ die heruntergeladene ZIP-Datei ausgewählt werden und mit „Swipe to Confirm Flash
“ die Installation gestartet werden. Nach erfolgreicher Installation kann das Gerät neu gestartet werden.
Das Abbild von LineageOS kann hier heruntergeladen werden. Die aktuelle Version ist lineage-14.1-20180427-nightly-klte-signed.zip.
Die heruntergeladene ZIP-Datei muss auf das Telefon gebracht werden, wieder ins Wurzelverzeichnis des internen Speichers. Soll dies im Recovery-Modus geschehen, kann dafür „adb
“ verwendet werden:
~# adb push lineage-14.1-20180427-nightly-klte-signed.zip /sdcard/ [100%] /sdcard/lineage-14.1-20180427-nightly-klte-signed.zip
Wurde der Recovery-Modus bereits wieder beendet, muss es erneut in diesen Modus gebracht werden:
Dort werden dann folgende Schritte durchgeführt:
Löschen
“ und den Schalter unten nach rechts schieben um die Werkseinstellungen herzustellenZurück
“ und über die Rücktaste (Pfeil nach links) um wieder auf den Hauptbildschirm zu gelangenInstallieren
“ gehen und das heruntergeladene Abbild („lineage-14.1-20180427-nightly-klte-signed.zip
“) auswählenSystem neustarten
“ neu gestartet werden
Sollte der Fall auftreten, dass es notwendig wird, die originale Software (das sogenannte Stock-ROM) wieder auf das Telefon zu bringen, ist dies ebenfalls über Heimdall möglich. Dafür muss das Stock-ROM zuerst heruntergeladen werden. Es gibt dafür im Internet mehrere, teils nicht so vertrauenswürdige, Quellen. Nachfolgend wurde das ROM von samsung-firmware.org heruntergeladen: DBT-G900FXXS1CQD4-20170505133038.zip. Das ZIP-Archiv wird nach dem Download entpackt:
~# unzip DBT-G900FXXS1CQD4-20170505133038.zip Archive: DBT-G900FXXS1CQD4-20170505133038.zip inflating: G900FXXS1CQD4_G900FDBT1CQA1_G900FXXU1CQA3_HOME.tar.md5
Das entpackte TAR-Archiv muss ebenfalls entpackt werden:
~# tar xvf G900FXXS1CQD4_G900FDBT1CQA1_G900FXXU1CQA3_HOME.tar.md5 aboot.mbn NON-HLOS.bin rpm.mbn sbl1.mbn tz.mbn boot.img recovery.img system.img.ext4 modem.bin cache.img.ext4 hidden.img.ext4
Das Telefon muss dann wieder in den Download-Modus gebracht werden:
Damit die einzelnen Abbilder den richtigen Partitionen im Telefon zugewiesen werden können, kann die Partionstabelle angezeigt werden:
~# heimdall print-pit Heimdall v1.4.2 ... Session begun. Downloading device's PIT file... PIT file download successful. Entry Count: 30 Unknown 1: 1598902083 Unknown 2: 844251476 Unknown 3: 21325 Unknown 4: 14413 Unknown 5: 14137 Unknown 6: 52 Unknown 7: 0 Unknown 8: 0 ... --- Entry #29 --- Binary Type: 0 (AP) Device Type: 2 (MMC) Identifier: 73 Attributes: 5 (Read/Write) Update Attributes: 1 (FOTA) Partition Block Size/Offset: 30777311 Partition Block Count: 33 File Offset (Obsolete): 0 File Size (Obsolete): 0 Partition Name: SGPT Flash Filename: sgpt.img FOTA Filename: Ending session... Releasing device interface...
Daraus ergeben sich für das Gerät folgende wichtigen Einträge:
APNHLOS
NON-HLOS.bin
MODEM
modem.bin
SBL1
sbl1.mbn
ABOOT
aboot.mbn
RPM
rpm.mbn
TZ
tz.mbn
BOOT
boot.img
RECOVERY
recovery.img
SYSTEM
system.img.ext4
CACHE
cache.img.ext4
HIDDEN
hidden.img.ext4
Bevor das Installieren der Abbilder beginnt, wird geprüft, ob das Telefon von Heimdall korrekt erkannt wird:
~# heimdall detect Device detected
Jetzt kann mittels des Programms „heimdall
“ das Gerät mit den entpackten Dateien beschrieben werden. Die Kommandozeile ergibt sich aus den eben ermittelten Einträgen:
~# heimdall flash --APNHLOS NON-HLOS.bin --MODEM modem.bin --SBL1 sbl1.mbn --ABOOT aboot.mbn \ --RPM rpm.mbn --TZ tz.mbn --BOOT boot.img --RECOVERY recovery.img --SYSTEM system.img.ext4 --CACHE cache.img.ext4 \ --HIDDEN hidden.img.ext4
Das Telefon startet nach der Installation automatisch neu.
Nachfolgend soll das Erstellen eines selbstgebauten Android-Abbildes (Custom ROM) für das Smartphone „Samsung Galaxy S5 (SM-G900F)“ beschrieben werden. Dafür wird das GIT-Repository der Seite https://github.com/LineageOS/android.git mit dem Branch „cm-14.1
“ genutzt.
Der interne Codename des Gerätes muss ermittelt werden, was auf der LineageOS-Seite herausgefunden werden kann. Das oben genannte Gerät hat den Codenamen „klte
“.
Zur weiteren Vorbereitung gehört das Erstellen der Vezeichnisstruktur und die Synchronisation des Repository, wie hier beschrieben.
Im nächsten Schritt erfolgt das Einlesen der Bauumgebung:
~$ cd ~/AndroidCustomROM/cm-14.1 ~$ source build/envsetup.sh including device/generic/mini-emulator-arm64/vendorsetup.sh including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh including device/generic/mini-emulator-x86/vendorsetup.sh including device/generic/mini-emulator-x86_64/vendorsetup.sh including vendor/cm/vendorsetup.sh including sdk/bash_completion/adb.bash including vendor/cm/bash_completion/git.bash including vendor/cm/bash_completion/repo.bash
Jetzt kann der gerätespezifische Quellcode heruntergeladen werden:
~$ breakfast klte including vendor/cm/vendorsetup.sh build/core/product_config.mk:249: *** Can not locate config makefile for product "lineage_klte". Stop. build/core/product_config.mk:249: *** Can not locate config makefile for product "cm_klte". Stop. build/core/product_config.mk:249: *** Can not locate config makefile for product "lineage_klte". Stop. Device klte not found. Attempting to retrieve device repository from LineageOS Github (http://github.com/LineageOS). Found repository: android_device_samsung_klte Default revision: cm-14.1 Checking branch info ... HOST_CROSS_2ND_ARCH=x86_64 HOST_BUILD_TYPE=release BUILD_ID=NJH47F OUT_DIR=~/AndroidCustomROM/cm-14.1/system/out ============================================
Es wird ein LineageOS-Abbild für das Gerät benötigt, welches zum Beispiel von der Seite https://download.lineageos.org/klte heruntergeladen werden kann:
~$ wget https://mirrorbits.lineageos.org/full/klte/20180427/lineage-14.1-20180427-nightly-klte-signed.zip
Die notwendige Verzeichnisstruktur erstellen:
~$ mkdir ~/AndroidCustomROM/system_dump ~$ cd ~/AndroidCustomROM/system_dump
Die benötigten Dateien extrahieren:
~$ unzip lineage-14.1-20180427-nightly-klte-signed.zip system.transfer.list system.new.dat
Jetzt kann das System-Image umgewandelt werden:
~$ python ~/AndroidCustomROM/bin/sdat2img.py system.transfer.list system.new.dat system.img
Dann ein Verzeichnis anlegen und einhängen:
~$ mkdir system/ ~$ sudo mount system.img system/
Jetzt wieder zur Wurzel zurückspringen und die Dateien entpacken:
~$ cd ../cm-14.1/device/samsung/klte ~$ ./extract-files.sh ~/AndroidCustomROM/system_dump/
Das eingehängte Image kann wieder ausgehängt und das erstellte Verzeichnis entfernt werden:
~$ sudo umount ~/AndroidCustomROM/system_dump/system ~$ rm -rf ~/AndroidCustomROM/system_dump
Jetzt kann das Image bebaut werden:
~# croot ~# brunch klte including vendor/cm/vendorsetup.sh Looking for dependencies in device/samsung/klte Looking for dependencies in device/samsung/klte-common Looking for dependencies in device/samsung/msm8974-common Looking for dependencies in device/qcom/common Dependencies file not found, bailing out. Looking for dependencies in device/samsung/qcom-common ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=7.1.2 LINEAGE_VERSION=14.1-20180227-UNOFFICIAL-klte ... using prebuilt boot.img from BOOTABLE_IMAGES... boot size (8925200) is 65.47% of limit (13631488) running: openssl pkcs8 -in build/target/product/security/testkey.pk8 -inform DER -nocrypt running: java -Xmx2048m -Djava.library.path=~/AndroidCustomROM/cm-14.1/system/out/host/linux-x86/lib64 -jar \ ~/AndroidCustomROM/cm-14.1/system/out/host/linux-x86/framework/signapk.jar -w build/target/product/security/testkey.x509.pem \ build/target/product/security/testkey.pk8 /tmp/tmpXmmEKi \ ~/AndroidCustomROM/cm-14.1/system/out/target/product/klte/lineage_klte-ota-6153c7d683.zip done. [100% 34558/34558] build bacon Package Complete: ~/AndroidCustomROM/cm-14.1/system/out/target/product/klte/lineage-14.1-20180227-UNOFFICIAL-klte.zip make: Leaving directory '~/AndroidCustomROM/cm-14.1/system' #### make completed successfully (47:46 (mm:ss)) ####
Verlief das Bauen erfolgreich, befinden sich im Verzeichnis „out/target/product/klte/
“ (entspricht der Variablen „$OUT
“) unter anderem die zwei wichtigen Dateien:
recovery.img
“: Das LineageOS-Recovery-Imagelineage-14.1-20180227-UNOFFICIAL-klte.zip
“: Das LineageOS-Installationsimage
Nachfolgend soll das Erstellen eines selbstgebauten Android-Abbildes (Custom ROM) für das Smartphone „Samsung Galaxy S5 (SM-G900F)“ beschrieben werden. Dafür wird das GIT-Repository der Seite https://github.com/ResurrectionRemix/platform_manifest.git mit dem Branch „nougat
“ verwendet. Der ResurrectionRemix ist eine Alternative zu LineageOS.
Zur weiteren Vorbereitung gehört das Erstellen der Vezeichnisstruktur und die Synchronisation des Repository, wie hier beschrieben.
Als Arbeitsverzeichnis wird das Verzeichnis „~/AndroidCustomROM/rr-nougat
“ erstellt und verwendet.
Die Initialisierung des Repository sieht dann so aus:
~$ repo init -u https://github.com/ResurrectionRemix/platform_manifest.git -b nougat
Die geräte-spezifischen Daten können auf der GIT-Webseite heruntergeladen werden. Das gleiche gilt für die Kernel- und Vendor-Daten.
Herunterladen der geräte-spezifischen Daten von GitHub durch Eingabe des Gerätes im Suchfeld (hier in dem Fall „samsung klte
“:
~$ git clone https://github.com/LineageOS/android_device_samsung_klte.git -b cm-14.1 ~/AndroidCustomROM/rr-nougat/device/samsung/klte Cloning into '~/AndroidCustomROM/rr-nougat/device/samsung/klte'... remote: Counting objects: 1254, done. remote: Total 1254 (delta 0), reused 0 (delta 0), pack-reused 1253 Receiving objects: 100% (1254/1254), 769.79 KiB | 319.00 KiB/s, done. Resolving deltas: 100% (653/653), done.
Herunterladen der Kerneldaten von GitHib durch Eingabe des Kernelnames im Suchfeld (hier in dem Fall „samsung msm8974
“:
~$ git clone https://github.com/LineageOS/android_kernel_samsung_msm8974 -b cm-14.1 ~/AndroidCustomROM/rr-nougat/kernel/samsung/msm8974 Cloning into '~/AndroidCustomROM/rr-nougat/kernel/samsung/msm8974'... remote: Counting objects: 2800088, done. remote: Compressing objects: 100% (18/18), done. remote: Total 2800088 (delta 8), reused 6 (delta 3), pack-reused 2800067 Receiving objects: 100% (2800088/2800088), 588.53 MiB | 770.00 KiB/s, done. Resolving deltas: 100% (2327440/2327440), done. Checking out files: 100% (45831/45831), done.
Herunterladen vom Vendor von GitHub durch Eingabe des Geräteherstellers im Suchfeld (hier in dem Fall „samsung
“:
~$ git clone https://github.com/TheMuppets/proprietary_vendor_samsung -b cm-14.1 ~/AndroidCustomROM/rr-nougat/vendor/samsung Cloning into '~/AndroidCustomROM/rr-nougat/vendor/samsung'... remote: Counting objects: 38323, done. remote: Compressing objects: 100% (13/13), done. remote: Total 38323 (delta 2), reused 4 (delta 2), pack-reused 38308 Receiving objects: 100% (38323/38323), 1.92 GiB | 701.00 KiB/s, done. Resolving deltas: 100% (19451/19451), done. Checking out files: 100% (10084/10084), done.
Jetzt kann die Bauumgebung initialisiert werden:
~$ cd ~/AndroidCustomROM/rr-nougat ~# source build/envsetup.sh including device/generic/mini-emulator-arm64/vendorsetup.sh including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh including device/generic/mini-emulator-x86_64/vendorsetup.sh including device/generic/mini-emulator-x86/vendorsetup.sh including vendor/cm/vendorsetup.sh including sdk/bash_completion/adb.bash including vendor/cm/bash_completion/git.bash including vendor/cm/bash_completion/repo.bash ▼ Which build-type do you want to choose? 〉 1- Official ︱ Only for the official builds by the maintainers 〉 2- Unofficial ︱ For the unofficial builds 〉 3- Nightly ︱ Only for the official daily builds by the maintainers 〉 4- Weekly ︱ Only for the official weekly builds by the maintainers 〉 5- Release ︱ Only for the official releases by the RR-Team 〉 6- Milestone ︱ Only for the milestone releases by the RR-Team 〉 7- Experimental ︱ Only for the experimental releases by the RR-Team 〉 8- Final ︱ Only for the final releases by the RR-Team 〉 30/sec Time-out ︱ Default option ▼ Pick a number 2 ▪ Building unofficial variant ▼ Which root method do you want to use? 〉 0- Magisk ︱ Magisk Root Method 〉 1 or any other input- Rootless ︱ Unrooted builds [default] 〉 30/sec Time-out ︱ Default option ▼ Pick a number 1 ▪ Rootless build ▼ For how many days changelog do you want to generate? 〉 30/sec Time-out ︱ 7 Days by default ▼ Type a number 1 〉 Generating day number 1 ▪ 04/29/2018.. √ Changelog successfully generated.
Jetzt kann das Abbild ausgewählt werden:
~# lunch You're building on Linux Lunch menu... pick a combo: 1. aosp_arm64-eng 44. lineage_gts210wifi-userdebug 87. lineage_kltesprsports-userdebug 130. lineage_seed-userdebug 2. aosp_arm-eng 45. lineage_h830-userdebug 88. lineage_klte-userdebug 131. lineage_serrano3gxx-userdebug 3. aosp_mips64-eng 46. lineage_h850-userdebug 89. lineage_kuntao-userdebug 132. lineage_serranodsdd-userdebug 4. aosp_mips-eng 47. lineage_h870-userdebug 90. lineage_land-userdebug 133. lineage_serranoltexx-userdebug 5. aosp_x86_64-eng 48. lineage_h910-userdebug 91. lineage_lentislte-userdebug 134. lineage_shieldtablet-userdebug 6. aosp_x86-eng 49. lineage_h918-userdebug 92. lineage_lettuce-userdebug 135. lineage_spyder-userdebug 7. lineage_a5y17lte-userdebug 50. lineage_ha3g-userdebug 93. lineage_libra-userdebug 136. lineage_sumire-userdebug 8. lineage_a7y17lte-userdebug 51. lineage_hammerhead-userdebug 94. lineage_lithium-userdebug 137. lineage_surnia-userdebug 9. lineage_addison-userdebug 52. lineage_ham-userdebug 95. lineage_ls990-userdebug 138. lineage_suzuran-userdebug 10. lineage_armani-userdebug 53. lineage_harpia-userdebug 96. lineage_ls997-userdebug 139. lineage_t0lte-userdebug 11. lineage_athene-userdebug 54. lineage_hayabusa-userdebug 97. lineage_lt02ltespr-userdebug 140. lineage_taoshan-userdebug 12. lineage_axon7-userdebug 55. lineage_hero2lte-userdebug 98. lineage_lt03lte-userdebug 141. lineage_targa-userdebug 13. lineage_bacon-userdebug 56. lineage_herolte-userdebug 99. lineage_lux-userdebug 142. lineage_tenshi-userdebug 14. lineage_cancro-userdebug 57. lineage_hiaeuhl-userdebug 100. lineage_m216-userdebug 143. lineage_thea-userdebug 15. lineage_chagallwifi-userdebug 58. lineage_hiaeul-userdebug 101. lineage_m8d-userdebug 144. lineage_titan-userdebug 16. lineage_chaozu-userdebug 59. lineage_hltetmo-userdebug 102. lineage_m8-userdebug 145. lineage_tomato-userdebug 17. lineage_che10-userdebug 60. lineage_hlte-userdebug 103. lineage_mako-userdebug 146. lineage_tsubasa-userdebug 18. lineage_cherry-userdebug 61. lineage_huashan-userdebug 104. lineage_maserati-userdebug 147. lineage_tulip-userdebug 19. lineage_clark-userdebug 62. lineage_hydrogen-userdebug 105. lineage_merlin-userdebug 148. lineage_umts_spyder-userdebug 20. lineage_condor-userdebug 63. lineage_i9100-userdebug 106. lineage_mido-userdebug 149. lineage_us996-userdebug 21. lineage_crackling-userdebug 64. lineage_i9300-userdebug 107. lineage_mint-userdebug 150. lineage_us997-userdebug 22. lineage_d800-userdebug 65. lineage_ido-userdebug 108. lineage_n1awifi-userdebug 151. lineage_v1awifi-userdebug 23. lineage_d801-userdebug 66. lineage_ivy-userdebug 109. lineage_n2awifi-userdebug 152. lineage_v400-userdebug 24. lineage_d802-userdebug 67. lineage_jag3gds-userdebug 110. lineage_n3-userdebug 153. lineage_v410-userdebug 25. lineage_d803-userdebug 68. lineage_jagnm-userdebug 111. lineage_n5100-userdebug 154. lineage_v480-userdebug 26. lineage_d850-userdebug 69. lineage_jalebi-userdebug 112. lineage_n5110-userdebug 155. lineage_v500-userdebug 27. lineage_d851-userdebug 70. lineage_jfltevzw-userdebug 113. lineage_n5120-userdebug 156. lineage_v521-userdebug 28. lineage_d852-userdebug 71. lineage_jfltexx-userdebug 114. lineage_nx512j-userdebug 157. lineage_vegetalte-userdebug 29. lineage_d855-userdebug 72. lineage_k3gxx-userdebug 115. lineage_odin-userdebug 158. lineage_victara-userdebug 30. lineage_deb-userdebug 73. lineage_karin-userdebug 116. lineage_onyx-userdebug 159. lineage_vs995-userdebug 31. lineage_dogo-userdebug 74. lineage_karin_windy-userdebug 117. lineage_osprey-userdebug 160. lineage_w5-userdebug 32. lineage_ether-userdebug 75. lineage_kccat6-userdebug 118. lineage_otus-userdebug 161. lineage_w7-userdebug 33. lineage_f400-userdebug 76. lineage_kenzo-userdebug 119. lineage_P024-userdebug 162. lineage_xt897-userdebug 34. lineage_falcon-userdebug 77. lineage_kingdom-userdebug 120. lineage_paella-userdebug 163. lineage_yuga-userdebug 35. lineage_find7s-userdebug 78. lineage_kipper-userdebug 121. lineage_peregrine-userdebug 164. lineage_Z00L-userdebug 36. lineage_find7-userdebug 79. lineage_kiwi-userdebug 122. lineage_piccolo-userdebug 165. lineage_Z00T-userdebug 37. lineage_flounder_lte-userdebug 80. lineage_klimtwifi-userdebug 123. lineage_pme-userdebug 166. lineage_zerofltexx-userdebug 38. lineage_flounder-userdebug 81. lineage_kltechnduo-userdebug 124. lineage_pollux-userdebug 167. lineage_zeroltexx-userdebug 39. lineage_flo-userdebug 82. lineage_kltechn-userdebug 125. lineage_pollux_windy-userdebug 168. m_e_arm-userdebug 40. lineage_FP2-userdebug 83. lineage_klteduos-userdebug 126. lineage_r5-userdebug 169. mini_emulator_arm64-userdebug 41. lineage_g2m-userdebug 84. lineage_kltedv-userdebug 127. lineage_r7plus-userdebug 170. mini_emulator_x86_64-userdebug 42. lineage_gohan-userdebug 85. lineage_kltekdi-userdebug 128. lineage_r7sf-userdebug 171. mini_emulator_x86-userdebug 43. lineage_gts210ltexx-userdebug 86. lineage_kltekor-userdebug 129. lineage_s2-userdebug Which would you like? [aosp_arm-eng] 88
Jetzt kann gebaut werden:
~# brunch
— Steffen Bornemann 08.11.2018