在类unix操作系统中,驱动加载方式一般分为:静态加载和动态加载。静态加载就是把驱动程序直接编译到内核里,系统启动后直接被调用。静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译下载内核,效率较低。动态加载利用了LINUX的module特性,可以在系统启动后用insmod命令把驱动程序(.ko文件)添加上去,在不需要的时候用rmmod命令来卸载。下面我们通过蜂鸣器驱动实例分别对其进行详述。
1.1.1 静态加载
第一步:在kernel/drivers/char目录下新建目录beep,在beep目录下创建Kconfig,Makefile以及x4412-beep.c三个文件。
第二步:编辑Makefile内容如下:
- obj-$(CONFIG_X4412_BEEP_DRIVER) += x4412-beep.o
复制代码
编辑Kconfig内容如下:
- config X4412_BEEP_DRIVER
- bool "X4412 beep driver"
- default y
- help
- compile for x4412 beep driver,y for kernel,m for module.
复制代码
再编辑x4412-beep.c文件,其部分源码如下:
- static int __devinit x4412_beep_init(void)
- {
- int ret;
-
- printk("x4412 beep driver\r\n");
-
- ret = platform_device_register(&x4412_beep_device);
- if(ret)
- printk("failed to register x4412 beep device\n");
-
- ret = platform_driver_register(&x4412_beep_driver);
- if(ret)
- printk("failed to register x4412 beep driver\n");
-
- return ret;
- }
-
- static void x4412_beep_exit(void)
- {
- platform_driver_unregister(&x4412_beep_driver);
- }
-