お問い合わせ

コース概要

イントロダクション

  • GNU/Linux の歴史概要
  • ライセンス
  • カーネルのバージョン管理
  • リリースサイクル
  • カーネルツリー
  • メインライン
  • カーネル空間とユーザー空間
  • 仕組みとポリシー
  • カーネルドライバの代替手段
  • RTOS と Linux

メモリ管理

  • 仮想メモリと物理メモリ
  • カーネル内のメモリ割り当て
  • ページ
  • ゾーン
  • API
  • スlab (Slab)

カーネルパッチ

  • ライフサイクル
  • Git
  • カーネルソース
  • パッチの作成
  • パッチのチェック
  • パッチの修正
  • パッチの提出
  • 監査済みコード

カーネルモジュール

  • カーネルソースの取得
  • 設定/ビルド/インストール
  • デバイスドライバ(静的リンク、ランタイムロード)
  • init/exit
  • ライセンス
  • EXPORT_SYMBOL(GPL)
  • 外部ツリーの Makefile
  • module-init-tools
  • カーネルツリー内のモジュール
  • Kconfig
  • パラメータの受け渡し
  • Sparse

キャラクタデバイスドライバ

  • アーキテクチャ
  • ユーザー/カーネルインターフェース
  • I/O サブシステム
  • VFS (Virtual File System)
  • sysfs (デバイス、バス、ドライバ、クラス)、
  • kobject/ktype/kset
  • Linux カーネルドライバモデル
  • デバイスファイル
  • キャラクタドライバー

    • 初期化
    • 登録
    • open, release
    • cdev, cdev_add, cdev_del,...
    • メジャー番号/マイナー番号
    • udev, udevmonitor, udevadm

キャラクタデバイスドライバの応用操作

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • ユーザー空間 API
  • カーネル空間 API
  • プロセスのライフサイクル
  • スリーピング/ブロック
  • スリーピングとウェイクアップ
  • ウェイトキュー
  • 轟音群問題 (Thundering herd)
  • poll/select

カーネルデバッグ

  • デバッグ
  • カーネルのデバッグ方法

    • Git を使った二分探索によるデバッグ
    • カーネルによるデバッグサポート
    • printk, syslogd, klogd, ロギングレベル, レートリミット, デバッグレベル, 選択的なサブシステムのデバッグ
    • debugfs からのクエリによるデバッグ
    • Oops のデバッグ、Oops の発生強制
    • Magic SysRq キー
    • kgdb/kdb
    • JTAG

トレース

  • gcov
  • lcov
  • oprofile
  • ftrace

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

割り込み (Interrupts)

  • 割り込みとポーリング
  • 割り込み
  • プログラムのセクション
  • 再入可能性
  • イベント
  • 割り込みハンドラ
  • 共有割り込みハンドラ
  • 割り込みフロー
  • 割り込み制御

作業のDeferred (Deferring Work)

  • トップハーフ/ボトムハーフ
  • ソフトウェア割り込み (Softirqs)
  • タスクレット (Tasklets)
  • ワークキュー (Work queues)
  • スレッド化された割り込み

並行処理

  • クリティカルリージョン/セクション
  • アトミック演算
  • レースコンディション
  • 同期
  • ロッキング
  • ロッキングの解決策
  • デッドロック
  • コンテンション
  • 何をロックすべきか?
  • 何を利用できるか?

    • アトミック操作
    • スピンロック
    • リーダーライタースピンロック
    • セマフォ
    • バイナリセマフォ
    • ミューテックス
    • リーダーライターセマフォ
    • 完了変数 (Completion variables)
    • シーケンシャルロック
    • プリエンプションの無効化
    • 順序保証とバリアー

時間

  • HZ
  • ジフリーズ (Jiffies)
  • 長時間/短時間のディレイ
  • カーネルタイマー

ハードウェア I/O

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

ユーザーとカーネル間の通信

  • put/get_user()
  • copy_to_user()/copy_from_user()
  • カーネル I/O
  • メモリマップ
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • Netlink
  • ioctl

ポータビリティ

  • ワードサイズ
  • オpaqueな型
  • 符号付き/符号なし文字
  • データのアラインメント
  • 整数拡張
  • コードの再利用
  • エンディアン
  • システムティック
  • ページサイズ
  • 命令の順序付け
  • SMP/プリエンプション/ハイメモリ

特に注釈がない限り、本コンテンツおよびコースアウトラインはCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)の下でライセンスされています。

要求

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

参加者の人数


参加者1人あたりの価格

お客様の声 (3)

今後のコース

関連カテゴリー