#author("2016-08-30T01:50:36+09:00","default:afuruta","afuruta") * Linux Kernel の見取り図 [#u00e790d] #ref(Linux_bigmap_for_driver_developer.png); 標準ライブラリ |機能単位|主なヘッダやソース|備考|h |型定義|&ogfileone(include/linux/types.h);&br;|コンパイラは inttypes.h, stdint.h を提供しています。| |定数、最大、最小|&ogfileone(include/linux/kernel.h);&br;&ogfileone(include/linux/stddef.h);&br;&ogfileone(include/uapi/linux/limits.h);&br;|uapi/linux/limits.h は linux/limits.h で include します。| |構造体オフセット|&ogfileone(include/linux/stddef.h);&br;&ogfileone(include/linux/kernel.h);&br;|メンバーからそれを保持する構造体へ変換するマクロ &ogdefs(container_of(),container_of,include/linux/kernel.h); もここに含めます。| |文字|&ogfileone(include/linux/ctype.h);|| |文字列・メモリ|&ogfileone(include/linux/string.h);|| |文字列変換|&ogfileone(include/linux/kernel.h);&br;&ogfileone(include/linux/parser.h);|strtoxxx は kstrtoxxx という関数になっています。| |書式フォーマット|&ogfileone(include/linux/kernel.h);|| |計算(数値)|&ogfileone(include/linux/kernel.h);&br;&ogfile(div64.h);&br;&ogfileone(include/linux/gcd.h);&br;&ogfileone(include/linux/lcm.h);&br;&ogfileone(include/linux/log2.h);&br;&ogfileone(include/linux/math64.h);|| |計算(ビット)||| |アルゴリズム||| リンク・リスト |機能単位|主なヘッダやソース|備考|h |リスト操作|&ogfileone(include/linux/list.h);|リンク・リスト・メンバーからそれを保持する構造体へ変換するマクロ &ogdefs(list_entry(),list_entry,include/linux/list.h); は &ogdefs(container_of(),container_of,include/linux/kernel.h); と同じです。リスト操作に関連するならば &ogdefs(list_entry(),list_entry,include/linux/list.h); を使用して下さい。| アトミック操作 |機能単位|主なヘッダやソース|備考|h |整数||| |ビット||| 排他制御 |機能単位|主なヘッダやソース|備考|h |Spin Lock||| |Semaphore||| 同期制御、状態変化待ち |機能単位|主なヘッダやソース|h |Event|| 割り込み処理 |機能単位|主なヘッダやソース|備考|h |IRQ class||| 時間待ち、タイマー |機能単位|主なヘッダやソース|備考|h |Sleep||| |Timer||| メモリ確保 |機能単位|主なヘッダやソース|備考|h |任意サイズ|&ogfileone(include/linux/slab.h);|| |ページ単位|&ogfileone(include/linux/gfp.h);&br;&ogfileone(include/linux/mm.h);|ページ確保: gfp.h &ogdefs(alloc_page(),alloc_page,gfp.h); 、ページ・アドレス取得: mm.h &ogdefs(page_address(),page_address,mm.h); となっています。| 論理-物理マップ、DMA 転送、コピー |機能単位|主なヘッダやソース|h |User - Kernel Copy|| |Virt - Phy map convert|| |DMA map Scatter Gather|| スレッド・軽量処理 |機能単位|主なヘッダやソース|h |kthread|| |work queue|| |tasklet|| 接続切断通知 |機能単位|主なヘッダやソース|h |UEvent|| |switch (Android)|| リファレンスカウンタ |機能単位|主なヘッダやソース|h |kref|| Kernel Object |機能単位|主なヘッダやソース|備考|h |KObject||| |KSet||| ノード形成 |機能単位|主なヘッダやソース|備考|h |VFS(character)||| |VFS(block)||| |procfs||| |sysfs||| |debugfs||| モジュールロード、アンロード、シンボル解決 |機能単位|主なヘッダやソース|備考|h |Module insmod rmmod||| |Symbol lookup||| 基本的なドライバ |機能単位|主なヘッダやソース|h |Null, Zero, Full, Mem drivers|| 基本的なファイルシステムノード |機能単位|主なヘッダやソース|備考|h |pipe||| |eventfd||| |signalfd||| |timerfd|||