How to build LineageOS

thx but it is quite old, will see if it still works :grin:

I know that. I’m wondering when your device isn’t listed yet.

1 Like

Build instructions haven’t changed that much. It probably works as is, otherwise it’d only need minor changes. Have fun!

ok but it is still unclear to me how to start from scratch, if a device is not supported (officially or unofficially), means no LOS port available.

2 Likes

First try to build one that is supported. Learn the build process. Inpect Makefiles, get familiar with them.

Then the thing gets a lot difficult. Locate a supported device with similar hardware than the one you want to build for. Copy the device tree. Go each Makefile at a time making the appropiate changes. Try to build a functional recovery for it.

Then try to make it boot. Inspect logcats. And then make the rest work.

Easy peasy (nope).

5 Likes

Hi,

I switched from Fairphone OS to LineageOS 16.0 a week ago and I think it’s great!

Now, I’m trying to build it for myself on Ubuntu to learn how it works. Not sure I’m knowledgeable enough to contribute yet, but I guess I have to start somewhere :slight_smile:.

I’ve followed the instructions here: https://wiki.lineageos.org/devices/FP2/build
but I am getting errors when running ./extract-files.sh and then breakfast FP2. There are a number of files missing (see below). Am I missing something? Any help greatly appreciated :slight_smile:.

Output of extract-files.sh

