前面我们学习了Linux驱动的调试方法,加载方法以及编写步骤,本章节我们将从零开始,编写第一个字符设备驱动。 在kernel/drivers/char/x4412目录下新建Makefile,Kconfig以及hello-x4412.c三个文件,Makefile文件内容如下: - obj-$(CONFIG_HELLO_X4412_DRIVER) += hello-x4412.o
复制代码Kconfig文件内容如下: - config HELLO_X4412_DRIVER
- tristate "hello X4412 driver"
- default y
- help
- compile for hello x4412 driver,y for kernel,m for module.
复制代码hello-x4412.c内容如下: - #include <linux/module.h>
- #include <linux/init.h>
-
- static int __devinit hello_x4412_init(void)
- {
- printk("hello,x4412!\r\n");
- return 0;
- }
-
- static void hello_x4412_exit(void)
- {
- printk("Goodbye,x4412!\r\n");
- }
-
- module_init(hello_x4412_init);
- module_exit(hello_x4412_exit);
-
- MODULE_LICENSE("GPL");
- MODULE_VERSION("1.0");
- MODULE_AUTHOR("www.9tripod.com");
- MODULE_ALIAS("a Character driver sample");
- MODULE_DESCRIPTION("hello x4412 driver");
复制代码 这个程序只包含设备驱动的加载,卸载函数以及一些模块描述信息。当驱动加载时,打印“hello,x4412!”,当驱动卸载时,打印“Goodbye,x4412!”。 在kernel/drivers/char/Kconfig中添加如下语句: - source "drivers/char/x4412/Kconfig"
复制代码 在kernel/drivers/char/Makefile中添加如下语句: 再编译内核,即将驱动编译进内核映像zImage中了。更新开发板内核映像,重启开发板可以看到如下标红的打印信息: - [ 1.818915] console [ttySAC3] enabled
- [ 1.900122] x4412 Oops driver
- [ 1.901891] <b><font color="#ff0000">hello,x4412!</font></b>
- [ 1.908596] brd: module loaded
复制代码 这里驱动被编译进内核了,它将无法被卸载。这时,卸载函数以及驱动的相关信息我们将无从测试。因此,我们有必要将它编译成驱动模块。
|