Sunday, 28 April 2019

My Next Level


    Recently I was part of #TILT Tribe meeting on 28th April 2019. The talk of the day was about reaching our Next level. It was delivered by  our coach and mentor Mr. Ian Faria. 

    The learning there ignites me to think what could be my next level. For me there are so many next levels and to be precise, there is no end to the next level neither there is any end to in what all ways I want my next level. But one thing was for sure. I was concerned about what should be my first next level.

    To decide on next level today, I have to address the problem which is pulling me down first. This is my communication. How I communicate is something I am most concerned. So I decided to work on it. This is most common feedback I have. I know by saying it, I will more vurnarable. So be it.

    Everyday I write and speak so much. Earlier I was concerned more about how much rather how is the quality.

In Indian mythology, in Mahabharat, Arjuna was only one but defeated 100 Kauravas brothers. Why?  Because he had exceptional quality. 

     Even my one written sentence or spoken one line should make a lot of sense and deliver the intended message. 

    Considering all these points, feedback I received so far and lot of self talk, I come to the conclusion that my next level is best communicator.

    The next question poped to my mind... How can I quantify whether i reached the next level. 

    I have set up a account with Quora and answering on it. I have answered so many questions. Now on Quora I am expecting at least 100 upvotes in next 12 months and that will enhance my level to +1 and posted the same on my facebook page. There is no limit on number of answers at the same time. Upvotes will my message from universe.

   I am sharing this blog to remind me that what I have promised to myself and how much I am determine what I am looking for.

.  Thanks for reading and feel free to share as well.

Thursday, 28 March 2019

Time management and work priority


Work priority
Ø  Emotion drive our work priority
Ø  It is about self-management not about time management.
Ø  What matter most get high priority
Ø  We can’t solve today problem using yesterday way of time
Ø  Multiplier does priority based on significant.
Ø  Until when it matters the most important.
Ø  Anytime when we say no, we create more time tomorrow.
Ø  When you say yes to something, you say no to so many things.
Ø  Automate saves lot of time
Ø  You can delegate any work. Don’t think other can’t do it as you. But they will master one day. Better train them and delegate. This has high significant.
Ø  Wait to do something insignificant. But don’t wat to do something really significant.
Ø  Significant is more about how long today’s work will help tomorrow or future.

Tuesday, 19 March 2019

How to conduct yourself in office


How to win at office?
Human are political animal.
It is not about subject expert. You don’t have to be. You have to be famous.
Don’t sit only on desk. Eat with different people every day. Show genuine interest in people. It is about we not about what I did. Catch people at right. Catch people who are not doing right as well.
Over prepared for any meetings. If someone missed, be high and present data.
Volunteer and be first on work which is challenging, and no one wants to do. If you did, you will be miracle.
What people like and don’t like. Know personal which rule they follow and which they don’t follow rule.
Who is the power player? People go and come.

People pay attention to what you do? People notice what your limitation,
Meeting is the most important thing. You must put extra effort while preparing for meeting.
You may not have to say anything. Find people.
Figure out what big people like to do and be like them. Seek out new work and see if they are willing to give.
There is no garbage time in office. People watch you all the time. When boss is not there, work harder.
You don’t have to be project manager to be leader. Your role is to take charge. Be the first person to admit your mistake. Full fill your commitment. You be responsible to tell your story. Walk the talk.
You can’t go to a boss if there is no alternative way for the problem. Go to boss only if you have solution.
Never eat lunch alone.
Learn to take charge.

Monday, 18 March 2019

I interviewed myself on relationship

Inner Me: Hi Mukesh, My name is also Mukesh but I am inner you. Love to chat with you.
Let us begin with my question to you.
How do you define relationship in a single sentence?

Me: To me, relationship is more about trust and unconditional love.

Inner Me: How much you rate yourself with your relationship with self and people very close to you?

Me: I will rate myself the best. I have to agree that I can't make everyone happy and at the same time I have my own way of thinking and own way to taking action. I have to improve on it at the same time. One thing I am sure about myself is I am giving 💯 percentage to my relationship with self and closed one. I have always positive intention for them.