No device is online. Waiting for one…
Please connect USB and/or enable USB debugging
Device Found.
Cleaning output directory (./…/…/…/vendor/fairphone/FP2/proprietary)…
Extracting 121 files in ./proprietary-files-qc.txt from adb:

  • vendor/bin/adsprpcd
  • vendor/bin/fm_qsoc_patches
  • vendor/bin/hci_qcomm_init
    !! vendor/bin/hci_qcomm_init: file not found in source
  • vendor/bin/irsc_util
  • vendor/bin/loc_launcher
  • /vendor/bin/mm-pp-daemon
  • vendor/bin/mpdecision
  • vendor/bin/netmgrd
  • vendor/bin/qmuxd
  • vendor/bin/qseecomd
  • vendor/bin/radish
  • vendor/bin/rfs_access
  • vendor/bin/rmt_storage
  • vendor/bin/sensors.qcom
  • vendor/bin/time_daemon
  • vendor/etc/data/dsi_config.xml
  • vendor/etc/data/netmgr_config.xml
  • vendor/firmware/a330_pfp.fw
    !! vendor/firmware/a330_pfp.fw: file not found in source
  • vendor/firmware/a330_pm4.fw
    !! vendor/firmware/a330_pm4.fw: file not found in source
  • vendor/firmware/venus.b00
    !! vendor/firmware/venus.b00: file not found in source
  • vendor/firmware/venus.b01
    !! vendor/firmware/venus.b01: file not found in source
  • vendor/firmware/venus.b02
    !! vendor/firmware/venus.b02: file not found in source
  • vendor/firmware/venus.b03
    !! vendor/firmware/venus.b03: file not found in source
  • vendor/firmware/venus.b04
    !! vendor/firmware/venus.b04: file not found in source
  • vendor/firmware/venus.mbn
    !! vendor/firmware/venus.mbn: file not found in source
  • vendor/firmware/venus.mdt
    !! vendor/firmware/venus.mdt: file not found in source
  • vendor/etc/permissions/qcnvitems.xml
  • vendor/etc/permissions/qcrilhook.xml
  • vendor/framework/qcnvitems.jar
    Checking if system is odexed and locating boot.oats…
  • vendor/framework/qcrilhook.jar
  • vendor/lib/libmdmdetect.so
  • vendor/bin/thermal-engine
  • vendor/lib/egl/eglsubAndroid.so
  • vendor/lib/egl/libEGL_adreno.so
  • vendor/lib/egl/libGLESv1_CM_adreno.so
  • vendor/lib/egl/libGLESv2_adreno.so
  • vendor/lib/egl/libq3dtools_adreno.so
  • vendor/lib/hw/activity_recognition.msm8974.so
  • vendor/lib/hw/flp.default.so
  • vendor/lib/hw/sensors.msm8974.so
  • vendor/lib/libC2D2.so
  • vendor/lib/libCB.so
  • vendor/lib/libOmxAacDec.so
  • vendor/lib/libOmxAmrwbplusDec.so
  • vendor/lib/libOmxEvrcDec.so
  • vendor/lib/libOmxQcelp13Dec.so
  • vendor/lib/libOmxWmaDec.so
  • vendor/lib/libOpenCL.so
  • vendor/lib/libQSEEComAPI.so
  • vendor/lib/libRSDriver_adreno.so
  • vendor/lib/libacdbloader.so
  • vendor/lib/libacdbrtac.so
  • vendor/lib/libadiertac.so
  • vendor/lib/libadreno_utils.so
  • vendor/lib/libadsprpc.so
  • vendor/lib/libaudcal.so
  • vendor/lib/libbccQTI.so
  • vendor/lib/libbtnv.so
  • vendor/lib/libc2d30-a3xx.so
  • vendor/lib/libconfigdb.so
  • vendor/lib/libdisp-aba.so
  • vendor/lib/libdrmfs.so
  • vendor/lib/libdrmtime.so
  • vendor/lib/libdsi_netctrl.so
  • vendor/lib/libfastcvadsp_stub.so
  • vendor/lib/libfastcvopt.so
  • vendor/lib/libflp.so
  • vendor/lib/libgeofence.so
  • vendor/lib/libgsl.so
  • vendor/lib/libizat_core.so
  • vendor/lib/liblbs_core.so
  • vendor/lib/liblistenhardware.so
  • vendor/lib/liblistenjni.so
  • vendor/lib/liblistensoundmodel.so
  • vendor/lib/libllvm-qcom.so
  • vendor/lib/libloc_api_v02.so
  • vendor/lib/liblqe.so
  • vendor/lib/libmm-abl-oem.so
  • vendor/lib/libmm-abl.so
  • vendor/lib/libnetmgr.so
  • vendor/lib/libperipheral_client.so
  • vendor/lib/libqc-opt.so
  • vendor/lib/libqdi.so
  • vendor/lib/libqdp.so
  • vendor/lib/libqmi_cci.so
  • vendor/lib/libqmi_client_helper.so
  • vendor/lib/libqmi_common_so.so
  • vendor/lib/libqmi_csi.so
  • vendor/lib/libqmi_encdec.so
  • vendor/lib/libqti-perfd-client.so
  • vendor/lib/libril-qc-qmi-1.so
  • vendor/lib/libril-qcril-hook-oem.so
  • vendor/lib/librpmb.so
  • vendor/lib/librs_adreno.so
  • vendor/lib/librs_adreno_sha1.so
  • vendor/lib/libsc-a3xx.so
  • vendor/lib/libscale.so
  • vendor/lib/libsensor1.so
  • vendor/lib/libsensor_reg.so
  • vendor/lib/libsmemlog.so
  • vendor/lib/libssd.so
  • vendor/lib/libsystem_health_mon.so
  • vendor/lib/libthermalclient.so
  • vendor/lib/libthermalioctl.so
  • vendor/lib/libxml.so
  • vendor/lib/soundfx/libqcbassboost.so
  • vendor/lib/soundfx/libqcreverb.so
  • vendor/lib/soundfx/libqcvirt.so
  • vendor/app/TimeService/TimeService.apk
  • vendor/app/shutdownlistener/shutdownlistener.apk
  • priv-app/qcrilmsgtunnel/qcrilmsgtunnel.apk
  • vendor/lib/libTimeService.so
  • vendor/lib/libdiag.so
  • vendor/lib/libdsutils.so
  • vendor/lib/libidl.so
  • vendor/lib/liblisten.so
  • vendor/lib/libqcci_legacy.so
  • vendor/lib/libqmi.so
  • vendor/lib/libqmi_client_qmux.so
  • vendor/lib/libqmiservices.so
  • vendor/lib/libtime_genoff.so
    Extracting 195 files in ./proprietary-files.txt from adb:
  • vendor/bin/mm-qcamera-daemon
  • vendor/firmware/cpp_firmware_v1_2_0.fw
    !! vendor/firmware/cpp_firmware_v1_2_0.fw: file not found in source
  • vendor/lib/libchromatix_imx135_liveshot.so
  • vendor/bin/senread
  • vendor/lib/libactuator_dw9714.so
  • vendor/lib/libactuator_dw9714_camcorder.so
  • vendor/lib/libactuator_dw9714_camera.so
  • vendor/lib/libactuator_dw9716.so
  • vendor/lib/libactuator_dw9716_camcorder.so
  • vendor/lib/libactuator_dw9716_camera.so
  • vendor/lib/libactuator_dw9800W.so
  • vendor/lib/libactuator_dw9800W_camcorder.so
  • vendor/lib/libactuator_dw9800W_camera.so
  • vendor/lib/libactuator_iu074.so
  • vendor/lib/libactuator_iu074_camcorder.so
  • vendor/lib/libactuator_iu074_camera.so
  • vendor/lib/libactuator_ov12830.so
  • vendor/lib/libactuator_ov12830_camcorder.so
  • vendor/lib/libactuator_ov12830_camera.so
  • vendor/lib/libactuator_ov8825.so
  • vendor/lib/libactuator_ov8825_camcorder.so
  • vendor/lib/libactuator_ov8825_camera.so
  • vendor/lib/libactuator_rohm_bu64243gwz.so
  • vendor/lib/libactuator_rohm_bu64243gwz_camcorder.so
  • vendor/lib/libactuator_rohm_bu64243gwz_camera.so
  • vendor/lib/libchromatix_SKUAA_ST_gc0339_common.so
  • vendor/lib/libchromatix_SKUAA_ST_gc0339_default_video.so
  • vendor/lib/libchromatix_SKUAA_ST_gc0339_preview.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_common.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_default_video.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_hfr_120fps.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_hfr_60fps.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_hfr_90fps.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_liveshot.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_preview.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_snapshot.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_video_hd.so
  • vendor/lib/libchromatix_SKUAB_ST_s5k4e1_zsl.so
  • vendor/lib/libchromatix_imx132_common.so
  • vendor/lib/libchromatix_imx132_default_video.so
  • vendor/lib/libchromatix_imx132_liveshot.so
  • vendor/lib/libchromatix_imx132_preview.so
  • vendor/lib/libchromatix_imx132_snapshot.so
  • vendor/lib/libchromatix_imx134_common.so
  • vendor/lib/libchromatix_imx134_default_video.so
  • vendor/lib/libchromatix_imx134_hfr_120.so
  • vendor/lib/libchromatix_imx134_hfr_60.so
  • vendor/lib/libchromatix_imx134_preview.so
  • vendor/lib/libchromatix_imx134_snapshot.so
  • vendor/lib/libchromatix_imx135_common.so
  • vendor/lib/libchromatix_imx135_default_video.so
  • vendor/lib/libchromatix_imx135_hfr_120.so
  • vendor/lib/libchromatix_imx135_hfr_60.so
  • vendor/lib/libchromatix_imx135_hfr_90.so
  • vendor/lib/libchromatix_imx135_preview.so
  • vendor/lib/libchromatix_imx135_snapshot.so
  • vendor/lib/libchromatix_imx135_video_hd.so
  • vendor/lib/libchromatix_ov12870_common.so
  • vendor/lib/libchromatix_ov12870_default_video.so
  • vendor/lib/libchromatix_ov12870_preview.so
  • vendor/lib/libchromatix_ov12870_snapshot.so
  • vendor/lib/libchromatix_ov2685_common.so
  • vendor/lib/libchromatix_ov2685_default_video.so
  • vendor/lib/libchromatix_ov2685_preview.so
  • vendor/lib/libchromatix_ov2685_snapshot.so
  • vendor/lib/libchromatix_ov2720_common.so
  • vendor/lib/libchromatix_ov2720_default_video.so
  • vendor/lib/libchromatix_ov2720_hfr.so
  • vendor/lib/libchromatix_ov2720_liveshot.so
  • vendor/lib/libchromatix_ov2720_preview.so
  • vendor/lib/libchromatix_ov2720_zsl.so
  • vendor/lib/libchromatix_ov5648_oty5f03_common.so
  • vendor/lib/libchromatix_ov5648_oty5f03_default_video.so
  • vendor/lib/libchromatix_ov5648_oty5f03_preview.so
  • vendor/lib/libchromatix_ov5648_oty5f03_snapshot.so
  • vendor/lib/libchromatix_ov5648_oty5f03_zsl.so
  • vendor/lib/libchromatix_ov5670_common.so
  • vendor/lib/libchromatix_ov5670_preview.so
  • vendor/lib/libchromatix_ov5670_snapshot.so
  • vendor/lib/libchromatix_ov5670_video.so
  • vendor/lib/libchromatix_ov8825_common.so
  • vendor/lib/libchromatix_ov8825_default_video.so
  • vendor/lib/libchromatix_ov8825_hfr_120fps.so
  • vendor/lib/libchromatix_ov8825_hfr_60fps.so
  • vendor/lib/libchromatix_ov8825_hfr_90fps.so
  • vendor/lib/libchromatix_ov8825_liveshot.so
  • vendor/lib/libchromatix_ov8825_liveshot_hd.so
  • vendor/lib/libchromatix_ov8825_preview.so
  • vendor/lib/libchromatix_ov8825_preview_hd.so
  • vendor/lib/libchromatix_ov8825_snapshot.so
  • vendor/lib/libchromatix_ov8825_snapshot_hd.so
  • vendor/lib/libchromatix_ov8825_video_hd.so
  • vendor/lib/libchromatix_ov8825_zsl.so
  • vendor/lib/libchromatix_ov8865_q8v18a_common.so
  • vendor/lib/libchromatix_ov8865_q8v18a_default_video.so
  • vendor/lib/libchromatix_ov8865_q8v18a_hfr_120fps.so
  • vendor/lib/libchromatix_ov8865_q8v18a_hfr_60fps.so
  • vendor/lib/libchromatix_ov8865_q8v18a_hfr_90fps.so
  • vendor/lib/libchromatix_ov8865_q8v18a_liveshot.so
  • vendor/lib/libchromatix_ov8865_q8v18a_preview.so
  • vendor/lib/libchromatix_ov8865_q8v18a_snapshot.so
  • vendor/lib/libchromatix_ov8865_q8v18a_video_hd.so
  • vendor/lib/libchromatix_ov8865_q8v18a_zsl.so
  • vendor/lib/libchromatix_ov9724_common.so
  • vendor/lib/libchromatix_ov9724_default_video.so
  • vendor/lib/libchromatix_ov9724_liveshot.so
  • vendor/lib/libchromatix_ov9724_preview.so
  • vendor/lib/libchromatix_s5k3l1yx_common.so
  • vendor/lib/libchromatix_s5k3l1yx_default_video.so
  • vendor/lib/libchromatix_s5k3l1yx_hfr_120fps.so
  • vendor/lib/libchromatix_s5k3l1yx_hfr_60fps.so
  • vendor/lib/libchromatix_s5k3l1yx_hfr_90fps.so
  • vendor/lib/libchromatix_s5k3l1yx_liveshot.so
  • vendor/lib/libchromatix_s5k3l1yx_preview.so
  • vendor/lib/libchromatix_s5k3l1yx_snapshot.so
  • vendor/lib/libchromatix_s5k3l1yx_video_hd.so
  • vendor/lib/libchromatix_s5k3l1yx_zsl.so
  • vendor/lib/libchromatix_skuab_shinetech_gc0339_common.so
  • vendor/lib/libchromatix_skuab_shinetech_gc0339_default_video.so
  • vendor/lib/libchromatix_skuab_shinetech_gc0339_liveshot.so
  • vendor/lib/libchromatix_skuab_shinetech_gc0339_preview.so
  • vendor/lib/libchromatix_skuab_shinetech_gc0339_snapshot.so
  • vendor/lib/libchromatix_skuab_shinetech_gc0339_zsl.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_common.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_default_video.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_hfr_120fps.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_hfr_60fps.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_hfr_90fps.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_preview.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_snapshot.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_video_hd.so
  • vendor/lib/libchromatix_skuf_ov12830_p12v01c_zsl.so
  • vendor/lib/libchromatix_skuf_ov5648_p5v23c_common.so
  • vendor/lib/libchromatix_skuf_ov5648_p5v23c_default_video.so
  • vendor/lib/libchromatix_skuf_ov5648_p5v23c_preview.so
  • vendor/lib/libchromatix_skuf_ov5648_p5v23c_snapshot.so
  • vendor/lib/libcneapiclient.so
  • vendor/lib/libjpegdhw.so
  • vendor/lib/libjpegehw.so
  • vendor/lib/libmmcamera2_c2d_module.so
  • vendor/lib/libmmcamera2_cpp_module.so
  • vendor/lib/libmmcamera2_frame_algorithm.so
  • vendor/lib/libmmcamera2_iface_modules.so
  • vendor/lib/libmmcamera2_imglib_modules.so
  • vendor/lib/libmmcamera2_is.so
  • vendor/lib/libmmcamera2_isp_modules.so
  • vendor/lib/libmmcamera2_pproc_modules.so
  • vendor/lib/libmmcamera2_sensor_modules.so
  • vendor/lib/libmmcamera2_stats_algorithm.so
  • vendor/lib/libmmcamera2_stats_modules.so
  • vendor/lib/libmmcamera2_vpe_module.so
  • vendor/lib/libmmcamera2_wnr_module.so
  • vendor/lib/libmmcamera_SKUAA_ST_gc0339.so
  • vendor/lib/libmmcamera_SKUAB_ST_s5k4e1.so
  • vendor/lib/libmmcamera_faceproc.so
  • vendor/lib/libmmcamera_hdr_gb_lib.so
  • vendor/lib/libmmcamera_hdr_lib.so
  • vendor/lib/libmmcamera_hi256.so
  • vendor/lib/libmmcamera_imglib.so
  • vendor/lib/libmmcamera_imx132.so
  • vendor/lib/libmmcamera_imx134.so
  • vendor/lib/libmmcamera_imx135.so
  • vendor/lib/libmmcamera_mt9m114.so
  • vendor/lib/libmmcamera_ofilm_oty5f03_eeprom.so
  • vendor/lib/libmmcamera_ov12870.so
  • vendor/lib/libmmcamera_ov12870_gt24p64a_eeprom.so
  • vendor/lib/libmmcamera_ov2685.so
  • vendor/lib/libmmcamera_ov2720.so
  • vendor/lib/libmmcamera_ov5648_oty5f03.so
  • vendor/lib/libmmcamera_ov5670.so
  • vendor/lib/libmmcamera_ov8825.so
  • vendor/lib/libmmcamera_ov8865_q8v18a.so
  • vendor/lib/libmmcamera_ov9724.so
  • vendor/lib/libmmcamera_s5k3l1yx.so
  • vendor/lib/libmmcamera_skuab_shinetech_gc0339.so
  • vendor/lib/libmmcamera_skuf_ov12830_p12v01c.so
  • vendor/lib/libmmcamera_skuf_ov5648_p5v23c.so
  • vendor/lib/libmmcamera_sp1628.so
  • vendor/lib/libmmcamera_sunny_p12v01m_eeprom.so
  • vendor/lib/libmmcamera_sunny_p5v23c_eeprom.so
  • vendor/lib/libmmcamera_sunny_q8v18a_eeprom.so
  • vendor/lib/libmmcamera_tintless_algo.so
  • vendor/lib/libmmcamera_tintless_bg_pca_algo.so
  • vendor/lib/libmmcamera_truly_cm7700_eeprom.so
  • vendor/lib/libmmcamera_wavelet_lib.so
  • vendor/lib/libmmipl.so
  • vendor/lib/libmmjpeg.so
  • vendor/lib/libmmqjpeg_codec.so
  • vendor/lib/liboemcamera.so
  • vendor/lib/libqomx_jpegdec.so
  • vendor/lib/libqomx_jpegenc.so
  • vendor/lib/libril-qc-radioconfig.so
  • vendor/lib/libsensor_test.so
  • vendor/lib/libwcnss_qmi.so
  • vendor/lib/mediadrm/libwvdrmengine.so
    Extracting 9 files in ./proprietary-files-twrp.txt from adb:
  • recovery/root/sbin/qseecomd
    !! recovery/root/sbin/qseecomd: file not found in source
  • recovery/root/vendor/lib/hw/keystore.default.so
    !! recovery/root/vendor/lib/hw/keystore.default.so: file not found in source
  • recovery/root/vendor/lib/hw/keystore.qcom.so
    !! recovery/root/vendor/lib/hw/keystore.qcom.so: file not found in source
  • recovery/root/vendor/lib/libQSEEComAPI.so
  • recovery/root/vendor/lib/libdiag.so
  • recovery/root/vendor/lib/libdrmfs.so
  • recovery/root/vendor/lib/libdrmtime.so
  • recovery/root/vendor/lib/librpmb.so
  • recovery/root/vendor/lib/libssd.so
    sed: can’t read ./…/…/…/vendor/fairphone/FP2/proprietary/recovery/root/sbin/qseecomd: No such file or directory

