Blog

Get to know more about me, my works and my interests.

Milestone in my Career

 For every step in my life there is a start point and so does this milestone too. After having completed 8 months of my professional career with several leaps and bounds I got into a major project because of my prior works. A new campus location, altogether a completely new environment. All seniors and far experienced than me.

 The first few days were an unforgettable ones to me. Though I had worked on Android custom ROM development I had no prior Linux knowledge. I did not even know the basic Linux file permissions concept. Luckily I had a senior architect who was a localite. Slowly started interacting and gaining knowledge. I took KT for an hour every alternative days from him. Within 15 days I was very much confident about Android architecture, Android boot sequence and framework call. During this time the project had kickstarted.

 It was a very ambitious project where a 2014 released phone with Qualcomm's Snapdragon 800(MSM8974) was decided to port to Android Pie from Nougat. The challenge here was that there was no support from vendor as Qualcomm had already dropped support for this chipset and the kernel was too old(3.4).

 I was not actively involved in the project during the first few weeks. But I was carefully watching, observing and learning what seniors were doing. Finally on December 8th I entered the project. I was given minor issues to fix. Got my own workspace, synced the code from repository. The first time I used the 3 popular commands-> source build/envsetup.sh, lunch and make -j32 if I remember still, makes me feel excited.

 

 The first issue that I took up to independently work on was "broken factory reset". The key to Android issues are the logs which will help fix ideally any issue in Android. Took help from seniors but it didn't help much. The framework received command to perform MasterClearConfirm. After this, device tries to boot into recovery mode. Recovery partition entry was not present in the fstab file due to which device was going back to fastboot. Upon adding that with misc partition entry it was partially fixed. Another issue was the recovery image did not have device tree image appended. Adjusted this in the build Makefile to completely fix the issue. This issue gave me an in-depth knowledge about Android Recovery. January 14th was the first time I pushed my change for review. Was very happy that my first work was well appreciated by everybody.

 

 After this my knowledge and learnings accelerated. Took up various issues involving tethering, auto bringhtness, sensors integration, audio routing to BT devices, and many more. By then, since the device was pretty stable it was then decided to work on certification involving CTS and GTS issue fixing. This was again very new to me. Google search and other Open Source Gerrit sites helped me a lot in this issue. The next challenge in the project was getting the device to function with SELinux status as enforcing. I was given complete freedom on whichever issue I used to work on. When I started I never expected I could fix 400+ CTS failures, 100+ GTS failures and various core feature bug fixes. Also, I have gained great knowledge on version control system like Git and Gerrit, bug tracking tool like JIRA and Jenkins.

 

 Having gained experience on Android Build System for almost 7 months for now I was confident that I had gained significant knowledge which was a step closer to achieve my goal. It was fun and exciting too. During the first week of July I just got an idea of porting Android 10 to this device to test my knowledge. Started spending my free time and weekends on this. So, I first synced Android 10.0.0_r38 repo from Google, cloned device kernel and vendor projects from the device's Gerrit repository. I had no experience on fixing build issues but still I tried. LineageOS was my main reference. Was finding it difficult and then felt I needed more knowledge/experience to work on this project and hence dropped it.

 But, when LineageOS has done it I felt even I should also be able to do it. This time I used LineageOS's build system instead of Google's system. Included around 30 patches across device kernel and vendor projects. Also, had to adjust display, media, camera, bt, wlan, audio HAL projects for msm8974 platform. This time I was a bit closer to the goal. Again, device didn't boot. Next, I tried to user kernel from LineageOS which helped. On August 20th I was finally able to boot the device. The moment when I got Launcher homescreen I will never forget it. All basic features including Wi-Fi, Bluetooth, GPS, Sensors, Telephony started working with slight modifications in init files.

 Since this was working fine I received huge appreciation from all seniors, managers and Director too. This motivated me to restart the work using Google repo which I left. I was finally able to fix all build issues. After this device was not booting. Surfaceflinger, HWServiceManager which were two core services in Android were crashing. Was finding it difficult as I was not getting any leads. The fact that kernel did not work previously gave me a pointer. Finally understood that the root cause was "incomplete port of binder". Bingo!! Device booted. Will never forget 18th October, 2020. The fact that I took frameworks projects from Google repo directly and few fixes from Pie project helped achieve a decent failure count on first run of CTS. The knowledge I gained while working on enforcing SELinux mode helped me do the same in this project too which I am currently working on. I gained good knowledge on avc denials.

 I never expected that I could achieve this milestone single handedly. What normally a team of 4-5 members take a minimum of 6 months to do I was able to do it single handedly within a span of just 4 months.

 The concepts/core skills I have gained so far are:

  • Android Build System
  • Makefiles
  • Soong and blueprint system
  • init files and services
  • File permissions, file contexts and SELinux rules
  • Hardware/HAL interfaces and libraries
  • Kernel configs
  • Cherry-Pick, am and major Version Control concepts

 Though I have worked on the high level concepts of all layers I would next want to specialize on specific domain like Telephony, RIL, Wi-Fi, Binder and much more.

 The SELinux rules and policies were interesting topics to work on. I am very fortunate to have gained so much of knowledge within a very short span of 1 year and 2 months.

And this  is about the first milestone that I have achieved in my path to reach the goal.

 If you feel you could guide, help me or refer me to someone who could help then I would like to take this opportunity to request you to contact me.

Thank you.
Bharath.