2013年1月6日

Linuxドライバ_LDD3メモ_カーネルにおけるデータの型

摘要: カーネルにおけるデータの型 標準のCのデータ型は、アーキテクチャによってサイズが違います。 jiffyを用いて時間を計算する場合には、必ずHz(1秒ごとのタイマ割り込み数)を用いて時間をスケーリングしましょう。 メモリを操作する場合には、1メモリページがPAGE_SIZEバイトであり、4KBではありません。 バイトオーダー: ・インクルードファイル<asm/byteorder.h>は、 CPUのバイトオーダーに従って、「__BIG_ENDIAN」と「__LITTLE_ENDIAN」のどちらかを定義します。 ・#ifdef __LITTLE_ENDIAN条件文の固まりをコーディングし... 阅读全文

posted @ 2013-01-06 17:11 至柔 阅读(544) 评论(0) 推荐(0)

Linuxドライバ_LDD3メモ_割り込み処理

摘要: 割り込み処理 (※マルチコア対応関連)割り込みハンドラは別のコードと同時に実行されます。つまり、並行処理と、データ構造体とハードウェアの競争の問題が必ず起こることになります。多くの場合、モジュールは別のドライバと割り込み信号線を共有することになります。1)、割り込みハンドラのインストール ①、関連関数 割り込みハンドラのインストールは、ドライバの初期化時、あるいはデバイスが始めてオープンされたときに行います。 ・割り込み登録のIFとして、 (<linux/interrupt.h>) int request_irq( // 割り込み番号 //... 阅读全文

posted @ 2013-01-06 17:06 至柔 阅读(3007) 评论(0) 推荐(0)

Linuxドライバ_LDD3メモ_ハードウェアとの通信

摘要: ハードウェアとの通信 1)、I/OポートとI/Oメモリ 各周辺デバイスは、そのレジスタを読み書きすることで制御されます。 そのアドレスは、メモリアドレス空間か、I/Oアドレス空間の中に置かれています。 ①、I/Oレジスタとコンベンショナルメモリ I/OレジスタとRAMの主な違いは、I/O操作には付帯的な影響があることです。 I/O操作にとってはコンパイラの最適化(キャッシング、読み書きの並べ替え)が致命的なものになります。 ・ハードウェアキャッシングの対策 (対応不要) 既にLinuxの初期化コードが、ハードウェアのI/O領域(メモリまたはポート領域)にアクセ... 阅读全文

posted @ 2013-01-06 15:10 至柔 阅读(2491) 评论(0) 推荐(0)

Linuxドライバ_LDD3メモ_時間関連処理

摘要: 時間関連処理 1)、時間経過の計測 一般には「jiffies」の使用をお勧めします。 ①、「jiffies」カウンタを使う キャッシュしたjiffiesと現在の値の比較は、 int time_after(unsigned long a, unsigned long b); int time_before(unsigned long a, unsigned long b); int time_after_eq(unsigned long a, unsigned long b); int time_before_eq(unsigned long a, unsi... 阅读全文

posted @ 2013-01-06 15:05 至柔 阅读(2125) 评论(0) 推荐(0)

Linuxドライバ_LDD3メモ_並行処理と競争状態

摘要: 並行処理と競争状態 (※マルチコア対応関連)1)発生原因 SMPシステムでは、異なるプロセッサ上でコードを同時に実行することができます。 カーネルコードはプリエンプティブであり、ドライバコードはいつでもプロセッサを手放します。 ・複数のプロセスが同一ドライバを呼ばれた場合 ・割り込みハンドラ ・非同期のカーネルイベントへの応答 など (性質上、ハードウェアリソースは共有されるものであり、しばしばソフトウェアリソースも複数のスレッドから利用する必要があります。) 2)対策 アクセス... 阅读全文

posted @ 2013-01-06 14:40 至柔 阅读(835) 评论(0) 推荐(0)

Linuxドライバ_LDD3メモ_モジュールの作成と実行

摘要: モジュールの作成と実行 ・Hellow Worldモジュール、及び関連マクロ&関数。(P16) #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) // モジュールがカーネルロードされたときに起動される関数。 { printk(KERN_ALERT "Hello, worl... 阅读全文

posted @ 2013-01-06 14:36 至柔 阅读(115) 评论(0) 推荐(0)

导航