Those are supposed to be extracted from a FP2 running official Fairphone OS, but I think you’re trying to get them from LineageOS. That may be the cause, I guess.

I recall seeing a way to extract them from an upgrade ZIP (for Firefox OS builds, maybe?)

2 Likes

So you mean Extracting proprietary blobs from LineageOS zip files | LineageOS Wiki ?

2 Likes

Thanks for your help @Roboe and @Volker . Yes, I was trying to extract from the latest LineageOS zip as it says in the instructions.

I managed to do the same with the latest Fairphone OS build and ./extract_files.sh finds more files. This time it finds some that were missing from the LineageOS zip, but also can’t find some that were present in the LineageOS zip. Also, there are a couple of files missing from both.

This time breakfast FP2 runs without error, but brunch FP2 fails with a missing file error quoting one of the files missing from ./extract_files.sh. Is there anywhere I can download the missing vendor files from?

1 Like

Did you check at
https://code.fairphone.com/projects/fp-osos/dev/fp2-blobs-download-page.html
?

1 Like

(But don’t extract them onto the Lineage OS source code!!!)

Hi @Roboe. Why is that? I think I’ve managed to find all the files the extract script needs from a combination of the LineageOS, FPOS and blob zips. Should I not build using those files?

2 Likes

Fairphone provides an official way to get the blobs, the thing @Volker linked above. But it’s meant to be extracted right inside the Fairphone Open OS source code. I meant you shouldn’t unpack the official blobs on the LOS source tree directly, since it modifies other things outside of the vendor folder.

