Linux Kernel Driver Programming with Embedded Devices
What you'll learn
- At the end of my course, students will be able to engage in Linux device driver development projects for Embedded and x86 platforms.
- Students will be familiar with Embedded Systems, understand what Embedded Systems I/O and peripherals are.
- Students will be able to develop and/or debug driver development projects of simple to moderate complexities.
- Students will learn about GPIO programming, PCI device programming, USB and Network driver programming for Linux.
- Students will be able to configure and build Linux kernel for x86 and Embedded devices.
- Students will learn about Synchronization in Linux kernel. Synchronization is very import aspect of kernel space programming.
- In Bonus section, students will learn booting sequence from reset to bootloader to Embedded Linux kernel for ARM.
- Students should have background in Operating Systems primarily in Linux Operating system.
- Students should have background in C programming language.
- Students should have some exposure or knowledge of software/firmware development for some embedded devices/micro-controllers.
- It is helpful if students purchase an Embedded Systems board such as beagle bone or Microchip PIC stick from Olimex.
Learn to write a Linux kernel module and device driver. This course will teach you how to write Linux device driver for PCI device, GPIO (General Purpose IO), USB and pseudo Network device with PING (ICMP protocol) functionality.
You will learn cross-compilation and porting kernel Image to an Embedded Device. You will learn setting up NFS (Network File System) and tftpboot server.
You will learn about boot-loader such as uboot and other aspects of Embedded Systems .
This course is designed for beginners in Embedded Systems or Device driver programming. However, Intermediates can also learn from this course.
This course includes 33 videos of various lengths with 6 sections. This course also includes Notes and 'C' source code for drivers.
Recently I added 3 more **BONUS** videos on "Embedded Linux booting process in ARM". In these videos I talk about ARM general purpose and special registers, Vector table. Then I talk about boot process when reset button is pressed, bootloader, Program Address space (Data, BSS, Heal and Stack) Initial Ram Disk (initrd), then Linux kernel image loading.
I have also created another **BONUS** section called Miscellaneous. I am going add any thing that is not covered in that section. I have recently added section on "User and Kernel Virtual memory address space and topic on copy_to_user and copy_from_user" and "Tools required to build kernel module (kernel-headers package, build-essential package etc".
Please let me know what is unclear or needs more explanation I will add a lecture/explanation in Miscellaneous section.
I also have a plan to add another section soon covering topics on Direct Memory Access (DMA), Direct Cache Access (DCA), Scatter Gather List (SGL), Zero copying etc.
Who this course is for:
- Computer Science, Computer Engineering or Electrical Engineering students.
- Students who are enthusiastic about learning Embedded System and Linux driver programming.
- Systems Engineers who are just learning how to write Linux device drivers.
I have about 15 years of software development experience. My area of technical expertise includes C/C++ programming, device driver development, firmware design and development and Embedded Systems.
I have held a job title from Embedded Software Engineer to Software Engineer and architect from reputed companies including a fortune 500 company in the USA.
My undergraduate studies was in Computer Science and graduate studies was in Engineering with Specialization in Computer Security for Embedded Systems.