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