5 Likes

One issue with the basic research from scratch (eg. XDA) is, that one is flooded by detailed data that seems cyptic as long as the basic understanding is not there. If there is some introductionary read about the basics of alternative OS buidling that would be a marvel for all interested parties.

I find most things seem trivial once one has found out - however, before they might be huge hurdles. For me (and maybe other people familiar with IT but not Android development) its more about basic concepts than detailed procedures. I did check out several books. There are many with great info about how Android apps work and how to program them. That stuff is mostly useless for someone looking at porting an alternative OS to another hardware or maintaining an alternative OS.

Just to give some examples of what I mean here some typical questions about basic concepts.

  • which parts of LineageOS are device specific which not. My assumptions are
    • Linux kernel is the same for each CPU type, e.g. Snapdragon
    • Android Subsystem is the same
    • Device drivers are different per device
  • What is the difference between being able to install TWRP (and thus being able to flash an image) and rooting the device. E.g. for FP3 unlockable bootloader should allow to install TWRP. Could I flash an alternative Image on the partitions, then?
  • With TWRP could I backup the default image and save it as backup?
  • Is there any reason why a Lineage build with partial device drivers would not run?. For example when the basics Screen, Touch, USB, GPIO, Lighting, speaker, mike, WLAN are there but modem, camera are not. I could not phone with it, but could I use it like a tablet? Or in other words, knowing the FP3 component versions and finding some of them used in other Lineage phones, could one come up with a partial running LineageOS even when the device specific sources are not released yet by Fairphone?
  • When I had all device specifc drivers in place, could that part considered to be stable for future updates (say LineageOS 19.0->20.0 etc)? Or, in other words, what is the typical percentage of effort for the first setup vs. updates?
  • Safety updates: Desktop linux does kernel updates every few weeks, Wouldn’t that be possible with an Android OS as well? Except for major releases the kernel changes shoudl be mostly transparent to the rest - or why is it different with Android?
