閱讀254 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Linux驅動編寫的方法學習


/* GPRS驅動的操作函數集 */
struct file_operations gprs_fops = {
	.owner	= THIS_MODULE,
	.read		= gprs_read,
	.write	= gprs_write,
	.open		= gprs_open,
	.release	= gprs_release,
};

這個結構的每一個成員的名字都對應著一個係統調用。用戶進程利用係統調用在對設備文件進行諸如read/write操作時,係統調用通過設備文件的主設備號找到相應的設備驅動程序,然後讀取這個數據結構相應的函數指針,接著把控製權交給該函數,這是linux的設備驅動程序工作的基本原理。編寫設備驅動程序的主要工作就是編寫子函數,並填充file_operations的各個域。


注意:在用戶進程調用驅動程序是,係統進入核心態,這是不再是搶先式調度。也就是說,係統必須在驅動程序的子函數返回後才能進行其他的工作。如果此時驅動程序陷入死循環,不幸的是隻能重新啟動機器了。


編譯:
$gcc -O2 -DMODULE -D__KERNEL__ -c test.c 得到文件test.o就是一個設備驅動程序。
如果設備驅動程序有多個文件,把每個文件編譯後,$ld -r file1.0 file2.0 -o modulename
將驅動程序安裝到係統:insmod -f test.o
如果安裝成功,會在/proc/devices文件中就可以看到設備test,並可以看到他的主設備號。 cat /proc/devices
卸載:rmmod test
創建設備文件:mknod /dev/test c major minor



最後更新:2017-04-03 14:54:02

  上一篇:go 用戶登錄失敗,Microsoft sql server 錯誤:18456
  下一篇:go Java IO--管道流PipedOutputStream/PipedInputStream