Profile
A Bachelor of Technology in Electronics and Communication Engineering from Mahatma Gandhi University (KMEA Engineering college), Kerala in 2013. Having experience in Linux device driver. Knowledge of Linux kernel and application level programming.
Qualifications & Education
• B.Tech from KMEA Engineering college,Edathala,Mahathma Gandhi University (2013)with 66.8%
• Plus-Two from G.B.H.S.S Aluva(2009) with 85%
• S.S.L.C from H.V.H.S.S. Thrikkakkara(2007)with 85%
Skills Set
Operating System : Linux,Windows
Programming Languages : C
Software Tools : SVN, cscope, ctags, make/Makefile, gcc, source insight, patchfiles
Debugging Tools : Gdb, wireshark, strace.
Linux Kernel programming : Network Driver, Character Driver and Block Driver.
Building and installing kernel from kernel source code.
Linux Internals.
How to handle concurrency and race conditions.
Mutex, Semaphore, spinlock
Memory allocation techniques. (kmalloc, vmalloc)
Implementing interrupt handler. (Top and bottom halves)
PCI configuration space, device enumeration and accessing device registers
Memory mapping and DMA ( streaming and coherent mappings.)
Kernel-space socket Programming
Linux Application Programming : Socket Programming
Professional Experience
Current : Gracelabs Pvt.Ltd
Profile : Storage and Network Device driver development
Experience : 1 year plus
Designation : Software Associate
Previous : Wind Magic systems Pvt. Ltd
Profile : Linux Device driver development
Experience : 1 year
Designation : Trainee
Projects
1. Storage Fabric (IP SAN) for NVMe devices using NVMe over IP
Platform: Linux kernel 3.16
Language: C
Tools : gcc , make, cscope, ctags ,SVN, Wireshark
Description: Scope of this project is to implement a storage fabric IP SAN (Storage Area Network) for NVMe (Non-volatile Memory Express) devices using NVMe over IP. The core of the system is a protocol which carries NVMe commands over TCP/IP. The protocol implementation involves a virtual NVMe driver as client residing on the storage client nodes and physical NVMe driver as server residing on a storage server. OCTEON CN68XX device is being used development and testing. The client side virtual NVMe driver is configured with the IP address of the storage server using a user-space configuration utility. The virtual NVMe driver establishes TCP socket connection with the storage server hosting the physical NVMe device. Once the TCP connection is established, all the NVMe commands are sent to the server side using a kernel space socket. On the server side, these NVMe commands are received from the TCP socket and placed in the submission queue of the NVMe device. The completion status of these commands are picked up from the completion queue and sent through the same socket back to the storage client. The client and server communications are handled by kernel thread on virtual NVMe driver and the physical NVMe driver. One physical NVMe device can serve several NVMe virtual driver clients simultaneously. My responsibility is to implement the NVMe virtual driver (Storage client).
2. Linux Ethernet Network device driver for Realtek 8168
Platform: Linux kernel 2.6
Language: C
Tools : gcc , make, cscope, ctags.
Description: Aim of the project was to cut down the functionalities of the general network driver so that we could save on the binary image size. We had to change the NAPI based I/O to interrupt based I/O.
Realtek 8169 is PCIe based NIC card. Bus driver enumerates the card. The probe function gets called when the driver is inserted. Probe function retrieves the interrupt number , mapped (registers) bus address from PCI configuration space. The bus address is remapped to kernel virtual address. Using this virtual address MAC and PHY is initialized. PHY is accessed through GMII interface in MAC. We create a net device object to interface with Linux kernel. This object is stacked just below the IP protocol device object by the kernel. The TX packets are coming from IP layer. The RX packets are pushed to IP layer. All the callbacks (TX,get stats,open,close) are registered with the net device object. An interrupt handler is installed on the interrupt line we got from PCI configuration space. A consistent DMA mapping is setup for TX and RX descriptors. The bus address of these descriptors are programmed to DMA registers. Packets are living in streaming DMA mapping. The incoming TX packets are mapped to the TX descriptor ring and we instruct the DMA to start polling. Ethernet headers were getting added in MAC layer. For incoming packets, we have to pre allocate buffers and map the corresponding bus address to the descriptor ring. The DMA gives an interrupt when it has copied the packets to the given location. In interrupt handler we poll the own bit of the RX descriptor ring. If own bit is reset, we copy the data to a new socket buffer and given it to upper layer for further processing. TX completion, RX and TX errors, DMA errors are also handled in Interrupt service routine.
Role: Understand the working of Ethernet driver. Implement interrupt based I/O.
Academic Project
• Spider Cam