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.
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
香港 - 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