4 Likes

In a perfect world, the same kernel source could be used on all devices with only the dts/dtb (device tree source/device tree binary - it’s a structured way of describing the hardware so the kernel knows what’s there) being different and maybe a different kernel configuration where different drivers are built.

Unfortunately that’s not the case and most kernel trees have a bunch of ugly hacks in them that only work for one specific device (and hardware drivers are likely missing in trees for other devices).

Rooting the device = getting root access (a.k.a superuser) in the existing Android install (e.g. by using Magisk)

Unlocked bootloader = necessary in most cases for rooting, but you can for example flash a completely different operating system onto the device

Yes

Again, vendor kernels are ugly so it’s not a good idea - and FP3 kernel sources have been released (although I’m not sure they’re complete). Big parts of Android system builds are also userspace drivers which are usually extracted either from a running system or a factory image (“proprietary blobs”).

In LineageOS there are always patches to apply for getting newer versions working, at least Android 9 → 10 has been relatively simple compared to previous versions in my experience.

Again, the kernels running on Android phones are heavily patched and vendors usually don’t care to merge newer linux-stable releases into the kernel sources but only cherry-pick “important” patches. On x86 PCs the hardware is relatively standard and doesn’t change much - e.g. a mouse is a USB HID device and the protocol is fixed since USB exists (or something like that). The release cadence on mobile phone parts is currently much quicker and there aren’t many standard protocols for the kernel to communicate with hardware parts and hardware vendors usually release a driver which the OEM just takes and uses in their specific kernel.