Inner Me: How you would like people to think about valuing relationship?
Me: To give this answer this question, I would like to talk about the video I watched long before. In Varanasi, there is place where people go before die. It is belief in Hinduism that people go to Swarga or heaven.
There were various interview where people who were going to die, were sad that they could not build good relationship with their closed one. Which was causing them grave pain. As in Gita the spiritual book  in Hinduism, you didn't bring anything neither you will take anything with you. Everything will be here. So give more and more.
Building relationships is the most important thing you can do. Because money and fame will be here only the happiness is something which will soothe your soul.

Inner Me: How did you learn about building relationships and what about your family background?
Me: I am from humble background. I am lucky that I learnt the building relationships from my parents. The relationship between my father and uncle. Also his relationship with cousin brother and sister teaches me a lot.
I too try more and more to make and develop relationships.

Apart from them, Ian Faria is also  one of the motivation factor in my relationship. I always consider The India Leadership Thinktank as my extended family.

Inner Me: What about your relationship in office And in your society?
Me: I definitely have trustworthy relationship at both the places. As we all know we can't make every one happy. Our intention should be good is the most important thing.
There are many other factors which impact office and society relationship.

Inner Me: What is the key to build relationships with anyone?
Me: Listen. This is the single most important thing. Listening mean you acknowledge what they think, you acknowledge why they think. Put yourself in their shoes.
And please don't give any suggestions unless asked. Reason is people don't ask suggestions unless they are sure you may resolve their problems. So only listen.

Inner Me: Thanks Mukesh for your time and attention to answer my questions.

Sunday, 17 March 2019

Notes taken during Android BSP porting

How to set cross compile path?

export ARCH=arm
export PATH=$PATH:/u/mini2440/opt/FriendlyARM/toolschain/4.4.3/bin/
export CROSS_COMPILE=arm-none-linux-gnueabi-
You need to run

cd $HOME
source .bashrc   > it update and load bashrc
gedit .bashrc > to see it’s content
echo $PATH > to confirm your update


Where android starts?
[Oreo/imx-o8.0.0_1.0.0_ga/android_build/system/core/init]
int main(int argc, char** argv)

/u/androidporting/Oreo/imx-o8.0.0_1.0.0_ga/android_build/device/fsl/imx6
For all the make file.

Bitbake - build system

Underoid android BSP, we have so many folder. Tell me the purpose of each folder?
1. abi - This folder contains a sub folder called cpp which actually contains many C++ files linked to many places.

2. android
repo init -u git://github.com/CyanogenMod/android.git
Yes, it's that android.git folder.

3. art - Yeah, it is the folder that deals with the compilation of the latest android ART runtime. If you're looking into source directories of some other android versions, you won't fins it obviously.

4. bionic - Bionic is mainly a port of the BSD C library to our Linux kernel with the following additions/changes:
- No support for locales.
- No support for wide chars (i.e. multi-byte characters).
- its own smallish implementation of pthreads based on Linux futexes.
- Support for x86, ARM and ARM thumb CPU instruction sets and kernel interfaces.

5. bootable - Boot and startup related code. Some of it is legacy, the fastboot protocol info could be interesting since it is implemented by boot loaders in a number of devices such as the Nexus ones.

6. build - The main entry point of the build system resides here - envsetup.sh, if you follow the instruction in source.android.com you will see that the first step before you do anything to build Android is to use the command source build/envsetup.sh
The script will check few things to make sure all the needed application available in the local machine. It also setup the devices that can be built, which is extracted from the directory device.

7. cts - the compatibility tests. The test suite to ensure that a build complies with the Android specification.

8. dalvik - This is the folder responsible for the compilation of the Dalvik runtime for the Android devices.
*Have a look at the difference between the two(art and dalvik) folders and you'll have an idea of how things work in that case*
9. Development - This directory contains application that are not part of the deployed app in the OS. There are some useful application such as widget builder, etc

10. Device - It contains the device specific configurations for many devices.
Note - Many people ask me what, the folders like 'common' and 'generic are for, so here -

