BigPicture
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* Linux kernel の見取り図 [#u00e790d]
#ref(Linux_bigmap_for_driver_developer.png);
**標準ライブラリ [#d6fdbada]
Linux kernel で提供される標準ライブラリはおおよそアプリケ...
要注意なことは、アプリケーションプログラムでは普通に除算 ...
|機能単位|主なヘッダやソース|備考|h
|型定義|&ogfileone(linux/types.h,include/linux/types.h);&...
|定数、最大、最小|&ogfileone(linux/kernel.h,include/linux...
|構造体オフセット|&ogfileone(linux/stddef.h,include/linux...
|文字|&ogfileone(linux/ctype.h,include/linux/ctype.h);|li...
|文字列・メモリ|&ogfileone(linux/string.h,include/linux/s...
|文字列変換|&ogfileone(linux/kernel.h,include/linux/kerne...
|書式フォーマット|&ogfileone(linux/kernel.h,include/linux...
|計算(数値)|&ogfileone(linux/kernel.h,include/linux/kerne...
|計算(ビット)|&ogfileone(linux/bcd.h,include/linux/bcd.h)...
|エンディアン変換|&ogfileone(linux/byteorder/generic.h,in...
|アルゴリズム|&ogfileone(linux/average.h,include/linux/av...
|圧縮|&ogfileone(linux/lz4.h,include/linux/lz4.h);&br;&og...
**リンクリスト [#t0fd2a66]
双方向リンクリストを操作するマクロです。リストを辿るルー...
|機能単位|主なヘッダやソース|備考|h
|リスト操作|&ogfileone(linux/list.h,include/linux/list.h)...
**アトミック操作 [#r3bb15b5]
整数とビットに対するアトミック操作の機能群です。Tasklet, ...
|機能単位|主なヘッダやソース|備考|h
|整数|&ogfileone(linux/atomic.h,include/linux/atomic.h);&...
|ビット|&ogfile(asm/bitops.h,include/asm/bitops.h);|asm/b...
**バリア指示・同期 [#u39f4313]
バリア指示 &ogdefs(barrier(),barrier); とバリア同期 &ogde...
バリア同期を行ったのにデバイスの制御が不完全になっている...
#textbox(note,滞留したバストランザクションの掃き出し){{
プラットホームのデータシートを参照すれば何らかの方法でバ...
}}
|機能単位|主なヘッダやソース|備考|h
|バリア|&ogfile(linux/compiler.h,include/linux/compiler.h...
**排他制御 [#t1c4e07e]
複数の処理を一貫して行いたい場合に使う関数とマクロ群です...
Semaphore, Mutex は呼び出したプロセスやスレッドなどを中断...
|機能単位|主なヘッダやソース|備考|h
|Spin Lock|&ogfileone(linux/spinlock.h,include/linux/spin...
|Semaphore|&ogfileone(linux/semaphore.h,include/linux/sem...
|Mutex|&ogfileone(linux/mutex.h,include/linux/mutex.h);|&...
**同期制御、状態変化待ち [#ucd81709]
条件が成立するまで待つ機能、完了を待つ機能があります。別...
|機能単位|主なヘッダやソース|備考|h
|Condition|&ogfileone(linux/wait.h,include/linux/wait.h);...
|Completion|&ogfileone(linux/completion.h,include/linux/c...
**割り込みハンドラ登録・設定 [#efcb2796]
デバイスから来る割り込みを受ける関数を登録するための定義...
|機能単位|主なヘッダやソース|備考|h
|IRQ class|&ogfileone(linux/interrupt.h,include/linux/int...
**時間待ち、タイマー [#mea3030a]
制御対象のデバイスはプロセッサの処理速度に比べ動作が遅い...
|機能単位|主なヘッダやソース|備考|h
|Sleep|&ogfileone(linux/delay.h,include/linux/delay.h);|s...
|Delay|&ogfileone(linux/delay.h,include/linux/delay.h);|d...
|Timer|&ogfileone(linux/timer.h,include/linux/timer.h);&b...
|Delayed Work|&ogfileone(linux/workqueue.h,include/linux/...
**時刻 [#zeb6d76b]
kernel 内で刻まれている時刻を取得する機能群です。jiffies ...
|機能単位|主なヘッダやソース|備考|h
|jiffies|&ogfileone(linux/jiffies.h,include/linux/jiffies...
|Time|&ogfileone(linux/time.h,include/linux/time.h);&br;&...
**メモリ確保 [#qd68fabb]
アプリケーションで使用している malloc(), free() の代わり...
生成したデバイスコンテキスト、デバイスに対するコマンドパ...
|機能単位|主なヘッダやソース|備考|h
|任意サイズ|&ogfileone(linux/slab.h,include/linux/slab.h)...
|ページ単位|&ogfileone(linux/gfp.h,include/linux/gfp.h);&...
|DMA 領域確保|&ogfileone(linux/dma-mapping.h,include/linu...
**仮想-物理アドレス・マップ、DMA 転送、コピー [#x5eb79c6]
おそらく DMA 転送を主導するようなドライバを書く機会は少な...
|機能単位|主なヘッダやソース|備考|h
|user space - kernel copy|&ogfile(asm/uaccess.h);&br;&ogf...
|Virt - Phy map convert|&ogfile(asm/io.h);&br;&ogfile(lin...
|DMA mapping, Address convert, Scatter Gather|&ogfile(asm...
**メモリ・マップド・デバイス・アクセス [#k6e99d1c]
SoC 内蔵の機能ブロック、PCI 接続のカードに乗っているデバ...
|機能単位|主なヘッダやソース|備考|h
|Read-Write|&ogfile(asm/io.h);|ドキュメントは &ogfiledire...
**スレッド・軽量処理 [#g22457a0]
「ユーザーランドの動作と独立して kernel 内でデバイスの変...
スレッドか work queue か?work queue を使う方が実装量が少...
ポーリング処理が必要なデバイスであれば、kthread を使うの...
デバイスを制御するのに複数のステップを必要とする場合も、k...
|機能単位|主なヘッダやソース|備考|h
|kthread|&ogfileone(linux/kthread.h,include/linux/kthread...
|work queue|&ogfileone(linux/workqueue.h,include/linux/wo...
|tasklet|&ogfileone(linux/interrupt.h,include/linux/inter...
**接続切断通知 [#b84cb6da]
デバイスの状態変化を通知する uevent とコネクタの状態変化...
uevent は &ogdefs(struct device,device,include/linux/devi...
External Connector (extcon) は Android 向けに拡張された L...
|機能単位|主なヘッダやソース|備考|h
|uevent|&ogfileone(linux/kobject.h,include/linux/kobject....
|External Connector (Switch)|&ogfileone(linux/extcon.h,in...
**リファレンスカウンタ [#j651f123]
kernel API の中で *_alloc(), *_get(), *_put() のという接...
|機能単位|主なヘッダやソース|備考|h
|kref|&ogfileone(linux/kref.h,include/linux/kref.h);|ドキ...
**Kernel Object [#a6b0c156]
|機能単位|主なヘッダやソース|備考|h
|KObject, Kset|&ogfileone(linux/kobject.h,include/linux/k...
**ノード形成 [#x0e153c6]
典型的なデバイスドライバは read(), write(), ioctl(), poll...
新しい方法、あるいは比較的軽量な方法として sysfs に(/sys ...
|機能単位|主なヘッダやソース|備考|h
|VFS(character)|&ogfileone(linux/fs.h,include/linux/fs.h)...
|VFS(block)|&ogfileone(linux/fs.h,include/linux/fs.h);&br...
|SCSI|&ogfileone(scsi/scsi.h,include/scsi/scsi.h);&br;&og...
|procfs|&ogfileone(linux/proc_fs.h,include/linux/proc_fs....
|sysfs|&ogfileone(linux/sysfs.h,include/linux/sysfs.h);&b...
|debugfs|&ogfileone(linux/debugfs.h,include/linux/debugfs...
**モジュールロード、アンロード、シンボル解決 [#w0fcc01b]
恐らくデバイスドライバ自身がここにある API を使うことは稀...
|機能単位|主なヘッダやソース|備考|h
|Module insmod rmmod|&ogfileone(kernel/module.c);|System ...
|Symbol lookup|&ogfileone(linux/kallsyms.h,include/linux/...
**基本的なドライバ [#k914b584]
/dev/null, /dev/zero, /dev/full はハードウエアとして存在...
|機能単位|主なヘッダやソース|備考|h
|Null, Zero, Full, Mem drivers|&ogfileone(drivers/char/me...
**基本的なファイルシステムノード [#r8e37cd7]
select(poll), ioctl を実装するのに参考になるソースを上げ...
|機能単位|主なヘッダやソース|備考|h
|pipe|&ogfileone(fs/pipe.c);|&ogdefs(poll(select),pipe_po...
|eventfd|&ogfileone(fs/eventfd.c);|eventfd, signalfd, tim...
|signalfd|&ogfileone(fs/signalfd.c);|アプリケーション向け...
|timerfd|&ogfileone(fs/timerfd.c);|アプリケーション向けの...
**デバイス登録 [#a249e835]
Linux ではデバイスとドライバをそれぞれ管理しています。シ...
組み込み開発で良く扱うバスとそこに接続するデバイスの登録...
|機能単位|主なヘッダやソース|備考|h
|platform|&ogfileone(linux/platform_device.h,include/linu...
|I2C|&ogfileone(linux/i2c.h,include/linux/i2c.h);|I2C 関...
|PCI|&ogfileone(linux/pci.h,include/linux/pci.h);|PCI 接...
|SDIO|&ogfileone(linux/mmc/host.h,include/linux/mmc/host....
|SPI|&ogfileone(linux/spi/spi.h,include/linux/spi/spi.h);...
|USB|&ogfileone(linux/usb.h,include/linux/usb.h);&br;&ogf...
**ドライバ登録 [#z5e89b95]
ドライバ登録はデバイス登録と対になります。デバイス登録の...
|機能単位|主なヘッダやソース|備考|h
|platform|&ogfileone(linux/platform_device.h,include/linu...
|I2C|&ogfileone(linux/i2c.h,include/linux/pci.h);|ドキュ...
|PCI|&ogfileone(linux/pci.h,include/linux/pci.h);|ドキュ...
|SDIO|&ogfileone(linux/mmc/mmc.h,include/linux/mmc/mmc.h)...
|SPI|&ogfileone(linux/spi/spi.h,include/linux/spi/spi.h);...
|USB|&ogfileone(linux/usb.h,include/linux/usb.h);|ドキュ...
**クラスデバイス登録 [#s9c642a4]
クラスデバイスは種類別に分類されたデバイスです。種類は発...
ドライバにより機能ブロックやチップが確かに存在し、少なく...
汎用的な API は複雑に見えるかもしれません。その複雑さを追...
新しく &ogfileone(Devres - Managed Device Resource,Docume...
|機能単位|主なヘッダやソース|備考|h
|Input, HID|&ogfileone(linux/input.h,include/linux/input....
|LED|&ogfileone(linux/leds.h,include/linux/leds.h);|汎用...
|USB (汎用)|&ogfileone(linux/usb.h,include/linux/usb.h);|...
|misc|&ogfileone(linux/miscdevice.h,include/linux/miscdev...
#textbox(note,Class device は他にもたくさんあります){{
Class device は他にも沢山の種類が存在します。&span(Consol...
}}
終了行:
* Linux kernel の見取り図 [#u00e790d]
#ref(Linux_bigmap_for_driver_developer.png);
**標準ライブラリ [#d6fdbada]
Linux kernel で提供される標準ライブラリはおおよそアプリケ...
要注意なことは、アプリケーションプログラムでは普通に除算 ...
|機能単位|主なヘッダやソース|備考|h
|型定義|&ogfileone(linux/types.h,include/linux/types.h);&...
|定数、最大、最小|&ogfileone(linux/kernel.h,include/linux...
|構造体オフセット|&ogfileone(linux/stddef.h,include/linux...
|文字|&ogfileone(linux/ctype.h,include/linux/ctype.h);|li...
|文字列・メモリ|&ogfileone(linux/string.h,include/linux/s...
|文字列変換|&ogfileone(linux/kernel.h,include/linux/kerne...
|書式フォーマット|&ogfileone(linux/kernel.h,include/linux...
|計算(数値)|&ogfileone(linux/kernel.h,include/linux/kerne...
|計算(ビット)|&ogfileone(linux/bcd.h,include/linux/bcd.h)...
|エンディアン変換|&ogfileone(linux/byteorder/generic.h,in...
|アルゴリズム|&ogfileone(linux/average.h,include/linux/av...
|圧縮|&ogfileone(linux/lz4.h,include/linux/lz4.h);&br;&og...
**リンクリスト [#t0fd2a66]
双方向リンクリストを操作するマクロです。リストを辿るルー...
|機能単位|主なヘッダやソース|備考|h
|リスト操作|&ogfileone(linux/list.h,include/linux/list.h)...
**アトミック操作 [#r3bb15b5]
整数とビットに対するアトミック操作の機能群です。Tasklet, ...
|機能単位|主なヘッダやソース|備考|h
|整数|&ogfileone(linux/atomic.h,include/linux/atomic.h);&...
|ビット|&ogfile(asm/bitops.h,include/asm/bitops.h);|asm/b...
**バリア指示・同期 [#u39f4313]
バリア指示 &ogdefs(barrier(),barrier); とバリア同期 &ogde...
バリア同期を行ったのにデバイスの制御が不完全になっている...
#textbox(note,滞留したバストランザクションの掃き出し){{
プラットホームのデータシートを参照すれば何らかの方法でバ...
}}
|機能単位|主なヘッダやソース|備考|h
|バリア|&ogfile(linux/compiler.h,include/linux/compiler.h...
**排他制御 [#t1c4e07e]
複数の処理を一貫して行いたい場合に使う関数とマクロ群です...
Semaphore, Mutex は呼び出したプロセスやスレッドなどを中断...
|機能単位|主なヘッダやソース|備考|h
|Spin Lock|&ogfileone(linux/spinlock.h,include/linux/spin...
|Semaphore|&ogfileone(linux/semaphore.h,include/linux/sem...
|Mutex|&ogfileone(linux/mutex.h,include/linux/mutex.h);|&...
**同期制御、状態変化待ち [#ucd81709]
条件が成立するまで待つ機能、完了を待つ機能があります。別...
|機能単位|主なヘッダやソース|備考|h
|Condition|&ogfileone(linux/wait.h,include/linux/wait.h);...
|Completion|&ogfileone(linux/completion.h,include/linux/c...
**割り込みハンドラ登録・設定 [#efcb2796]
デバイスから来る割り込みを受ける関数を登録するための定義...
|機能単位|主なヘッダやソース|備考|h
|IRQ class|&ogfileone(linux/interrupt.h,include/linux/int...
**時間待ち、タイマー [#mea3030a]
制御対象のデバイスはプロセッサの処理速度に比べ動作が遅い...
|機能単位|主なヘッダやソース|備考|h
|Sleep|&ogfileone(linux/delay.h,include/linux/delay.h);|s...
|Delay|&ogfileone(linux/delay.h,include/linux/delay.h);|d...
|Timer|&ogfileone(linux/timer.h,include/linux/timer.h);&b...
|Delayed Work|&ogfileone(linux/workqueue.h,include/linux/...
**時刻 [#zeb6d76b]
kernel 内で刻まれている時刻を取得する機能群です。jiffies ...
|機能単位|主なヘッダやソース|備考|h
|jiffies|&ogfileone(linux/jiffies.h,include/linux/jiffies...
|Time|&ogfileone(linux/time.h,include/linux/time.h);&br;&...
**メモリ確保 [#qd68fabb]
アプリケーションで使用している malloc(), free() の代わり...
生成したデバイスコンテキスト、デバイスに対するコマンドパ...
|機能単位|主なヘッダやソース|備考|h
|任意サイズ|&ogfileone(linux/slab.h,include/linux/slab.h)...
|ページ単位|&ogfileone(linux/gfp.h,include/linux/gfp.h);&...
|DMA 領域確保|&ogfileone(linux/dma-mapping.h,include/linu...
**仮想-物理アドレス・マップ、DMA 転送、コピー [#x5eb79c6]
おそらく DMA 転送を主導するようなドライバを書く機会は少な...
|機能単位|主なヘッダやソース|備考|h
|user space - kernel copy|&ogfile(asm/uaccess.h);&br;&ogf...
|Virt - Phy map convert|&ogfile(asm/io.h);&br;&ogfile(lin...
|DMA mapping, Address convert, Scatter Gather|&ogfile(asm...
**メモリ・マップド・デバイス・アクセス [#k6e99d1c]
SoC 内蔵の機能ブロック、PCI 接続のカードに乗っているデバ...
|機能単位|主なヘッダやソース|備考|h
|Read-Write|&ogfile(asm/io.h);|ドキュメントは &ogfiledire...
**スレッド・軽量処理 [#g22457a0]
「ユーザーランドの動作と独立して kernel 内でデバイスの変...
スレッドか work queue か?work queue を使う方が実装量が少...
ポーリング処理が必要なデバイスであれば、kthread を使うの...
デバイスを制御するのに複数のステップを必要とする場合も、k...
|機能単位|主なヘッダやソース|備考|h
|kthread|&ogfileone(linux/kthread.h,include/linux/kthread...
|work queue|&ogfileone(linux/workqueue.h,include/linux/wo...
|tasklet|&ogfileone(linux/interrupt.h,include/linux/inter...
**接続切断通知 [#b84cb6da]
デバイスの状態変化を通知する uevent とコネクタの状態変化...
uevent は &ogdefs(struct device,device,include/linux/devi...
External Connector (extcon) は Android 向けに拡張された L...
|機能単位|主なヘッダやソース|備考|h
|uevent|&ogfileone(linux/kobject.h,include/linux/kobject....
|External Connector (Switch)|&ogfileone(linux/extcon.h,in...
**リファレンスカウンタ [#j651f123]
kernel API の中で *_alloc(), *_get(), *_put() のという接...
|機能単位|主なヘッダやソース|備考|h
|kref|&ogfileone(linux/kref.h,include/linux/kref.h);|ドキ...
**Kernel Object [#a6b0c156]
|機能単位|主なヘッダやソース|備考|h
|KObject, Kset|&ogfileone(linux/kobject.h,include/linux/k...
**ノード形成 [#x0e153c6]
典型的なデバイスドライバは read(), write(), ioctl(), poll...
新しい方法、あるいは比較的軽量な方法として sysfs に(/sys ...
|機能単位|主なヘッダやソース|備考|h
|VFS(character)|&ogfileone(linux/fs.h,include/linux/fs.h)...
|VFS(block)|&ogfileone(linux/fs.h,include/linux/fs.h);&br...
|SCSI|&ogfileone(scsi/scsi.h,include/scsi/scsi.h);&br;&og...
|procfs|&ogfileone(linux/proc_fs.h,include/linux/proc_fs....
|sysfs|&ogfileone(linux/sysfs.h,include/linux/sysfs.h);&b...
|debugfs|&ogfileone(linux/debugfs.h,include/linux/debugfs...
**モジュールロード、アンロード、シンボル解決 [#w0fcc01b]
恐らくデバイスドライバ自身がここにある API を使うことは稀...
|機能単位|主なヘッダやソース|備考|h
|Module insmod rmmod|&ogfileone(kernel/module.c);|System ...
|Symbol lookup|&ogfileone(linux/kallsyms.h,include/linux/...
**基本的なドライバ [#k914b584]
/dev/null, /dev/zero, /dev/full はハードウエアとして存在...
|機能単位|主なヘッダやソース|備考|h
|Null, Zero, Full, Mem drivers|&ogfileone(drivers/char/me...
**基本的なファイルシステムノード [#r8e37cd7]
select(poll), ioctl を実装するのに参考になるソースを上げ...
|機能単位|主なヘッダやソース|備考|h
|pipe|&ogfileone(fs/pipe.c);|&ogdefs(poll(select),pipe_po...
|eventfd|&ogfileone(fs/eventfd.c);|eventfd, signalfd, tim...
|signalfd|&ogfileone(fs/signalfd.c);|アプリケーション向け...
|timerfd|&ogfileone(fs/timerfd.c);|アプリケーション向けの...
**デバイス登録 [#a249e835]
Linux ではデバイスとドライバをそれぞれ管理しています。シ...
組み込み開発で良く扱うバスとそこに接続するデバイスの登録...
|機能単位|主なヘッダやソース|備考|h
|platform|&ogfileone(linux/platform_device.h,include/linu...
|I2C|&ogfileone(linux/i2c.h,include/linux/i2c.h);|I2C 関...
|PCI|&ogfileone(linux/pci.h,include/linux/pci.h);|PCI 接...
|SDIO|&ogfileone(linux/mmc/host.h,include/linux/mmc/host....
|SPI|&ogfileone(linux/spi/spi.h,include/linux/spi/spi.h);...
|USB|&ogfileone(linux/usb.h,include/linux/usb.h);&br;&ogf...
**ドライバ登録 [#z5e89b95]
ドライバ登録はデバイス登録と対になります。デバイス登録の...
|機能単位|主なヘッダやソース|備考|h
|platform|&ogfileone(linux/platform_device.h,include/linu...
|I2C|&ogfileone(linux/i2c.h,include/linux/pci.h);|ドキュ...
|PCI|&ogfileone(linux/pci.h,include/linux/pci.h);|ドキュ...
|SDIO|&ogfileone(linux/mmc/mmc.h,include/linux/mmc/mmc.h)...
|SPI|&ogfileone(linux/spi/spi.h,include/linux/spi/spi.h);...
|USB|&ogfileone(linux/usb.h,include/linux/usb.h);|ドキュ...
**クラスデバイス登録 [#s9c642a4]
クラスデバイスは種類別に分類されたデバイスです。種類は発...
ドライバにより機能ブロックやチップが確かに存在し、少なく...
汎用的な API は複雑に見えるかもしれません。その複雑さを追...
新しく &ogfileone(Devres - Managed Device Resource,Docume...
|機能単位|主なヘッダやソース|備考|h
|Input, HID|&ogfileone(linux/input.h,include/linux/input....
|LED|&ogfileone(linux/leds.h,include/linux/leds.h);|汎用...
|USB (汎用)|&ogfileone(linux/usb.h,include/linux/usb.h);|...
|misc|&ogfileone(linux/miscdevice.h,include/linux/miscdev...
#textbox(note,Class device は他にもたくさんあります){{
Class device は他にも沢山の種類が存在します。&span(Consol...
}}
ページ名: