I had this doubt because , i know that u-boot has the uart driver which helps to see the debug logs from start of u-boot while booting the kernel (where kernels driver will not be in action) ,my question is
2.kernel will be also having such driver which will comes to action after kernel booted?
4.if it is from kernel side , at what point it gets switched from u-boot's uart driver ?
First of all you need to understand that the drivers are different(although, same functionality) in the u-boot stage and in the kernel stage. For example, the U-Boot uses its own uart driver to show you its console. Once it hands over the control to the kernel, the kernel loads its own uart driver(as per the board), initializes it, and finally gets you the console.
Now, answering your questions one by one :
U-Boot resides completely in RAM. Thus, all of its drivers resides in the RAM itself. Once U-Boot transfers the control to the kernel, the kernel sets up its own environment in the RAM, and hence all of the boot loader's data is gone(including the drivers). The U-Boot's driver is no longer alive once the kernel boots up!
Exactly. The kernel has its own drivers to access the devices. It is much more feature rich than the one provided by the boot loader. Typically, extra features including interrupt handling and possibly DMA. The u-boot driver is generally a simple polling driver. If requested the Linux kernel's uart may use a polling mode during early boot but with different code than the u-boot driver.
It is through the driver of the kernel. The last message printed by the uart driver of U-Boot is "Starting kernel ...". After this message, all the console messages that you see are printed by using the kernel driver. Thus the first message printed by the kernel's driver is "Uncompressing Linux... done, booting the kernel"
I hope the answer to the third question answers this one as well!