> common - This directory contains gps information and also a script that allows you to extract proprietary binary files from your phone to be part of the build process.(You can try to have a look at your device's device tree and then the cm.mk file, where you could find relations of these files. In my case, it shows like this:
Code:
# Include GSM stuff
$(call inherit-product, vendor/cm/config/gsm.mk)
-and-
# Inherit some common cyanogenmod stuff.
$(call inherit-product, device/common/gps/gps_eu_supl.mk)
> generic - This directory contains the generic device configuration that is called ‘goldfish’. This is the device classification used when building the emulator.

> Google - This directory contains the Android Accessories Kit code. It contains a demokit Android app that allows you to control the ADK board. The ADK firmware can be check out here http://code.google.com/p/microbridge/. There is a good article about this here.

> sample - This directory contains a full example of writing your own Android platform shared library, without changing the Android framework. It also shows how to write JNI code for incorporating native code into the library, and a client application that uses the library. This example is ONLYfor people working with the open source platform to create a system image that will be delivered on a device which will include a custom library as shown here. It can not be used to create a third party shared library, which is not currently supported in Android.

11. docs - I contains an important sub-folder called source.android.com. Contains tutorials, references, and miscellaneous information relating to the Android Open Source Project (AOSP). The current iteration of this site is fully static HTML (notably lacking in javascript and doxygen content), and is and/or was maintained by skyler (illustrious intern under Dan Morrill and assistant to the almighty JBQ).

12. external - This directory contains source code for all external open source projects such as SQLite, Freetype, webkit and webview.

13. frameworks - Ah, one of the most important directories. it contains the sources for the framework. Here you will find the implementation of key services such as the System Server with the Package- and Activity managers. A lot of the mapping between the java application APIs and the native libraries is also done here.
A special note on this one - I'd recommend new users to not to play with any file/folder inside the frameworks folder, maybe your ROM doesn't boots then.

14. hardware - Hardware related source code such as the Android hardware abstraction layer specification and implementation. This folder also contains the reference Radio Interface Layer(RIL - To communicate with the modem side) implementation.

15. Kernel - It's not a default folder in the source code, but it's a part of device configuration set-up. It contains the kernel source of your device.

16. libcore - I'll explain this one with the important folders inside this, since every folder performs a different function.
  • dalvik - DalvikVM runtime for Android
  • dom - Java test classes for DOM
  • expectations - Contains information about the test cases
  • include - Some C/C++ include files that used for Array and String handling
  • json - JSON based Java implementation
  • luni - Contains test source code for loading .jar and .dex files
  • support - Contains support class file for testing Dalvik
  • xml - XML pull and push implementation

17. libnativehelper - I have no idea on this one. If someone knows, share your knowledge.

18. ndk - Contains build scripts and helper files for building the NDK
19. out(Everyone's favorite directory) - The build output will be placed here after you run make. The folder structure is out/target/product/. In the default build for the emulator the output will be placed in out/target/product/generic. This is where you will find the images used by the emulator to start (or to be downloaded and flashed to a device if you are building for a hardware target).

20. packages - Standard Android application that are available as part of the AOSP - Camera, SMS, Dialer, Launcher, etc

21. pdk - I believe that 'pdk' is the Platform Development Kit, it's basically an SDK/set of tools that Google sends to OEMs to evaluate their framework ahead of each major Android upgrade since Android 4.1.

22. prebuilt - Contains files that are distributed in binary form for convenience. Examples include the cross compilations toolchains for different development machines.

23. sdk - This directory contains lots of apps that are not part of operating system. There are quite useful apps that developers can leverage on and can be enhanced further as part of the operating system.

24. system - Source code files for the core Android system. That is the minimal Linux system that is started before the Dalvik VM and any java based services are enabled. This includes the source code for the init process and the default init.rc script that provide the dynamic configuration of the platform.

25. tools - Some external important tools that help in compiling. Not sure though. :/

26. vendor - This directory contains vendors specific libraries. Most of the proprietary binary libraries from non-open source projects are stored here when building AOSP


Why am I here?
  1. How to port other root fs to my android terminal?
  2. How to configure a GPIO PIN?


What is root file system?
First part is uds - unix directory structure. mkdri
2. Device nodes : represents also known as sudo file system - > files are handled by major number. - mknode (/dev)
Scripts - editor
Bin - (ls, cd, linux command)
Lib - (compilation library)

What is busybox and what is it’s use case?
Busybox is program able to run any linux command. It has strip down version of veevry command. Terminal having low memory need less app so that it can run successfully.



Which all folders are important for modifying any code or hardware behaviour?
Arch folder and driver folders are BSP folder. Most of the changes need to be here.

kernel_imx/kernel - is actually written by linus. All scheduler and other are writtenten there.

Where in code kernel starts?
kernel_imx/init > main.c > start_kernel() > setup_arch() - calls imx6q_init_machine in board file.

Where is the board file?
kernel_imx/arch/arm/mach-imx/mach-imx6q.c
DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad/DualLite (Device Tree)")
    .l2c_aux_val     = 0,
    .l2c_aux_mask    = ~0,
    .smp        = smp_ops(imx_smp_ops),
    .map_io        = imx6q_map_io,
    .init_irq    = imx6q_init_irq,
    .init_machine    = imx6q_init_machine,
    .init_late      = imx6q_init_late,
    .dt_compat    = imx6q_dt_compat,
MACHINE_END

System Processes are in bracket. First thread is kthreadd.

Process id
1 ?        Ss 0:02 /sbin/init splash

How to know which one is first process or thread?
static noinline void __ref rest_init(void)
{
    int pid;

    rcu_scheduler_starting();
    /*
    * We need to spawn init first so that it obtains pid 1, however
    * the init task will end up wanting to create kthreads, which, if
    * we schedule it before we create kthreadd, will OOPS.
    */
    kernel_thread(kernel_init, NULL, CLONE_FS);
    numa_default_policy();
    pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);

}


Final file is vmlinux.

Kernel boot strap unzip the kernel and is part of zImage.
uImage has uboot speacific header
zImage has kernel boot strap in piggi zip kernel image

Bootm process the boot hearder in os image





rest_init(void) [main.c] > kernel_init(void *unused) [main.c] > try_to_run_init_process("/sbin/init") [main.c] >

What is little kernel?
Little Kernel is the boot loader that performs the basic tasks of hardware initialization,
reading the Linux kernel and ramdisk from storage and loading it up to RAM, setting up initial registers and command line arguments for the Linux kernel, and jumps to the kernel. LK is based on the open source project on www.kernel.org.

What is the respective function or folder while using uboot?

Source
Physical component type
Physical component
u-boot-imx/arch/arm/cpu/
Arch
armv7
Core
Arm cortex a9
mach-<soc>
u-boot-imx/arch/arm/imx-common
soc
imx6

u-boot-imx/board/phytec/pcm058
som
phycore-imx6

sbc
Phy board mira




Pcm058.c is main file.

Pending:

Where is device tree file??
device tree is a set of text files in the Linux kernel source tree that describe the hardware of a certain platform. It is located at arch/arm/boot/dts/ and can have two extensions:
  • *.dtsi files are device tree source include files. They describe hardware that is common to several platforms which include these files on their *.dts files.
  • *.dts files are device tree source files. They describe one specific platform.


U_BOOT_CMD help us create new command

1973  scp /sbin/udhcpc ganesh@192.168.1.249:/sbin/udhcpc
1974  sudo scp /sbin/udhcpc ganesh@192.168.1.249:/sbin/udhcpc
1975  ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.1.249
1976  sudo ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.1.249
1977  sudo scp /sbin/udhcpc ganesh@192.168.1.249:/sbin/udhcpc
1978  sudo scp /sbin/udhcpc ganesh@192.168.1.249:~/
1979  ssh ganesh@192.168.1.10
1980  ssh ganesh@192.168.1.2
1981  exit
1982  ssh kishore@192.168.1.29
1983  cd ganesh/
1984  ls
1985  cd sam/
1986  ls
1987  vi imx_sim.c
1988  sudo poweroff
1989  sudo apt-get install bluez
1990  ssh ganesh@192.168.1.10
1991  ssh ganesh@192.168.1.2
1992  sudo minicom
1993  ssh ganesh2192.168.1.1
1994  ssh ganesh@192.168.1.1
1995  ls
1996  cd Desktop/mukesh/
1997  tar -xvf arm-cortexa9-linux-gnueabihf.tar.bz2
1998  tar -xvf kernel_imx.tar.gz
1999  ls
2000  cd Desktop/mukesh/
2001  ls
2002  tar -xvf u-boot-imx.tar.gz
2003  sync
2004  cd u-boot-imx/
2005  ls
2006  cd ..
2007  cd u-boot-imx/
2008  ls
2009  cd arch/
2010  ls
2011  ls arm/
2012  cd arm/imx-common/
2013  ls
2014  cd ..
2015  ls
2016  ls cpu/
2017  ls mach-
2018  ls mach-tegra/
2019  cd ../..
2020  cd board/phytec/
2021  ls
2022  cd pcm058
2023  ls
2024  cd ..
2025  cd cmd/
2026  ls
2027  vi tftp.
2028  vi net.c
2029  cd ..
2030  cd configs/
2031  ls
2032  cd ..
2033  make pcm
2034  ls
2035  vi Makefile
2036  make distclean
2037  make pcm058_defconfig
2038  make
2039  make distclean
2040  sudo make distclean
2041  make clean
2042  make distclean
2043  make pcm058_defconfig
2044  make
2045  cd ..
2046  ls
2047  tar -xvf arm-cortexa9-linux-gnueabihf.tar.bz2
2048  cd arm-cortexa9-linux-gnueabihf/
2049  cd gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.0.35-sanitized/bin/
2050  pwd
2051  cd ../../..
2052  vi envsetup.sh
2053  . envsetup.sh
2054  make clean
2055  cd u-boot-imx/
2056  make clean
2057  make distclean
2058  sudo apt-get install u-boot-tools
2059  make pcm058_defconfig
2060  make

How to configure cross compiler for Uboot build?
Please follow the commands below:

2047  tar -xvf arm-cortexa9-linux-gnueabihf.tar.bz2
2048  cd arm-cortexa9-linux-gnueabihf/
2049  cd gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.0.35-sanitized/bin/
2050  pwd
2051  cd ../../..
2052  vi envsetup.sh
2053  . envsetup.sh
2054  make clean
2055  cd u-boot-imx/
2056  make clean
2057  make distclean
2058  sudo apt-get install u-boot-tools
2059  make pcm058_defconfig
2060  make


For kernel understanding:

1990  cd Desktop/mukesh/
1991  tar -xvf arm-cortexa9-linux-gnueabihf.tar.bz2
1992  tar -xvf kernel_imx.tar.gz
1993  ls
1994  cd ..
1995  tar -xvf kernel_imx.tar.gz
1996  ls
1997  rm -rf kernel_imx
1998  ls
1999  exit
2000  cd /media/kishore/KISHORE/
2001  ls
2002  tar -xvf kernel_imx.tar.gz
2003  cd kernel_imx/
2004  ls
2005  cd arch/arm/mach-
2006  cd arch/arm/mach-imx/devices/
2007  ls
2008  cd ..
2009  ls
2010  vi imx35-dt.c
2011  vi imx6sl_low_power_idle.S
2012  ls
2013  vi mach-imx6q.c
2014  cd..
2015  cd ..
2016  ls
2017  cd configs/
2018  ls
2019  vi mira_oreo_defconfig
2020  history


How do we configure io pin in Linux in Uboot?
Use the function imx_iomux_v3_setup_multiple_pads to understand it better.

What are important file in arch/arm/kernel?
Head.s and head-common.s

What are important file in arch/arm/plat-<soc_family>?

arch/arm/mach-<soc-family> is for sytem on module file.

What is arch/arm/dtc

What is dts file?

What is Data structure file? Device tree.
In the Linux kernel source tree, there are .dts (i.e., device tree source) and .dtsi (i.e., device tree source include).
.dtb is the binary form of the .dts in a similar sense what a binary executable is to an assembly source:
arm/arch/boot/dts file is configure your devices with various settings
arm/arm/mach<som name> for SOM file in kernel

Drivers
/gpio
/i2c
/spi
/usb
/net

What kind of Driver type in linux?
Bus driver - gpio - mdd in windows
Device driver or client driver -

Under linux what is diff between platform driver and device?



What is Android booting steps?
Below are the steps:
  1. Power on
  2. Soc boot rom code(BRC) get executed and check for boot config pins
  3. BRC loads primary boot Loader PBL or Device Configuration Data DCD
  4. PBL loads BL
  5. BL loads Kernel
  6. Kernel mounts RFS drive
  7. Execute the init process
  8. Init process follow RC script. RC -

What is DCD and what is it’s benefit? Can we use everywhere?
It Initialize DDR controller registers. The code is simple instruction and It is part of header of boot loader. Not all SoC vendor support it.

What is PBL and what is the purpose?
PBL is small size boot loader and responsible to init ddr ram and flash. It gets copy to internal ram of soc and then gets executed. It can be part of main boot loader of separate boot loader.

How to see all boot messages from embedded linux board?
Please follow the steps below:
  1. Install minicom using “sudo apt-get install minicom
  2. Run sudo minicom -s
  3. Configure Baudrate, USB device or serial device.
  4. Run the command boot



What is device tree and how it different?

I have seen GPIO file where once input is changes, file gets value? Why it is so? Explain.

What is barebox and uboot? How they are different? How barebox is different from uboot and special use cases?
Barebox support many filesystem while uboot doesn’t support. The embedded linux community has  strong sup[port for barebox hence it is preferred. Most of the file system code in barebox is taken from kernel source hence it easy to understand it.


What is zimage and why it is named like that? What it contain?
It has all packages, drivers.

How to conenct to TFTP and what is the use case?
Run the following command
  1. ssh loseronlyme@192.168.1.117 and enter remote terminal password
  2. Go to folder from which file needs to be copied
  3. scp -r *  ee207885@192.168.1.118:~/ , enter host terminal password
What all command run for Oreo BSP compilation?

Please follow the command below:
619  ls
 620  cd imx-o8.0.0_1.0.0_ga/android_build/
 621  source build/envsetup.sh
 622  lunch
 623  make clean
 624  make -j6
 625  jack-diagnose
 626  vi $HOME/.jack-server/config.properties
 627  prebuilts/misc/linux-x86/ccache/ccache -M 50G
 628  export USE_CCACHE=1
 629  prebuilts/misc/linux-x86/ccache/ccache -M 50G
 630  make -j6
 631  vi external/v8/src/heap/heap.cc
 632  jack-admin start-server
 633  sudo apt-get  install openjdk-8-*
 634  sudo apt-get install jack-tools
 635  sudo apt-get  install openjdk-8-*
 636  make -j4
 637  prebuilts/sdk/tools/jack-admin stop-server 2>&1 > /dev/null
 638  prebuilts/sdk/tools/jack-admin cleanup-server 2>&1 > /dev/null
 639  prebuilts/sdk/tools/jack-admin start-server 2>&1 > /dev/null
 640  sudo apt-get install libjack-dev
 641  jack-admin start-serve
 642  ls
 643  cd out/
 644  ls
 645  cd target/product/sabresd_6dq/
 646  ls
 647  cd ../../
 648  ls
 649  cd prebuilts/sdk/tools/
 650  ls
 651  cd li
 652  cd lib/
 653  ls
 654  cd ..
 655  ls
 656  cd jills/
 657  ls
 658  cd ..
 659  ls
 660  vi mainDexClasses
 661  ls
 662  vi jack_for_module.mk
 663  vi Android.mk
 664  mma
 665  cd ../../
 666  cd ../
 667  make -j6
 668  vi /home/ee207885/.jack-server
 669  vi /home/ee207885/.jack-server/client.
 670  vi /home/ee207885/.jack-server/client.pem
 671  vi /home/ee207885/.jack-server/server.pem
 672  vi /home/ee207885/.jack-server/config.properties
 673  vi prebuilts/sdk/tools/jack-admin
 674  vi /home/ee207885/.jack-server/config.properties
 675  make -j6l
 676  make -j6
 677  cd out/target/product/sabresd_6dq/