UBports Robot Logo UBports Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    VoLTE Implementation For Google Pixel 3a/3a XL

    Scheduled Pinned Locked Moved Google Pixel 3a/3a XL
    volte
    110 Posts 14 Posters 7.9k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      This topic has been deleted. Only users with topic management privileges can see it.
      • arubislanderA Offline
        arubislander @AetheralMeowstic
        last edited by

        @AetheralMeowstic There are several devices that support VoLTE. However the Pixel 3a / XL is not (yet?) among those.

        🇦🇼 🇳🇱 🇺🇸 🇪🇸
        Happily running Ubuntu Touch
        Google Pixel 3a (24.04 preview)
        JingPad (24.04 preview)
        PinePhone OG (20.04)
        Meizu Pro 5 (16.04 DEV)

        1 Reply Last reply Reply Quote 0
        • Eric HE Offline
          Eric H @AetheralMeowstic
          last edited by Eric H

          @AetheralMeowstic
          in the new halium 12 port for sargo and bonito, VoLTE is configured, yes, but the port is not finalized.

          • Ubuntu Touch for Xiaomi POCO X3 NFC Telegram group
          • Ubuntu Touch installation guide for Xiaomi POCO X3 NFC / X3
          1 Reply Last reply Reply Quote 0
          • A Offline
            atarilinux
            last edited by

            @mr_growl

            Do you still have Lineage OS on your phone? We are looking at completing the device info file for this port. The kernel cmdline part is missing. Please see below from the KB Knowledge base. I'm thinking we can pull this info from Lineage OS and use it here if I am understanding correctly.

            The kernel cmdline is one of the key things that is required to make the kernel boot. It has special parameters that allow the kernel to determine which features/things need to be enabled, and which need to be disabled. The Ubuntu Touch rootfs also relies on some key cmdlines which is required to boot, most specifically “console=tty0”. To adapt this to your device, try unpacking your boot image (section 8.3) and copying the cmdline from there, or take the help of a LineageOS device tree if it is available. “console=tty0” is a must for cmdline and should not be removed no matter what. Rest of the things can be removed and you can adjust these to your device. console=tty0 is a requirement for the rootfs to properly boot. systempart is added if you want to boot your rootfs from your system partition. It is supposed to point to your system partition.
            deviceinfo_kernel_cmdline="console=tty0 bootopt=64S3,32N2,64N2 systempart=/dev/mapper/system"

            M J 4 Replies Last reply Reply Quote 0
            • A Offline
              atarilinux
              last edited by

              @AetheralMeowstic

              We have confirmed VoLTE is possible with Ubuntu Touch for the Google Pixel 3a. The VoLTE patch is included in this port. We just need to finish this port to get everything up an running. Currently, we need to get the device info file built.

              The Ubuntu Touch community does see the need to get VoLTE up and running for those in the US and elsewhere. A number of phones are already running VoLTE. However, a number of these may be hard to get in the US or expensive. For example, the Fairphone 5 can run VoLTE in the US. Trying to find one in the US may be difficult or expensive. That is part of the reason why we are trying to get this port up and running. This could also help our European friends and others if their carrier has not dropped the Google Pixel 3a or does not include VoLTE Roaming.

              Unfortunately, the original developer's carrier dropped the Google Pixel 3a, and this is the main reason why this port is unfinished. We already have confirmed that some carriers in the US still support the Google Pixel 3a and VoLTE Roaming. Therefore, we can continue this project for the original developer. We are always looking for people to help test and contribute!

              1 Reply Last reply Reply Quote 1
              • M Offline
                mr_growl @atarilinux
                last edited by

                @atarilinux Here's what /proc/cmdline says for lineage 19.1 on Bonito:

                rcupdate.rcu_expedited=1 rootwait ro init=/init androidboot.bootdevice=7c4000.sdhci androidboot.baseband=sdm androidboot.keymaster=1 msm_drm.dsi_display0=dsi_sofef00_sdc_1080p_cmd_display::timing0 androidboot.force_normal_boot=1 androidboot.serialno=99BAX0K5LP androidboot.slot_suffix=_a androidboot.slot_retry_count=0 androidboot.slot_successful=no androidboot.hardware.platform=sdm670 androidboot.hardware=bonito androidboot.revision=MP1.0 androidboot.bootloader=b4s4-0.4-8048689 androidboot.hardware.sku=G020A androidboot.hardware.radio.subtype=2 androidboot.hardware.dsds=0 androidboot.secure_boot=PRODUCTION androidboot.cdt_hwid=0x05032802 androidboot.hardware.majorid=0x03 androidboot.dtb_idx=0 androidboot.dtbo_idx=8 androidboot.bootreason=reboot androidboot.hardware.ddr=4GB,Hynix,LPDDR4X androidboot.ddr_info=Hynix androidboot.ddr_size=4GB androidboot.hardware.emmc=64GB,SKHynix androidboot.cid=00000001 androidboot.boottime=0BLE:530,1BLL:62,1BLE:446,2BLL:126,2BLE:579,SW:10020,KL:1,KD:106,ODT:117,AVB:496,AFTL:0 androidboot.ramdump=disabled androidboot.blockchain=disabled usbcfg.suzyq=disabled androidboot.hardware.pcbcfg=BPPV androidboot.hardware.devcfg=B4VP root=PARTUUID=366e8a1b-1c20-45e6-b794-df754b290cfe androidboot.verifiedbootstate=orange androidboot.aftlstate=8 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 firmware_class.path=/vendor/firmware cgroup.memory=nokmem lpm_levels.sleep_disabled=1 loop.max_part=7 androidboot.boot_devices=soc/7c4000.sdhci androidboot.super_partition=system buildvariant=userdebug console=null
                

                Is that what you were looking for?

                A 1 Reply Last reply Reply Quote 1
                • J Offline
                  JayH @atarilinux
                  last edited by

                  @atarilinux From the boot.img on lineageOS 22.2-20250817 with working Verizon SIMM:

                  console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 firmware_class.path=/vendor/firmware cgroup.memory=nokmem lpm_levels.sleep_disabled=1 loop.max_part=7 androidboot.boot_devices=soc/7c4000.sdhci androidboot.super_partition=system

                  A 1 Reply Last reply Reply Quote 1
                  • A Offline
                    atarilinux @mr_growl
                    last edited by

                    @mr_growl

                    Thanks for checking! Unfortunately, I don't think that's it. I don't see the output beginning with console=.
                    Did this come from deviceinfo_kernel_cmdline?

                    1 Reply Last reply Reply Quote 0
                    • A Offline
                      atarilinux @JayH
                      last edited by

                      @JayH @mr_growl

                      Thanks! This looks like what we need! Is this from a Google Pixe 3a? Also, I wonder if there is any difference in the output between this and Lineage OS 19.1.

                      J 1 Reply Last reply Reply Quote 0
                      • J Offline
                        JayH @atarilinux
                        last edited by JayH

                        @atarilinux Sorry, yes, this is bonito.

                        and this is the only legible string in the boot.img file that looks anything like your example. It starts at 0x40 in the file. No deviceinfo_kernel_cmdline.

                        The builds for both 19.1 and 22.2 contain the following line in BoardConfig-common.mk (I was unable to locate a boot.img for 19.1):
                        BOARD_KERNEL_CMDLINE += console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on

                        BoardConfig-common.mk:40:BOARD_KERNEL_CMDLINE += console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on
                        BoardConfig-common.mk:41:BOARD_KERNEL_CMDLINE += msm_rtb.filter=0x237
                        BoardConfig-common.mk:42:BOARD_KERNEL_CMDLINE += ehci-hcd.park=3
                        BoardConfig-common.mk:43:BOARD_KERNEL_CMDLINE += service_locator.enable=1
                        BoardConfig-common.mk:44:BOARD_KERNEL_CMDLINE += firmware_class.path=/vendor/firmware
                        BoardConfig-common.mk:45:BOARD_KERNEL_CMDLINE += cgroup.memory=nokmem
                        BoardConfig-common.mk:47:BOARD_KERNEL_CMDLINE += lpm_levels.sleep_disabled=1
                        BoardConfig-common.mk:48:BOARD_KERNEL_CMDLINE += loop.max_part=7
                        BoardConfig-common.mk:49:BOARD_KERNEL_CMDLINE += androidboot.boot_devices=soc/7c4000.sdhci
                        

                        It looks like lineageOS has been using the same kernel for bonito builds since lineageOS 16

                        A 1 Reply Last reply Reply Quote 0
                        • A Offline
                          atarilinux @JayH
                          last edited by

                          @JayH

                          It looks kind of similar. Here is one from a UB Ports sample file that I am using for reference.

                          deviceinfo_kernel_cmdline="console=ttyMSM0,115200n8 earlycon=msm_geni_serial,0xA84000 androidboot.console=ttyMSM0 printk.devkmsg=on androidboot.hardware=qcom video=vfb:640x400,bpp=32,memsize=3072000 androidboot.configfs=true loop.max_part=7 msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 androidboot.memcg=1 cgroup.memory=nokmem androidboot.usbcontroller=a600000.dwc3 swiotlb=2048 androidboot.boot_devices=soc/1d84000.ufshc systempart=/dev/mapper/system"

                          1 Reply Last reply Reply Quote 0
                          • A Offline
                            atarilinux
                            last edited by

                            @ElliotLurie @Eric-H

                            Please see below. Does this look like what you need for device_info_kernel_cmdline? Will this complete the device_info file?

                            @JayH said in VoLTE Implementation For Google Pixel 3a/3a XL:

                            @atarilinux From the boot.img on lineageOS 22.2-20250817 with working Verizon SIMM:

                            console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 firmware_class.path=/vendor/firmware cgroup.memory=nokmem lpm_levels.sleep_disabled=1 loop.max_part=7 androidboot.boot_devices=soc/7c4000.sdhci androidboot.super_partition=system

                            Eric HE 1 Reply Last reply Reply Quote 0
                            • M Offline
                              mr_growl @atarilinux
                              last edited by

                              @atarilinux Here's the one extracted from the lineage 19.1 signed zip that I used to flash the phone:

                              deviceinfo_kernel_cmdline="console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 firmware_class.path=/vendor/firmware cgroup.memory=nokmem lpm_levels.sleep_disabled=1 loop.max_part=7 androidboot.boot_devices=soc/7c4000.sdhci androidboot.super_partition=system buildvariant=userdebug"
                              

                              That is lineage 19.1 (android 12.1) on bonito.

                              1 Reply Last reply Reply Quote 1
                              • M Offline
                                mr_growl @atarilinux
                                last edited by

                                @atarilinux And a lineage 19.1 sargo for good measure 🙂

                                deviceinfo_kernel_cmdline="console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 firmware_class.path=/vendor/firmware cgroup.memory=nokmem lpm_levels.sleep_disabled=1 loop.max_part=7 androidboot.boot_devices=soc/7c4000.sdhci androidboot.super_partition=system buildvariant=userdebug"
                                
                                1 Reply Last reply Reply Quote 1
                                • A Offline
                                  atarilinux
                                  last edited by

                                  @mr_growl

                                  Great! Thanks so much!

                                  1 Reply Last reply Reply Quote 0
                                  • Eric HE Offline
                                    Eric H @atarilinux
                                    last edited by

                                    @atarilinux @mr_growl @JayH
                                    There is a script to extract command line args and other needed fields.
                                    See at https://docs.ubports.com/en/latest/porting/build_and_boot/standalone_kernel_build.html#extracting-values-from-stock-boot-img-vendor-boot-img

                                    • Ubuntu Touch for Xiaomi POCO X3 NFC Telegram group
                                    • Ubuntu Touch installation guide for Xiaomi POCO X3 NFC / X3
                                    A 1 Reply Last reply Reply Quote 0
                                    • A Offline
                                      atarilinux @Eric H
                                      last edited by

                                      @Eric-H

                                      The GitLab has been updated. It looks like we are ready for the build now, right?

                                      https://gitlab.com/atarilinux/ubports-ubuntu-touch-google-sargo-volte/-/blob/main/deviceinfo

                                      1 Reply Last reply Reply Quote 0
                                      • A Offline
                                        atarilinux @Eric H
                                        last edited by

                                        @Eric-H

                                        I'm performing this step now. I'm currently waiting on it to complete.

                                        @Eric-H said in VoLTE Implementation For Google Pixel 3a/3a XL:

                                        Now that the project has been forked, you can proceed to step 2.
                                        In the new fork, in the left menu, go to Build->Pipelines

                                        click on new pipeline button.
                                        confirm.
                                        Wait - the build process might take several tens of minutes.
                                        .img files can be downloaded from the devel-flashable artifact
                                        

                                        I'm assuming the step you listed above handles this part from the documentation, now?

                                        Building, installing and running

                                        After you’ve completed your deviceinfo and filled in all needed stuff, its time you get to the main part, the build. For this just run: ./build.sh -b workdir

                                        That should download all the needed toolchains and then the kernel, and finally build everything. This process may take about 5 to 50 minutes to build the kernel.

                                        After your kernel is done building, you will have to build the rootfs. For this, just execute this:

                                        ./build/prepare-fake-ota.sh out/device_<your device's codename>_usrmerge.tar.xz ota This will download the rootfs, extract it and pack it into tarballs for our final script to create flashable images.

                                        Next up, run:

                                        ./build/system-image-from-ota.sh ota/ubuntu_command images This will convert the tarballs into flashable images, and your images will be stored in the images/ directory. There will be a number of files depending on how you configured your deviceinfo. But the basic file structure will be as given:
                                        images/
                                        ├── boot.img
                                        ├── rootfs.img
                                        └── system.img

                                        The boot.img will be flashed onto the boot partition of the phone. The system.img and rootfs.img are interchangable. rootfs.img is pushed to the data partition as ubuntu.img if you didn’t include systempart in deviceinfo’s cmdline. Otherwise, system.img is flashed to your system partition.

                                        A 1 Reply Last reply Reply Quote 0
                                        • A Offline
                                          atarilinux @atarilinux
                                          last edited by

                                          It looks like the pipeline is stuck. I'm getting this on GitLab:

                                          "This job is stuck because of one of the following problems. There are no active runners online, no runners for the protected branch , or no runners that match all of the job's tags: ubports
                                          Go to project CI settings"

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post