Complete exercises at:

In a concise presentation:

  1. Explain the concept of Linux loadable module and device driver.
  2. Explain the key Linux data structures the tutorial and the example code reference and how these data structures support I/O abstraction.
    • Pick one data structure (e.g., file_operations) and show the uniform interface it defines: which function pointers the kernel calls, and where the driver fills them in.
    • Explain what the kernel can do without knowing which specific hardware is underneath — i.e., what the abstraction hides.
    • Give a concrete example: two different drivers (or a real driver and the tutorial’s driver) that implement the same interface for different hardware. What is the same, and what differs?
  3. Demonstrate how control is passed from an application process to the device driver.
    • Trace the path: application → system call → kernel (VFS) → the driver’s registered function.
    • Point to the exact line where the kernel calls into the driver through the interface, rather than the driver calling the kernel.
  4. Discuss lessons learned, errors made, and challenges encountered.