💾 Archived View for alaskalinuxuser.ddns.net › 2023-09-19.gmi captured on 2024-12-17 at 10:10:32. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-09-29)

-=-=-=-=-=-=-

Where do I start? Zero to TWRP for a phone with no custom roms or recovery….

">

74w, https://alaskalinuxuser3.ddns.net/wp-content/uploads/2023/09/th-

3788081014-300x196.jpeg 300w" sizes="(max-width: 474px) 100vw, 474px" /

Because I created the video series on how to build custom ROMs and kernels, I

get a lot of questions. Most of those questions are exactly the same. One of

the most common questions that I get a lot in regards to building custom ROMs

for Android phones goes something like this:

“Where do I start? My device doesn’t have anything, no custom ROM, no TWRP,

nothing.”

I’m hoping that I can write one answer here and point people to it, to help

them know what to do.

I like to tell these individuals that my first recommendation is to watch some

of my Youtube videos, and then download the Android source code and build for a

known device that already has a working device tree and custom ROM(s). This

allows them to ensure that they have properly set up their system, and if their

computer is capable of building. It will also give them valuable experience of

what right should look like. You can check out my threads with links and

helpful information on that here:

https://forum.xda-developers.com/t/guide-video-tutorial-how-to-build-custom-

roms-and-kernels-10-p-o-n-m-l.3814251/

Most don’t do this, but even if they do, then comes the next question:

“Where do I start? My device doesn’t have anything, no custom ROM, no TWRP,

nothing.”

Yes, we are right back to where we started. Where do they start?

Yesterday, I decided to build something for my new phone, a CAT S42G. To the

best of my knowledge, there is no custom ROM or custom recovery, such as

LineageOS and TWRP, available for this phone. In fact, there is no record of it

being rooted (that I could find). The only reference to flashing this phone

with a GSI is in my own blog, where I managed to do so, after much

experimentation, since it didn’t work right the first several times through.

So here it is, the definitive guide to go from zero to TWRP with an unrooted

phone that has no device tree, custom rom, or TWRP built for it. Maybe later I

can write the guide from TWRP to custom rom, but we’ll take this one step at a

time.

Prerequisite:

I am using Ubuntu 22.04, and I already am set up to build, but you may not be,

so do this on a Ubuntu 22.04 install (either actually installed, live cd, or

virtual machine):

$ mkdir ~/bin

$ PATH=~/bin:$PATH

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

$ git config –global user.name “Your Name”

$ git config –global user.email “you@example.com”

$ sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-

multilib git git-lfs gnupg gperf imagemagick lib32ncurses5-dev lib32readline-

dev lib32z1-dev libelf-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-

dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-

tools xsltproc zip zlib1g-dev

Alright, now you should be ready to proceed.

Step 1: Get a boot image or recovery image.

You need a boot image or recovery image for your phone in order to make a TWRP

device tree. Both have the kernel in it, and ram-disks with supporting

information and files that will facilitate making the TWRP device tree. Unless

you are really, really good, but then you wouldn’t be reading this article.

There are several means available to get a boot/recovery image from your phone.

1. \n

2. From factory provided firmware.

3. \n

Factory provided firmware can usually be unziped/unrared/etc. and the boot

partition or recovery partition can be extracted from it. In this case (CAT

S42G), there was no factory firmware available. I even contacted their customer

support, to which they said if you needed firmware reflashed, you would have to

pay them $30 and send them the phone, but they will not make it available to

the public. Bummer.

1. \n

2. Extracting it from the phone.

3. \n

For security purposes, on a production build (user) you cannot use any standard

tool to access the recovery or boot partition on the phone unless it is rooted.

There are several means to root the phone:

a. Using KingoRoot or other exploit app. – I tried this on the CAT S42G, and it

didn’t work, your mileage may vary.

b. Using Magisk. – But you need the boot image to do this, so this is a no-go

for this endevour.

c. Using a GSI or firmware that is already rooted. – I used this method on the

CAT S42G. I simply unlocked the bootloader, flashed a GSI with root installed.

To read a step by step guide on how I did that, please check out this article:

https://alaskalinuxuser3.ddns.net/2023/08/22/install-a-gsi-on-a-cat-s42g/

Once you have root on the phone, you can get the boot image by enabling USB

debugging and the following commands from your computer:

\n$ adb shell\n\n# Gets you into the phone.\n\n$ su\n\n# To become super

user\n\n$ dd if=/dev/block/by-name/boot of=/sdcard/boot.img\n\n# Creates a

backup of the boot partition on your phone.\n\n$ exit\n\n# Gets you out of the

phone.\n\n$ adb pull /sdcard/boot.img ./\n\n# Downloads the boot image to your

computer.\n\n\nYou could also do the same for the recovery partition if your

phone has one:\n\n\n$ adb shell\n\n# Gets you into the phone.\n\n$ su\n\n# To

become super user\n\n$ dd if=/dev/block/by-name/recovery of=/sdcard/

recovery.img\n\n# Creates a backup of the boot partition on your phone.\n\n$

exit\n\n# Gets you out of the phone.\n\n$ adb pull /sdcard/recovery.img ./\n\n#

Downloads the boot image to your computer.\n

In my case there is only a boot partition, so that is what I copied. Some

phones use the boot partition for both booting and recovery, some are

separated. Either way, now you have the kernel and ramdisk in a boot image.

Step 2: Install and use the TWRP device tree generator to make the initial

tree.

Fortunately, it is all easy stuff now. They make a TWRP device tree generator

