コース概要

はじめに

  • GNU/Linux の歴史の簡単な紹介
  • ライセンス
  • カーネルバージョン管理
  • リリースサイクル
  • カーネルツリー
  • mainline
  • カーネル vs. ユーザースペース
  • メカニズム vs. 方針
  • カーネルドライバの代替手段
  • RTOS vs. Linux

メモリ管理

  • 仮想メモリと物理メモリ
  • カーネルでのメモリアロケーション
  • ページ
  • ゾーン
  • API
  • slab

カーネルパッチ

  • ライフサイクル
  • git
  • カーネルソース
  • パッチの作成
  • パッチの確認
  • パッチの修正
  • パッチの送信
  • 审査済みコード

カーネルモジュール

  • カーネルソースの取得
  • 設定/ビルド/インストール
  • デバイスドライバ(静的にリンク、ランタイムでロード)
  • 初期化/終了
  • ライセンス
  • EXPORT_SYMBOL_GPL
  • 外部の Makefile
  • module-init-tools
  • カーネルツリー内のモジュール
  • Kconfig
  • パラメータの渡し方
  • sparse

文字デバイスドライバ

  • アーキテクチャ
  • ユーザー/カーネルインターフェース
  • I/O サブシステム
  • VFS
  • sysfs(デバイス、バス、ドライバ、クラス)
  • kobject/ktype/kset
  • Linux カーネルドライバモデル
  • デバイスファイル
  • 文字デバイスドライバ
    • 初期化
    • 登録
    • open, release
    • cdev, cdev add, cdev del, etc.
    • メジャーナンバー/マイナーナンバー
    • udev, udevmonitor, udevadm

高度な文字デバイスドライバ操作

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • ユーザースペース API
  • カーネルスペース API
  • プロセスのライフサイクル
  • スリープ/ブロッキング
  • スリープ/ウェイクアップ
  • wait queue
  • thundering herd
  • poll/select

カーネルデバッグ

  • デバッグ
  • カーネルのデバッグ
    • git でのバイナリサーチ
    • カーネルからのデバッグサポート
    • printk, syslogd, klogd, ログレベル, レート制限, デバッグレベル, 選択的なサブシステムのデバッグ
    • debugfs のクエリによるデバッグ
    • oops デバッグ, oops のアサーション
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

トレーシング

  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamic tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

インタラプト

  • インタラプト vs. ポーリング
  • インタラプト
  • プログラムセクション
  • 再入性
  • イベント
  • インタラプトハンドラ
  • 共有インタラプトハンドラ
  • インタラプトフロー
  • インタラプト制御

非同期処理

  • 上下半分
  • softirqs
  • tasklets
  • ワークキュー
  • スレッディングインタラプト

並行処理

  • クリティカルセクション
  • 原子操作
  • レースコンディション
  • 同期
  • ロッキング
  • ロッキングの解決策
  • デッドロック
  • コンテンド
  • 何をロックするか?
  • 使用できるものは何ですか?
    • 原子操作
    • スピンロック
    • 読者-ライタースピンロック
    • セマフォ
    • 二値セマフォ
    • ミューテックス
    • 読者-ライターセマフォ
    • 完了変数
    • 逐次ロック
    • プリエンプションの無効化
    • 順序とバリア

時間管理

  • HZ
  • Jiffies
  • 大きな/小さな遅延
  • カーネルタイマ

ハードウェア I/O

  • I/O ポート
  • I/O メモリ
  • レジスタアクセス時の副作用の対処法

ユーザー-カーネル通信

  • put(get)_user()
  • copy to(from)_user()
  • カーネル I/O
  • メモリマッピング
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

ポータビリティ

  • ウォードサイズ
  • 不透明な型
  • 符号あり/なしの char
  • データアラインメント
  • 整数昇格
  • コードの再利用
  • エンディアン性
  • システムティック
  • ページサイズ
  • 命令順序
  • SMP/プリエンプション/高メモリ

別途明記されていない限り、コンテンツおよびこのコース概要は クリエイティブコモンズ 表示-非営利-継承 4.0 国際 (CC BY-NC-SA 4.0) の下にライセンスされています。

要求

  • GNU/Linux システムのエンドユーザーとしての基本的な使用経験
  • コマンドラインシェルの基本的な使用経験
  • ユーザースペース/アプリケーション開発の基本的な知識
  • 中級レベルの C 言語プログラミングスキル
  • 事前に 組み込み GNU/Linux システムアーキテクチャ を受講していること(強く推奨!)または、そこで概説されているトピックについて十分な理解があること
 35 時間

参加者の人数


参加者1人当たりの料金

お客様の声 (5)

今後のコース

関連カテゴリー