Course Code: ldd
Duration: 35 hours
Prerequisites:

  • GNU/Linux sistemini bir son kullanıcı olarak kullanmaya temel düzeyde aşinalık
  • Komut satırı kabuğuna temel düzeyde aşinalık
  • Kullanıcı alanı / uygulama geliştirmeye temel düzeyde bilgi
  • Orta düzey C programlama bilgisi
  • Önceden Gömülü GNU/Linux Sistem Mimarisi eğitimine katılmış olması (şiddetle tavsiye edilir!) ve/veya orada belirtilen konulara iyi düzeyde hâkim olunması

Overview:

Açıklama

Bu 5 günlük eğitim sınıfı, GNU/Linux çekirdek iç yapıları ve cihaz sürücüsü geliştirme kavramlarını göstermek için uygulamalı alıştırmaları eğitimle birleştirir. Size kısa sürede konuya hâkim olmayı hedefler. GNU/Linux cihaz sürücüleri yazmak için gerekli olan süreçleri, kavramları ve komutları teori ve iş başında eğitimin bir kombinasyonu üzerinden açıklıyoruz.

Tekerleği yeniden icat etmeyin; deneyimli bir eğitmenin bilgilenmesiyle kendi gömülü geliştirme projenizde etkili bir şekilde kullanabileceğiniz uygulanabilir bilgi ve beceriyle evinize dönün.

Katılacaklar Kimler?

GNU/Linux cihaz sürücülerinin geliştirilmesi veya değerlendirilmesi konusunda ilgi duyan veya bu görevi üstlenen yazılım mühendisleri, saha mühendisleri, (proje) yöneticileri ve donanım mühendisleri.

Course Outline:

Giriş

  • GNU/Linux'un kısa tarihi
  • lisanslama
  • çekirdek sürümleme
  • yayın döngüsü
  • çekirdek ağaçları
  • ana dal (mainline)
  • çekirdek ile kullanıcı alanı
  • mekanizma vs. politika
  • çekirdek sürücü alternatifleri
  • RTOS vs. Linux

Bellek Yönetimi

  • sanal bellek vs. fiziksel bellek
  • çekirdek içinde bellek ayırma
  • sayfalar
  • bölgeler (zones)
  • API
  • slab

Çekirdek Yaması (Patch)

  • yaşam döngüsü
  • git
  • çekirdek kaynağı
  • yama oluşturma
  • yama kontrolü
  • yama düzeltme
  • yama gönderme
  • denetlenmiş kod

Çekirdek Modülleri

  • çekirdek kaynaklarının alınması
  • yapılandırma/derleme/yükleme
  • cihaz sürücüleri (statik olarak bağlanmış, çalışma zamanında yüklenen)
  • init/exit
  • lisanslama
  • EXPORT SYMBOL GPL
  • ağaç dışında makefile
  • module-init-tools
  • çekirdek ağacı içindeki modül
  • Kconfig
  • parametre geçişi
  • sparse

Karakter Sürücüleri

  • mimari
  • kullanıcı/çekirdek arayüzü
  • I/O alt sistemi
  • VFS
  • sysfs (cihazlar, bus, sürücüler, sınıflar),
  • kobject/ktype/kset
  • Linux çekirdek sürücü modeli
  • cihaz dosyaları
  • karakter sürücü
    • başlatma
    • kayıt
    • open, release
    • cdev, cdev add, cdev del,...
    • major/minor numaralar
    • udev, udevmonitor, udevadm

Gelişmiş Karakter Sürücü İşlemleri

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • kullanıcı alanı API
  • çekirdek alanı API
  • süreç yaşam döngüsü
  • uyku/engelleme
  • uyku/uyanma
  • bekleme kuyruğu (wait queue)
  • kalabalık sürü (thundering herd)
  • poll/select

Çekirdek Hata Ayıklama

  • hata ayıklama
  • çekirdeği hata ayıklama
    • git ile ikili arama
    • çekirdekten gelen hata ayıklama desteği
    • printk, syslogd, klogd, log seviyeleri, hız sınırı, debug seviyeleri, seçici alt sistemler
    • debugfs sorgulayarak hata ayıklama
    • oops hata ayıklama, oops tetikleme
    • Magic SysRq Tuşu
    • kgdb/kdb
    • JTAG

İzleme (Tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop izleyici
    • fonksiyon izleyici
    • sched switch izleyici
    • fonksiyon grafiği izleyici
    • dinamik izleyici
  • trace-cmd/kernelshark
  • perf
  • LTTng

Kesmeler (Interrupts)

  • kesmeler vs. polingleme
  • kesme
  • program bölümleri
  • yeniden giriş (reentrancy)
  • olaylar
  • kesme işleyicisi
  • paylaşılan kesme işleyicisi
  • kesme akışı
  • kesme kontrolü

İşin Ertelemesi (Deferring Work)

  • üst/alt yarılar
  • softirqs
  • tasklets
  • iş kuyrukları
  • iş parçacıklı kesmeler

Eşzamanlılık (Concurrency)

  • kritik bölge/bölüm
  • atomik
  • yarış durumu (race condition)
  • senkronizasyon
  • kilitleme
  • kilitleme çözümleri
  • kilitlenme (deadlock)
  • rekabet (contention)
  • neyi kilitlemeli?
  • ne kullanılabilir?
    • atomik işlemler
    • spin kilitsleri
    • okuyucu-yazar spin kilitsleri
    • semaför
    • ikili semaför
    • mutex
    • okuyucu-yazar semaförü
    • tamamlanma değişkenleri
    • sıralı kilitsler (sequential locks)
    • önceliği devre dışı bırakma
    • sıralama ve engeller (barriers)

Zaman

  • HZ
  • Jiffies
  • büyük/küçük gecikmeler
  • çekirdek zamanlayıcıları

Donanım I/O

  • I/O Portları
  • I/O Belleği
  • Kayıtlara erişirken yan etkilerle nasıl başa çıkılır?

Kullanıcı-Kişisel Arası İletişim

  • put(get)_user()
  • copy to(from)_user()
  • Çekirdek I/O
  • bellek eşleme
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Taşınabilirlik

  • kelime boyutu
  • şeffaf olmayan türler (opaque types)
  • işaretli/işaretsiz char
  • veri hizalaması
  • tamsayı terfi etme (integral promotion)
  • kod yeniden kullanımı
  • byte sıralama (endianess)
  • sistem tikleri
  • sayfa boyutu
  • talimat sıralama
  • SMP/önceliklendirme/yüksek bellek

Aksi belirtilmediği sürece bu içerik ve eğitim içeriği, Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0). lisansı altında lisanslanmıştır.

