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
    168 Posts 15 Posters 23.5k Views 4 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.
      • A Offline
        atarilinux
        last edited by

        @mr_growl

        Looks like I got something running in a virtual machine, but it is very, very slow probably due to the instruction translations to the ARM processor among other factors. Needless to say, it can run, but it will take forever under these specs if it doesn't crash. I've been eyeing a desktop PC for a while. I might have to take the plunge when the means become available. If I can't get this to work on my hardware, I will let you know.

        M 1 Reply Last reply Reply Quote 0
        • IanI Ian referenced this topic
        • M Offline
          mr_growl @atarilinux
          last edited by

          @atarilinux Memories of building linux kernel in the 90s πŸ™‚

          The lineage build is taking me a lot more time to build than the ubports one but I'm still plodding along on that for now. I'm hoping the lineage build will be an enlightening endeavour πŸ™‚

          One part about the ubports build that I'm unsure about is the vendor blobs. With the lineage build I extraced the blobs from my phone and added them into the source but I haven't noticed a step like that for the ubports build.

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

            @mr_growl

            Hahaha It definitely feels like the 90s! I better get some techno or grunge playing while I'm working on this. Hahaha

            Yes, when comparing different alternative OS builds, I noticed the same thing. I got stuck on where exactly these should go as I didn't notice anything similar in the Ubuntu Touch documentation. That led me back to trying to trace the original port and other ports to see what happens where and where these vendor blobs should go. Also, I don't know the last time the documentation has been reviewed and updated. For example, I still see the Nexus being referenced and that is from 16.04. I'm not sure how much has changed since then on the porting side. Also, there may be some things that could be left out either by accident or "like, of course, you should know you have to do XYZ, why do I need to write that?" which may confuse the new or average user. This is not a problem limited to just Ubuntu Touch. Other systems have similar omissions in their documentation sometimes. Overall, the documentation so far is great, but I do notice there are some places where I'm having questions, and it sounds like it is not just me. Maybe reading additional material is confusing me? I'm not sure. Anyway, I'll see what I can find out, and if I notice anything, I'll post it here.

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

              @mr_growl

              I did find this in the forum as a Port QA Checklist. Still looking into the vendor blobs.

              https://gitlab.com/ubports/community-ports/general/-/blob/master/DeviceChecklist.md

              M 2 Replies Last reply Reply Quote 0
              • M Offline
                mr_growl @atarilinux
                last edited by

                @atarilinux I've just finished and flashed my own build of lineage 19.1... for comparison, the ubports build takes me about 1 hour... the lineage build took closer to 20 hours on the same machine... so I really feel like something might be missing πŸ™‚

                That said, it may be that the lineage build is building everything where as the ubports build is downloading the GSI rootfs and such... I dunno... still learning.

                I think my next step is to follow the halium documentation and correlate that with the Droidian porting documentation. I do have a suspicious about where and when the blobs might need to be added but just need to go over everything again and let it sink in a bit. Anything I discover I'll document on the wiki for the repo I'm working in on gitlab and will link to here.

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

                  @atarilinux Also worth mentioning for your setup... in the Droidian porting guide is mentions:

                  this guide assumes that you're going to cross-compile an arm64 Android kernel on an x86_64 (amd64) machine using the Android-supplied precompiled toolchain that's available in the Droidian repositories. It's trivial to disable cross-compiling and compiling using the standard Debian toolchain.
                  

                  which says to me that you can compile it on your arm64 machine without having to use any x86 stuff.

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

                    @mr_growl

                    That's a huge time difference! I likewise feel like something is missing. Perhaps looking back at the original Pixel 3a/3aXL Ubuntu Touch 20.04 port could shed some light too. I'm assuming that these should have relatively the same file "structures." A vendor blob should be in there somewhere I'd imagine.

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

                      @mr_growl

                      Good to know! It is a Mac for whatever that's worth. At the time, I wanted to try something different, and now, I'm missing Linux every time. Hahaha

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

                        @mr_growl

                        I found some clarification on vendor blobs from this forum post. Perhaps we can glean something from here.

                        https://forums.ubports.com/topic/9392/xiaomi-redmi-note-12

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

                          @atarilinux I've made some progress, I think. I successfully built halium 12 for bonito and I now have the ubports recovery booting. 2025-10-20-19-34-55-804.jpg

                          I flashed the system.img from the halium build, then formatted the data partition as ext4 and then sideloaded a droidian rootfs on to it but it just came back to recovery. The end of the log file is filled with messages like:

                          ueventd: Cannot get SELinux label on '/dev/block/mmcblk0p29' device: No data available
                          

                          So I think it's time to start debugging. Will save that for another time.

                          I documented the steps for building halium 12 for bonito here:
                          Building-halium-12-for-bonito

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

                            @mr_growl

                            That's great news! Fantastic progress indeed! I think we will continue building off this port.

                            I think I've seen a message about SELinux before during my research. Let me see what I can find out on that error message.

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

                              Some info on ueventd and SE Linux Labels:

                              https://android.googlesource.com/platform/system/core/+/master/init/README.ueventd.md

                              https://source.android.com/docs/security/features/selinux/device-policy#label_new_services_and_address_denials

                              Two Additional Troubleshooting steps:

                              1. Look at the partitions to see how they are set up
                              2. Check out boot arguments and the kernel

                              I also found this which may or may not be helpful.

                              https://stackoverflow.com/questions/55163930/label-files-on-rootfs-ramdisk-with-selinux-context

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

                                @mr_growl

                                Granted, I'm not keeping completely current but I didn't think halium was the current/accepted/approved/supported/??? method of porting any more? I thought it was all being compiled into the kernel and done?

                                Anyway, kudos! I appreciate your efforts and am keeping an eye on this project as I'd like to be using that old Pixel3aXL I have lying around rather than the knoxed Galaxy I keep falling back to.

                                FuseteamF A 2 Replies Last reply Reply Quote 1
                                • FuseteamF Offline
                                  Fuseteam @JayH
                                  last edited by

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

                                  Granted, I'm not keeping completely current but I didn't think halium was the current/accepted/approved/supported/??? method of porting any more? I thought it was all being compiled into the kernel and done?

                                  fwiw Halium is still used, It is just that it is no longer needed to build halium itself

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

                                    @atarilinux I suspect it's because I skipped the step in the documentation about setting up the fixup-mountpoints script. I could not find that script anywhere so skipped it just to try to get something booting.

                                    Here's the part I'm talking about:

                                    Include your device in fixup-mountpoints
                                    
                                    Fixup-mountpoints replaces the aliases of block device nodes in /dev/block/by-name with their literal nodes under /dev/block. This prevents issues caused by by-name not being populated by systemd.
                                    
                                    First check if the codename of your device is already included in the <BUILDDIR>/halium/hybris-boot/fixup-mountpoints script.
                                    
                                    If it’s not already included, you will need to add it. Your device should be running LineageOS or another ROM where you can get root access over ADB.
                                    
                                        Find the fstab file for your device. For my Moto G5 Plus, this was fstab.qcom in device/motorola/potter/rootdir/etc
                                    
                                        Enable adb root access
                                    
                                        Create the skeleton for your device in fixup-mountpoints, right before the *):
                                    
                                        "[codename]")
                                            sed -i \
                                                [replacements, one per line]
                                                "$@"
                                            ;;
                                    
                                        For every line in fstab where the type is not auto, emmc or swap, run readlink -f [src] on the target device over ADB. [src] is the leftmost colum in fstab.
                                    
                                        Write all of our replacements, one for every mountpoint. Here’s the bones of one:
                                    
                                        -e 's [src] [return] ' \
                                    
                                    Replace [src] with what you input into readlink and [return] with what it returns. The space after [return] is important. The build fails without it.
                                    

                                    I don't have that in the location they mention. I found a fixup-mountpoints script in another project but I don't know that it'll actually be run if I put it in that location as that location doesn't currently exist.

                                    So that's what I'm investigating currently.

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

                                      I tried the halium-install script, too, with a ubports rootfs tarball but it stalled while pushing the system.img over adb (stopped at 5% and stayed there).

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

                                        @mr_growl

                                        That makes sense, and it does seem like that's the error. The good news is that it booted to recovery! Let me know if there is anything you need me to look at or research. I'll try my best to assist in any way that I can!

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

                                          @JayH

                                          Thanks for keeping an eye on the project! I likewise would like to make the switch. I'm sure others may be in the same boat. Definitely send your thanks to @mr_growl for all his hard work! I'm still learning, but helping when and where I can. Being new at this, I know I can't do this on my own in a resonable amount of time. There is a lot to read up on. With the community involved, I'm sure we can make something great!

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

                                            Current state of affairs:

                                            New Build Method (the one here: https://gitlab.com/mr-growl/ubports-ubuntu-touch-google-bonito-volte)

                                            • Builds successfully
                                            • boot.img doesn't boot to anything

                                            What I'd like to research regarding this is:

                                            • has any other community port used that method to make a successful android 12 port?

                                            • if so, I'd want to compare their repo to mine and see what I've missed.

                                            • how are the binary blobs being included in this build method

                                            Old Build Method (the one from the video and the halium website, steps documented here: https://gitlab.com/mr-growl/ubports-ubuntu-touch-google-bonito-volte/-/wikis/Building-halium-12-for-bonito

                                            • Builds successfully

                                            • boots into recovery

                                            • very clear where the vendor blobs need to be added

                                            For this method I need to figure out:

                                            • is the fixup-mountpoints script still relevant and if so, why isn't it in the build folder anywhere

                                            • are there any obvious flaws with using this method over the new one?

                                            Droidian

                                            • Documentation is straight forward

                                            • they provide api 32 (android 12L) rootfs zips that can be side loaded

                                            • their deployment instructions are more like lineage (which is a good thing)

                                            What I'd like to find out with them is:

                                            • has anyone in their community done a successful halium 12 port to any device

                                            • why do they have a separate sargo rootfs zip?

                                            • will an api 28 rootfs work with halium 12 (12.1 should be api 32)

                                            I think my next step is to do a droidian build following their docs and see what happens. I'm presuming that the boot.img produced should also work for ubports.

                                            Anyways... off to work πŸ™‚

                                            Eric HE 1 Reply Last reply Reply Quote 1
                                            • Eric HE Online
                                              Eric H @mr_growl
                                              last edited by

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

                                              New Build Method

                                              It seems you used the standalone kernel method.
                                              Then to install to your phone, you have to apply the process described in Building, installing and running

                                              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.

                                              About vendor blobs, in your case, they are already installed in a separate partition by android/lineage. UT will find this partition automatically (if you have not modified it)

                                              • Ubuntu Touch for Xiaomi POCO X3 NFC Telegram group
                                              • Ubuntu Touch installation guide for Xiaomi POCO X3 NFC / X3
                                              M 1 Reply Last reply Reply Quote 0
                                              • First post
                                                Last post