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



你可能感兴趣的:(Linux驱动编写的方法学习)