Linux Kernel の見取り図

Linux_bigmap_for_driver_developer.png

標準ライブラリ

機能単位主なヘッダやソース備考
型定義include/linux/types.h
コンパイラは inttypes.h, stdint.h を提供しています。
定数、最大、最小include/linux/kernel.h
include/linux/stddef.h
include/uapi/linux/limits.h
include/linux/sizes.h
uapi/linux/limits.h は linux/limits.h で include します。
構造体オフセットinclude/linux/stddef.h
include/linux/kernel.h
メンバーからそれを保持する構造体へ変換するマクロ container_of() もここに含めます。
文字include/linux/ctype.h
文字列・メモリinclude/linux/string.h
include/linux/glob.h
include/linux/string_helpers.h
include/linux/textsearch.h
include/linux/textsearch_fsm.h
include/linux/ihex.h
文字列変換include/linux/kernel.h
include/linux/parser.h
strtoxxx は kstrtoxxx という関数になっています。
書式フォーマットinclude/linux/kernel.h
計算(数値)include/linux/kernel.h
div64.h
include/linux/gcd.h
include/linux/lcm.h
include/linux/log2.h
include/linux/math64.h
include/linux/mpi.h
計算(ビット)include/linux/bcd.h
include/linux/bitops.h
asm/bitops.h
include/linux/bitrev.h
include/linux/bitmap.h
include/asm-generic/bitops/const_hweight.h
include/asm-generic/bitops/ffs.h
include/asm-generic/bitops/fls.h
include/asm-generic/bitops/find.h
include/linux/crc-ccitt.h
include/linux/crc-itu-t.h
include/linux/crc-t10dif.h
include/linux/crc16.h
include/linux/crc32.h
include/linux/crc32c.h
include/linux/crc7.h
include/linux/crc8.h
asm/bitops.h はプロセッサ毎に定義されています。asm/bitops.h は linux/bitops.h で include されます。直接 include しない方が良いでしょう。
asm-generic/bitops/const_hweight.h は linux/bitops.h を include すると取り込まれます。ビットを数え上げる計算です。ファイル名に const がついていますが、即値と変数両方に使えるマクロです。gcc の組み込み関数 __builtin_constant_p() を使用して静的な定数と変数に対する計算をそれぞれ最適化しています。
エンディアン変換include/linux/byteorder/generic.h
include/linux/swab.h
linux/byteorder/generic.h は関数一覧として挙げてあります。実際は各アーキテクチャに最適な変換処理を利用するので asm/byteorder.h をインクルードします。
アルゴリズムinclude/linux/average.h
include/linux/bch.h
include/linux/bpf.h
include/linux/bsearch.h
include/linux/btree.h
include/linux/circ_buf.h
include/linux/cordic.h
include/linux/plist.h
include/linux/sort.h
include/linux/range.h
include/linux/rbtree.h
include/linux/rslib.h
include/linux/crypto.h
include/linux/cryptohash.h
include/linux/cryptouser.h
include/linux/hash.h
include/linux/hashtable.h
include/linux/jhash.h
圧縮include/linux/lz4.h
include/linux/lzo.h
include/linux/xz.h
include/linux/zlib.h

リンク・リスト

機能単位主なヘッダやソース備考
リスト操作include/linux/list.hリンク・リスト・メンバーからそれを保持する構造体へ変換するマクロ list_entry()container_of() と同じです。リスト操作に関連するならば list_entry() を使用して下さい。

アトミック操作

機能単位主なヘッダやソース備考
整数include/linux/atomic.h
asm/atomic.h
asm/atomic.h はプロセッサ毎に定義されています。asm/atomic.h は linux/atomic.h で include されます。直接 include しない方が良いでしょう。
ビットinclude/asm/bitops.hasm/bitops.h はプロセッサ毎に定義されています。ヘッダファイルに atomic かどうか書かれています。atomic な関数・マクロは set_bit(), clear_bit(), clear_bit_unlock(), change_bit(), test_and_set_bit(), test_and_set_bit_lock(), test_and_clear_bit(), test_and_change_bit(), test_bit() atomic 関数と混在可 です。asm/bitops.h は linux/bitops.h で include されます。直接 include しない方が良いでしょう。
バリアinclude/asm/barrier.h

排他制御

機能単位主なヘッダやソース備考
Spin Lock
Semaphore

同期制御、状態変化待ち

機能単位主なヘッダやソース
Event

割り込み処理

機能単位主なヘッダやソース備考
IRQ class

時間待ち、タイマー

機能単位主なヘッダやソース備考
Sleep
Timer

時刻

機能単位主なヘッダやソース備考
jiffies
Time

メモリ確保

機能単位主なヘッダやソース備考
任意サイズinclude/linux/slab.h
ページ単位include/linux/gfp.h
include/linux/mm.h
ページ確保: gfp.h alloc_page() 、ページ・アドレス取得: mm.h page_address() となっています。

論理-物理マップ、DMA 転送、コピー

機能単位主なヘッダやソース
User - Kernel Copy
Virt - Phy map convert
DMA map Scatter Gather

スレッド・軽量処理

機能単位主なヘッダやソース
kthread
work queue
tasklet

接続切断通知

機能単位主なヘッダやソース
UEvent
switch (Android)

リファレンスカウンタ

機能単位主なヘッダやソース
kref

Kernel Object

機能単位主なヘッダやソース備考
KObject
KSet

ノード形成

機能単位主なヘッダやソース備考
VFS(character)
VFS(block)
procfs
sysfs
debugfs

モジュールロード、アンロード、シンボル解決

機能単位主なヘッダやソース備考
Module insmod rmmod
Symbol lookup

基本的なドライバ

機能単位主なヘッダやソース
Null, Zero, Full, Mem drivers

基本的なファイルシステムノード

機能単位主なヘッダやソース備考
pipe
eventfd
signalfd
timerfd

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS