\begin{exe} {Kernel Modules}

   \begin{enumerate}
      \item
      List all currently loaded kernel modules on your system.
      \item
      Load a currently unloaded module on your system.

      If you are running a distribution kernel, this is easy
      to find; you can simply look in the
      \url{/lib/modules/<kernel-version>/kernel/drivers/net}
      directory and grab one. (Distribution kernels come
      with drivers for every device, filesystem, network
      protocol etc. that a system might need.) However, if
      you are running a custom kernel you may not have many
      unloaded modules compiled.

      A choice that will usually work is to pick either
      \file{e1000.ko} or \file {e1000e.ko}, as while these
      gigabit Ethernet drivers are quite common, it is very
      unlikely both would be loaded at once.
      \item
      Re-list all loaded kernel modules and see if your
      module was indeed loaded.
      \item
      Remove the loaded module from your system.
      \item
      Re-list again and see if your module was properly
      removed.
   \end{enumerate}

   \begin{sol}

      \begin{enumerate}
         \item
         \begin{cmd}
$ lsmod
         \end{cmd}
         \item
         In the following, substitute whatever module
         name you used for \verb?e1000e?.  Either of these
         methods work but, of course, the second is
         easier.
         \begin{cmd}
$ sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000e.ko
$ sudo /sbin/modprobe e1000e
         \end{cmd}
         \item
         \begin{cmd}
$ lsmod | grep e1000e
         \end{cmd}
         \item
         Once again, either method works.
         \begin{cmd}
$ sudo rmmod e1000e
$ sudo modprobe -r e1000e
         \end{cmd}
         \item
         \begin{cmd}
$ lsmod | grep e1000e
         \end{cmd}
      \end{enumerate}

   \end{sol}
\end{exe}

