Course Code: ldd
Duration: 35 hours
Prerequisites:

  • Kebiasaan dasar menggunakan sistem GNU/Linux sebagai pengguna akhir
  • Kebiasaan dasar dengan shell baris perintah
  • Pengetahuan dasar tentang pengembangan ruang pengguna (user space)/aplikasi
  • Pengetahuan pemrograman C tingkat menengah
  • Harus telah menghadiri Arsitektur Sistem GNU/Linux Tertanam sebelumnya (sangat disarankan!) dan/atau memiliki pemahaman yang baik tentang topik-topik yang dijelaskan di sana

Overview:

Deskripsi

Pelatihan 5 hari ini menggunakan latihan praktis dikombinasikan dengan instruksi untuk mengilustrasikan konsep inti GNU/Linux dan pengembangan driver perangkat. Pelatihan ini dirancang untuk membuat Anda cepat mahir. Kami menjelaskan proses, konsep, dan perintah yang diperlukan untuk menulis driver perangkat GNU/Linux melalui kombinasi teori dan pelatihan langsung di tempat kerja.

Jangan menemukan kembali roda, tetapi belajarlah dari pelatih yang berpengalaman dan bawa pulang pengetahuan yang dapat digunakan serta kemampuan untuk memanfaatkannya secara efektif dalam proyek pengembangan tertanam Anda sendiri.

Siapa yang harus hadir?

Orang-orang yang tertarik atau ditugaskan untuk mengembangkan atau mengevaluasi pengembangan driver perangkat GNU/Linux, seperti insinyur perangkat lunak, insinyur lapangan, manajer (proyek), dan insinyur perangkat keras.

Course Outline:

Pendahuluan

  • sejarah singkat GNU/Linux
  • lisensi
  • penomoran versi kernel
  • siklus rilis
  • pohon kernel
  • jalur utama (mainline)
  • kernel vs ruang pengguna
  • mekanisme vs kebijakan
  • alternatif driver kernel
  • RTOS vs Linux

Manajemen Memori

  • memori virtual vs memori fisik
  • alokasi memori di kernel
  • halaman (pages)
  • zona
  • API
  • slab

Patch Kernel

  • siklus hidup
  • git
  • sumber kernel
  • membuat patch
  • memeriksa patch
  • memperbaiki patch
  • mengirimkan patch
  • kode yang diaudit

Modul Kernel

  • mengambil sumber kernel
  • mengonfigurasi/membangun/menginstal
  • driver perangkat (terkompilasi statis, dimuat saat runtime)
  • init/exit
  • lisensi
  • EXPORT_SYMBOL GPL
  • makefile luar pohon (out of tree)
  • alat modul-init
  • modul di dalam pohon kernel
  • Kconfig
  • pengiriman parameter
  • sparse

Driver Karakter

  • arsitektur
  • antarmuka pengguna/kernel
  • sub-sistem I/O
  • VFS
  • sysfs (perangkat, bus, driver, kelas),
  • kobject/ktype/kset
  • model driver kernel Linux
  • berkas perangkat
  • driver karakter

    • inisialisasi
    • registrasi
    • buka, tutup
    • cdev, cdev add, cdev del,...
    • angka major/minor
    • udev, udevmonitor, udevadm

Operasi Driver Karakter Lanjutan

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API ruang pengguna
  • API ruang kernel
  • siklus hidup proses
  • tertidur/memblokir
  • tertidur/bangun
  • antrian tunggu (wait queue)
  • thundering herd
  • poll/select

Debugging Kernel

  • debugging
  • debugging kernel

    • pencarian biner dengan git
    • dukungan debugging dari kernel
    • printk syslogd, klogd, tingkat log, batas laju, tingkat debug, subsystem debug selektif
    • debugging dengan querying debugfs
    • debugging oops, asserting oops
    • Tombol Magic SysRq
    • kgdb/kdb
    • JTAG

Pelacakan (Tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace

    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamic tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interupsi

  • interupsi vs polling
  • interupsi
  • bagian program
  • reentrancy
  • peristiwa
  • handler interupsi
  • handler interupsi bersama
  • alur interupsi
  • kontrol interupsi

Penundaan Pekerjaan (Deferring Work)

  • bagian atas/bawah (top/bottom halves)
  • softirq
  • tasklets
  • antrian kerja (work queues)
  • interupsi beruntun (threaded interrupts)

Konkurensi (Concurrency)

  • area/bagian kritis (critical region/section)
  • atomik
  • kondisi balapan (race condition)
  • sinkronisasi
  • penguncian (locking)
  • solusi penguncian
  • kebuntuan (deadlock)
  • kontensi (contention)
  • apa yang harus dikunci?
  • apa yang bisa digunakan?

    • operasi atomik
    • spin lock
    • spin lock pembaca-penulis
    • semaphore
    • binary semaphore
    • mutex
    • semaphore pembaca-penulis
    • variabel penyelesaian (completion variables)
    • lock sekuensial
    • menonaktifkan preempsi
    • pemesanan dan penghalang (barriers)

Waktu

  • HZ
  • Jiffies
  • penundaan besar/kecil
  • timer kernel

I/O Perangkat Keras

  • Port I/O
  • Memori I/O
  • Bagaimana menangani efek samping saat mengakses register?

Komunikasi User-Kernel

  • put(get)_user()
  • copy to(from)_user()
  • I/O Kernel
  • pemetaan memori
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilitas

  • ukuran kata (word size)
  • tipe tak transparan (opaque types)
  • karakter signed/unsigned
  • penataan data (data alignment)
  • promosi integral
  • penggunaan ulang kode
  • endianess
  • tick sistem
  • ukuran halaman
  • pemesanan instruksi
  • SMP/preempsi/memori tinggi

Kecuali jika dicantumkan lain, konten dan silabus kursus ini dilisensikan di bawah Atribusi-NonKomersial-ShareAlike 4.0 Internasional (CC BY-NC-SA 4.0).

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