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.