to make the initial device tree. You can download it at:

[URL unfurl=”true”]https://github.com/twrpdtgen/twrpdtgen[/URL]

I run Ubuntu 22.04, and already had pip installed. If you don’t you can install

that by following these instructions:

[URL unfurl=”true”]https://phoenixnap.com/kb/how-to-install-pip-on-ubuntu[/URL]

With pip already installed, you can install twrpdtgen with this command:

$ pip3 install twrpdtgen

Then you run it against the boot or recovery image that you got from step 1.

$ python3 -m twrpdtgen ./boot.img

or

$ python3 -m twrpdtgen ./recovery.img

After a minute (depending on your computer) you will have a new folder that is

named after your device, in my case, a folder named CAT, with an S42G folder

inside. The initial tree looked like this:

https://gitlab.com/alaskalinuxuser/device_cat_s42g/-/tree/

e5486a4631b32a2db40bb713bbeecbcfa06239dd

Step 3: Download the minimal twrp manifest and setup for the build.

The instructions for downloading the minimal twrp manifest are here:

[URL unfurl=”true”]https://github.com/minimal-manifest-twrp/

platform_manifest_twrp_aosp[/URL]

But here are the important parts:

$ mkdir minTWRP

$ cd minTWRP

$ repo init –depth=1 -u https://github.com/minimal-manifest-twrp/

platform_manifest_twrp_aosp.git -b twrp-12.1

$ repo sync

Depending on your internet connection, this may take a while. This is for a

shallow clone (depth=1) so it shouldn’t be too bad. Significantly less than 100

GB.

Once it is synced, you need to go into the device folder, and copy your

twrpdtgen tree to it. In my case, I put the CAT folder into the device folder,

so it is device –> CAT –> S42G folder.

Step 4: Edit your devices tree for TWRP build.

Here is where things get interesting. The TWRP device tree generator made a

tree for OmniRom, but if you are following this guide, you need to edit some of

the files for the minimal manifest. You can check out the edits I made to the

CAT S42G tree here:

https://gitlab.com/alaskalinuxuser/device_cat_s42g/-/commit/

ada9ebd1c35f2a5f18ba8cc501c7e539bcd8d3ec

Essentially, you need to rename any file that says omni in the title to be

twrp, and change every mention of omni in the device tree files to say twrp

instead. Here are some examples:

* \n

* PRODUCT_NAME := omni_S42G

*

* PRODUCT_NAME := twrp_S42G

* \n

and

* \n

* $(call inherit-product, vendor/omni/config/common.mk)

*

* $(call inherit-product, vendor/twrp/config/common.mk)

* \n

But check out the link above for the full list that I did in the CAT S42G tree,

it should only be an edit to 4 or so files.

In my case I also had to edit out the PRODUCT_STATIC_BOOT_CONTROL_HAL lines, as

this caused an error with the minimal TWRP for 12.1, as it is depreciated. I

simply commented them out by putting a # in front of those lines.

Step 5: Build the image.

Now you are ready to build. All you have to do is run these commands:

$ cd minTWRP # To get into your minimum TWRP directory.

$ export ALLOW_MISSING_DEPENDENCIES=true # To set the flag to not error on

missing files.

$ . build/envsetup.sh # To prep the build.

$ lunch twrp_-eng # In my case lunch twrp_S42G-eng

$ mka recovery # To make the recovery

$ mka bootimage # To build the boot image.

Please note that will be whatever is written on the PRODUCT_NAME line of the

twrp_.mk file, or on the add_lunch_combo lines of the vendorsetup.sh file. How

long this build takes depends on your computer. On mine it is less than 15

minutes.

If there are any errors, you will need to fix them. I can’t cover every

possible error, but I had none on my build, except the error on

PRODUCT_STATIC_BOOT_CONTROL_HAL lines I mentioned previously. the TWRP device

tree generator is usually pretty good.

Step 6: Flash or boot the image.

Now that the build completed successfully, you should test it out. How you do

that depends on your phone. Here is what to do if you have a fastboot

bootloader:

$ cd out/target/product/ # In my case CAT/S42G/

$ ls # to list the files, you should see boot.img and maybe recovery.img,

whichever your device uses.

$ adb reboot bootloader # to tell your phone to go to the bootloader/fastboot

mode.

$ fastboot boot ./boot.img # This command allows you to boot it without

permanently flashing it.

or

$ fastboot flash boot ./boot.img # to install it on the boot/boot_a/boot_b

partition

$ fastboot reboot # to reboot.

or

$ fastboot flash recovery ./recovery.img # to install to the recovery

partition, if you have one.

$ fastboot reboot # to reboot.

If you have a Qualcomm device without a fastboot bootloader, you may need to

use Odin or Heimdall to flash your image. That is a tutorial in and of itself,

but you can read up on it here: https://www.glassechidna.com.au/heimdall/

And after it reboots, you will hopefully see the TWRP splash screen. Note that

if you did have a recovery partition, you do have to reboot to recovery to see

it, but if you just booted, and not flashed it, it should show up without

intervention.

Step 7: Test it out and share with others….

Self explanatory, but you should try all the usual options in your build, and

then you should share your work with others, so you can help the next guy, just

like I’m helping you now. I recommend putting your device tree on gitlab or

github, to make it easy for others to download and use. I’ll post a follow up

article with my new CAT S42G TWRP device tree and recovery image as well.

Hopefully that helps answer that “Where do I start?” question….

Linux – keep it simple.