Sites Published:

United Arab Emirates - Embedded GNU/Linux Kernel Internals and Device Drivers

Qatar - Embedded GNU/Linux Kernel Internals and Device Drivers

Egypt - Embedded GNU/Linux Kernel Internals and Device Drivers

Saudi Arabia - Embedded GNU/Linux Kernel Internals and Device Drivers

South Africa - Embedded GNU/Linux Kernel Internals and Device Drivers

Brasil - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

Canada - Embedded GNU/Linux Kernel Internals and Device Drivers

中国 - 嵌入式GNU/Linux内核与设备驱动

香港 - Embedded GNU/Linux Kernel Internals and Device Drivers

澳門 - Embedded GNU/Linux Kernel Internals and Device Drivers

台灣 - Embedded GNU/Linux Kernel Internals and Device Drivers

USA - Embedded GNU/Linux Kernel Internals and Device Drivers

Österreich - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Schweiz - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Deutschland - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Czech Republic - Interní struktura jádra GNU/Linuxu a ovladače zařízení

Denmark - Embedded GNU/Linux Kernel Internals and Device Drivers

Estonia - Embedded GNU/Linux Kernel Internals and Device Drivers

Finland - Embedded GNU/Linux Kernel Internals and Device Drivers

Greece - Εσώτερο Λειτουργικό των Πυρήνων GNU/Linux και Οδηγοί Συσκευών

Magyarország - Beágyazott GNU/Linux Kernel Belső Működése és Eszközmeghajtók

Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers

Luxembourg - Embedded GNU/Linux Kernel Internals and Device Drivers

Latvia - Embedded GNU/Linux Kernel Internals and Device Drivers

España - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Italia - Interni del kernel GNU/Linux e driver di dispositivo

Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers

Nederland - Inwendige werking van de GNU/Linux-kernel en apparaatstuurprogramma's

Norway - Inne i Linux-kjernen for innbygde systemer og enhetsdrivere

Portugal - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

România - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Sverige - Inbyggd GNU/Linux-kärninterna funktioner och enhetsdrivrutiner

Türkiye - Gömülü GNU/Linux Çekirdek İç Yapıları ve Cihaz Sürücüleri

Malta - Embedded GNU/Linux Kernel Internals and Device Drivers

Belgique - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

France - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

日本 - 埋め込み GNU/Linux カーネルの内部構造とデバイスドライバ

Australia - Embedded GNU/Linux Kernel Internals and Device Drivers

Malaysia - Embedded GNU/Linux Kernel Internals and Device Drivers

New Zealand - Embedded GNU/Linux Kernel Internals and Device Drivers

Philippines - Embedded GNU/Linux Kernel Internals and Device Drivers

Singapore - Embedded GNU/Linux Kernel Internals and Device Drivers

Thailand - Embedded GNU/Linux Kernel Internals and Device Drivers

Vietnam - Kiến trúc Nhân GNU/Linux Nhúng và Trình điều khiển Thiết bị

India - Embedded GNU/Linux Kernel Internals and Device Drivers

Argentina - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Chile - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Costa Rica - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Ecuador - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Guatemala - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Colombia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

México - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Panama - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Peru - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Uruguay - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Venezuela - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Polska - Wewnętrzne mechanizmy jądra GNU/Linux i sterowniki urządzeń

United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers

South Korea - 임베디드 GNU/리눅스 커널 내부 구조 및 장치 드라이버

Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers

Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers

Bulgaria - Вградени вътрешни принципи на ядрото GNU/Linux и драйвери на устройства

Bolivia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers

Moldova - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Morocco - Embedded GNU/Linux Kernel Internals and Device Drivers

Tunisia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kuwait - Embedded GNU/Linux Kernel Internals and Device Drivers

Oman - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovakia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kenya - Embedded GNU/Linux Kernel Internals and Device Drivers

Nigeria - Embedded GNU/Linux Kernel Internals and Device Drivers

Botswana - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovenia - Embedded GNU/Linux Kernel Internals and Device Drivers

Croatia - Embedded GNU/Linux Kernel Internals and Device Drivers

Serbia - Embedded GNU/Linux Kernel Internals and Device Drivers

Bhutan - Embedded GNU/Linux Kernel Internals and Device Drivers

Nepal - Embedded GNU/Linux Kernel Internals and Device Drivers

Uzbekistan - Embedded GNU/Linux Kernel Internals and Device Drivers

US Government - Embedded GNU/Linux Kernel Internals and Device Drivers