=========================
SO2 Lab 01 - Introduction
=========================

Lab objectives
==============

* presenting the rules and objectives of the Operating Systems 2 lab
* introducing the lab documentation
* introducing the Linux kernel and related resources
* creating simple modules
* describing the process of kernel module compilation
* presenting how a module can be used with a kernel
* simple kernel debugging methods

.. include:: ../labs/introduction.rst
    :start-after: [SECTION-ABOUT-BEGIN]
    :end-before: [SECTION-ABOUT-END]

.. include:: ../labs/introduction.rst
    :start-after: [SECTION-REFERENCES-BEGIN]
    :end-before: [SECTION-REFERENCES-END]

.. include:: ../labs/introduction.rst
    :start-after: [SECTION-DOCUMENTATION-BEGIN]
    :end-before: [SECTION-DOCUMENTATION-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [SECTION-OVERVIEW-BEGIN]
    :end-before: [SECTION-OVERVIEW-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [SECTION-MODULE-EXAMPLE-BEGIN]
    :end-before: [SECTION-MODULE-EXAMPLE-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [SECTION-COMPILE-MODULES-BEGIN]
    :end-before: [SECTION-COMPILE-MODULES-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [SECTION-LOAD-MODULES-BEGIN]
    :end-before: [SECTION-LOAD-MODULES-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [SECTION-DEBUG-MODULES-BEGIN]
    :end-before: [SECTION-DEBUG-MODULES-END]

.. note::

    If you want to learn how to easily browse through the Linux source code
    and how to debug kernel code, read the `Good to know <#good-to-know>`__
    section.

Exercises
=========

.. include:: ../labs/introduction.rst
    :start-after: [SECTION-EXERCISES-REMARKS-BEGIN]
    :end-before: [SECTION-EXERCISES-REMARKS-END]

.. _exercises_summary:

.. include:: ../labs/exercises-summary.hrst
.. |LAB_NAME| replace:: kernel_modules

.. .. include:: ../labs/introduction.rst
..     :start-after: [EXERCISE1-BEGIN]
..     :end-before: [EXERCISE1-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [EXERCISE1-BEGIN]
    :end-before: [EXERCISE1-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [EXERCISE2-BEGIN]
    :end-before: [EXERCISE2-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [EXERCISE3-BEGIN]
    :end-before: [EXERCISE3-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [EXERCISE4-BEGIN]
    :end-before: [EXERCISE4-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [EXERCISE5-BEGIN]
    :end-before: [EXERCISE5-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [EXERCISE6-BEGIN]
    :end-before: [EXERCISE6-END]

.. include:: ../labs/kernel_modules.rst
    :start-after: [EXERCISE7-BEGIN]
    :end-before: [EXERCISE7-END]

.. _good-to-know:

Good to know
============

The following sections contain useful information for getitng used to the Linux
kernel code and debugging techniques.

.. include:: ../labs/introduction.rst
    :start-after: [SECTION-CODE-NAVIGATION-BEGIN]
    :end-before: [SECTION-CODE-NAVIGATION-END]

.. include:: ../labs/introduction.rst
    :start-after: [SECTION-DEBUGGING-BEGIN]
    :end-before: [SECTION-DEBUGGING-END]