Skip to content

Linux Kernel University Course∗


Programme Details∗

  1. Intro. Linux: обзор, установка, настройка. Файловая система. Командная оболочка. Утилиты. Bash: command line, shell scripting.

  2. Bash: advanced shell scripting, special variables, operators, functions, signals, debugging.

  3. Git: main rules, commands, branching, merging, rebase, project workflow.

  4. C Programming in Linux. GCC, CLANG. Develop and debug code. Creating a shared and static library. Linux kernel coding style.

  5. Writing Secure Code in C. CERT C Coding Standard. Make: Overview, Running, Rules, Variables, Options, Targets, Conditionals.

  6. ARM architecture overview. ST32F4xx. GlobalLogic StarterKit.

  7. Data input/output. Serial interfaces.

  8. Accelerometer (LIS302DL). LCD 1602 (HD44780).

  9. Linux kernel: overview, structure, building, installing.

  10. Виртуальная файловая система. Программный интерфейс. Ресурсы.

  11. Модули. Зависимости. Загрузка/выгрузка. Диагностика. Отладка.

  12. Драйвер символьного устройства. Назначение. Различия. Major и minor значения. Основные операции. Порядок инициализации. IOCTLs.

  13. Board Configuration. Device Tree. ACPI.

  14. Time Management.

  15. Memory Management.

  16. Interrupts Handling.

  17. Concurrency and Synchronization.


Development Tools∗


References∗

Linux∗

Git∗

C Programming Language∗

GlobalLogic StarterKit∗

Presentations∗

Examples∗


Practice Tasks∗

Exercises Tasks Details
Exercise #1 Task #1 Bash: command line, shell scripting
Exercise #2 Task #2 Git: main rules, commands, branching, merging
Exercise #3 Task #3 C Programming in Linux. GCC, CLANG. Linux kernel coding style
Exercise #4 ARM architecture overview. ST32F4xx. GlobalLogic StarterKit
Exercise #5 Task #4 Data input/output. Serial interfaces
Exercise #6 Accelerometer (LIS302DL). LCD 1602 (HD44780). Example
Exercise #7 Linux kernel: overview, structure, building, installing
Exercise #8
Exercise #9
Task #5 Виртуальная файловая система. Программный интерфейс. Ресурсы
Examples: procfs, sysfs
Exercise #10 Task #6 Драйвер символьного устройства
Exercise #11 Board Configuration. Device Tree. ACPI
Task #7 Time Management
Exercise #12 Task #8 Memory Management
Exercise #13 Interrupts Handling
Exercise #14 Task #9 Concurrency and Synchronization

Notes∗

Set the Proxy for APT on Ubuntu∗

  • Create proxy.conf:
sudo touch /etc/apt/apt.conf.d/proxy.conf
  • Add the following lines:
Acquire {
  HTTP::proxy "http://172.17.10.2:3128";
  HTTPS::proxy "http://172.17.10.2:3128";
}

Configure Git∗

# Set user name and email:
git config --global user.name "Name Surname"
git config --global user.email "mailbox@example.com"

# Set Nano as the default text editor:
git config --global core.editor "nano"

# Configure a global proxy if all access to all repos require this proxy:
git config --global http.proxy "172.17.10.2:3128"

# Unset a proxy
git config --global --unset http.proxy

Commit Requirements∗

  • Use signature when committing, this will be automatically done by the git commit -s (name needs to be set in ~/.gitconfig).
  • No more than 72 characters on line (use your signature string as a basic ruler).
  • Empty line between title and description and between description and signature.
  • Commit title should be like: Topic: Action the_rest_title_text

    • Topic describes the area of changes, e.g. Lesson1: or LCD:.
    • Action should start from capital letter, e.g. Add, Fix, Implement (not added, implemented).
    • The whole title should give enough info about the commit when using

      git log --oneline

    • No dot at the end of the title.

  • Commit description should describe why and how it was done, and not what was done (this is visible in diff).

    • For example, a bad description:

      Changed short to int

    • The correct one should be:

      Moved to a bigger data type because of overflow in some corner cases

    • Description is not needed in the "title says it all" cases.

Branch Requirements∗

  1. Use feature branches, no direct commits on master.
  2. Always create branches even for single-commit changes.
  3. Always check your code for code style compliance.
  4. Branch at each commit should be buildable and working.
  5. Pushed commits are never rebased.
How to become a Git/Lab/Hub master
  • Create a Git repository for every new project.
  • Create a new branch for every new feature.
  • Use merge/pull requests to merge code to Master.