Make your own free website on

Table of Contents


        [4]A simple problem and its solution



        [7]The Unix Shell
        [8]The C Compiler

              [9]From source code to machine code

        [13]Diff and Patch


        [16]Vi, Ctags

   [17]The System Call Interface

        [18]Files and Processes

              [19]File I/O
              [20]Process creation with `fork'
              [21]Sharing files
              [22]The `exec' system call
              [23]The `dup' system call

        [24]The `process' file system


   [26]Defining New System Calls

        [27]What happens during a system call?
        [28]A simple system call

   [29]Module Programming Basics

        [30]What is a kernel module?
        [31]Our First Module
        [32]Accessing kernel data structures
        [33]Symbol Export
        [34]Usage Count
        [35]User defined names to initialization and cleanup functions
        [36]Reserving I/O Ports
        [37]Passing parameters at module load time

   [38]Character Drivers

        [39]Special Files
        [40]Use of the `release' method
        [41]Use of the `read' method
        [42]A simple `ram disk'
        [43]A simple pid retriever

   [44]Ioctl and Blocking I/O

        [46]Blocking I/O

              [48]A pipe lookalike

   [49]Keeping Time

        [50]The timer interrupt

              [51]The perils of optimization
              [52]Busy Looping

        [54]udelay, mdelay
        [55]Kernel Timers
        [56]Timing with special CPU Instructions

              [57]GCC Inline Assembly
              [58]The Time Stamp Counter

   [59]Interrupt Handling

        [60]User level access
        [61]Access through a driver
        [62]Elementary interrupt handling

              [63]Tasklets and Bottom Halves

   [64]Accessing the Performance Counters

        [66]The Athlon Performance Counters

   [67]A Simple Real Time Clock Driver

        [69]Enabling periodic interrupts
        [70]Implementing a blocking read
        [71]Generating Alarm Interrupts

   [72]Executing Python Byte Code

        [74]Registering a binary format
        [75]linux_binprm in detail
        [76]Executing Python Bytecode

   [77]A simple keyboard trick

        [79]An interesting problem

              [80]A keyboard simulating module

   [81]Network Drivers

        [83]Linux TCP/IP implementation
        [84]Configuring an Interface
        [85]Driver writing basics

              [86]Registering a new driver
              [87]The sk_buff structure
              [88]Towards a meaningful driver
              [89]Statistical Information

        [90]Take out that soldering iron

              [91]Setting up the hardware
              [92]Testing the connection
              [93]Programming the serial UART
              [94]Serial Line IP
              [95]Putting it all together

   [96]The VFS Interface


              [98]Need for a VFS layer
              [99]In-core and on-disk data structures
              [100]The Big Picture


              [102]Registering a file system
              [103]Associating inode operations with a directory inode
              [104]The lookup function
              [105]Creating a file
              [106]Implementing read and write
              [107]Modifying read and write
              [108]A better read and write
              [109]Creating a directory
              [110]A look at how the dcache entries are chained together
              [111]Implementing deletion

   [112]Dynamic Kernel Probes

        [115]Installing dprobes
        [116]A simple experiment
        [117]Running a kernel probe
        [118]Specifying address numerically
        [119]Disabling after a specified number of `hits'
        [120]Setting a kernel watchpoint

   [121]Running Embedded Linux on a StrongARM based hand held

        [122]The Simputer
        [124]Powering up
        [125]Waiting for bash
        [126]Setting up USB Networking
        [127]Hello, Simputer

              [128]A note on the Arm Linux kernel
              [129]Getting and building the kernel source
              [130]Running the new kernel

        [131]A bit of kernel hacking

              [132]Handling Interrupts

   [133]Programming the SA1110 Watchdog timer on the Simputer

        [134]The Watchdog timer

              [135]Resetting the SA1110
              [136]The Operating System Timer

   [137]List manipulation routines

        [138]Doubly linked lists

              [139]Type magic
              [141]Example code

25 Oct 2003 < >