8 Likes

@z2ntu Yery helpful answerd. Thanks.

Is my understanding correct that

  • I can not flash Magisk with the standard Recovery. CWM or TWRP (which are not ported yet) are required.
  • Why can’t I flash and start Magisk with adb?
  • TWRP is not ported yet. It needs Kernel and driver parts of the published sources to be complete and correct. Thus, before someone is able to build FP3 SW from sources and proof it working (flash with adb) it does not make sense to start porting TWRP.
  • Magisk does not need to be ported. I understood that its quite device agnostic
1 Like

Magisk only works on TWRP according to their website. The stock recovery checks signatures and / or doesn’t have the required functionality implemented I’m guessing.

adb is usually used for getting a shell and pushing/pulling files to/from the device, for debugging. You can also use adb (adb sideload) to push installation zips to the device and they will be installed but that only works in the recovery (see answer above). On the running Android system you don’t have any special permissions and can’t modify boot or system partitions - that’s only possible through a different system that basically doesn’t use the permission handling of Android :wink:

You need either the kernel extracted from a stock boot.img or a self-compiled kernel from the Fairphone-released kernel source code in order to get a custom system like TWRP working. Unfortunately I haven’t gotten the compiled kernel booting yet - and Fairphone doesn’t provide factory images yet to extract the kernel from.

