2011年7月13日 星期三

[轉][Kernel Driver] 撰寫簡易 Timer 機制

在底層 Linux Kernel 提供了時序(timing)機制,方便驅動程式設計者所使用,核心是依據硬體發出的『計時器中斷』來追蹤時間的流動狀況。我們可以依據 HZ 的值來設計 Delay 機制,讓驅動程式可以每隔固定一段時間啟動或者是發出訊號,
也可以利用 Timer 來讓 LED 閃爍變化,在介紹 Timer API 之前,
可以先參考 Linux Kernel: 簡介HZ, tick and jiffies 這篇文章,瞭解一些相關名詞,
舉例:如果想知道一秒後的 jiffies 時間,可以寫成底下:

#ifdef CONFIG_BMA150_TIMER
#include
#endif
j = jiffies;
/* 一秒之後 */
stamp_1 = j + HZ;
/* 半秒之後 */
stamp_1 = j + HZ/2;
/* 20秒之後 */
stamp_1 = j + 20*HZ;


利用 jiffies 來反算時間
diff = (long)time2 - (long)time1
msec = diff * 1000 / HZ;

2011年2月16日 星期三

[轉]核心原始碼下的次目錄

在核心目錄下,基本上有底下這些東西:

arch :與硬體平台有關的項目,大部分指的是 CPU 的類別,例如 x86, x86_64, Xen 虛擬支援等;
block :與區塊裝置較相關的設定資料,區塊資料通常指的是大量儲存媒體!還包括類似 ext3 等檔案系統的支援是否允許等。
crypto :核心所支援的加密的技術,例如 md5 或者是 des 等等;
Documentation :與核心有關的一堆說明文件,若對核心有極大的興趣,要瞧瞧這裡!
drivers :一些硬體的驅動程式,例如顯示卡、網路卡、PCI 相關硬體等等;
firmware :一些舊式硬體的微指令碼 (韌體) 資料;
fs :核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等;
include :一些可讓其他程序呼叫的標頭 (header) 定義資料;
init :一些核心初始化的定義功能,包括掛載與 init 程式的呼叫等;
ipc :定義 Linux 作業系統內各程序的溝通;
kernel :定義核心的程序、核心狀態、執行緒、程序的排程 (schedule)、程序的訊號 (signle) 等
lib :一些函式庫;
mm :與記憶體單元有關的各項資料,包括 swap 與虛擬記憶體等;
net :與網路有關的各項協定資料,還有防火牆模組 (net/ipv4/netfilter/*) 等等;
security :包括 selinux 等在內的安全性設定;
sound :與音效有關的各項模組;
virt :與虛擬化機器有關的資訊,目前核心支援的是 KVM (Kernel base Virtual Machine)