Correct.

3 Likes

Maybe this is helpful for other people who want to start building Lineage (maybe this is the type of info newcomers would want to have?)

I followed this guide (https://forum.xda-developers.com/android/software-hacking/guide-how-to-build-lineageos-15-1-t3750175), but what is not in the guide - as it depends on many factors

  • downloading the sources took ages over a 100 MBit/s connection
    • forgot to check my clock, so I don’t know the real duration, but 2+ hours would be a good guess
    • could that be sped up by tweaking repo sync? I could imagine it downloads more than necessary if one just wants to build one version for one device
  • before starting the actual build the folder had ~70GB
  • the initial build took 04:53:51
real    294m7.497s
user    859m27.531s
sys     512m39.719s
  • after the build, ~133 GB space was used (using a CCACHE setting of 50 GB)

That’s on a Windows 10 version 19.09 laptop with i7-6700HQ @ 2.60GHz (4 physical/8 logical cores), 16 GB of RAM and a 1TB WD10SPCX-24HWST1 5400rpm magnetic disc (the laptop has a 128 GB SSD but that’s already used for everything else).
Build environment is Ubuntu 18.04 Core running under the Windows Subsystem for Linux.

[Update]: initial build time, final disk usage and computer specs

9 Likes

A post was merged into an existing topic: LineageOS on the FP1?

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.