编写Linux驱动程序的基本步骤
这里只是简要地描述编写Linux驱动的基本步骤,且不会涉及到具体Linux操作或复杂的Linux编程。
要成功编译及安装Linux内核模块,需做好以下几方面事情:
1 安装编写Linux驱动所用到的编译工具。
(具体安装不是本文关心内容)
2 下载内核源码,并配置构造Linux内核树;
Linux内核版本最好跟要加载模块的系统一致,如不一致,
则可能导致在加载模块失败,这时需强制加载。(具体配置设置及加载不是本文关心内容)
源码可到www.kernel.org站上下载。
3 要加载模块的系统需支持Linux驱动模块加载功能
否则无法加载Linux驱动模块。该功能可在配置Linux系统内核时
选中,如图所示:
该配置基于linux-3.2.1内核
4 编写Linux驱动程序
当Linux驱动编译环境搭建好后,接下来就是编写Linux驱动。下面以一个简单的示例"demo.c"来演示如何编写一个
最简单的Linux驱动程序,当然这个Linux驱动程序除了演示之外别无他用。
最简单的Linux驱动程序,当然这个Linux驱动程序除了演示之外别无他用。
- #include <linux/init.h>
- #include <linux/module.h>
- MODULE_LICENSE("Dual BSD/GPL"); /* 申明模块使用的协议 */
- MODULE_AUTHOR("Kozo"); /* 申明模块作者 */
- MODULE_DESCRIPTION("It's a demo module"); /* 描述驱动模块 */
- static __init int demo_init(void)
- {
- printk(KERN_INFO"demo init\n");
- return 0;
- }
- static __exit void demo_exit(void)
- {
- printk(KERN_INFO"demo exit\n");
- }
- module_init(demo_init); /* 声明加载函数 */
- module_exit(demo_exit); /* 声明卸载函数*/
5 编写Linux驱动的Makefile文件
Makefile代码如下:
点击(此处)折叠或打开
- # DEBUG = y
- ifeq ($(DEBUG),y)
- DEBFLAGS = -O -g #-D"macro of your module"
- else
- DEBFLAGS = -O2
- endif
- EXTRA_CFLAGS += $(DEBFLAGS)
- #EXTRA_CFLAGS += -I"the direction of header file"
- ifneq ($(KERNELRELEASE),)
- obj-m = demo.o
- else
- KERNELDIR ?= /usr/src/kernels/$(shell uname -r)/
- PWD := $(shell pwd)
- default:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
- endif
- clean:
- rm -rf *.o *.depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers *.ko.unsigned
6 编译Linux驱动模块
注意:demo.c与Makefile应在同一目录下。
使用"$make",便可生成demo.ko模块。
7 Linux驱动模块加载与卸载
加载模块可使用"#insmod demo.ko"或"#modprobe demo.ko",加载成功后,
可通过"#lsmod | grep demo"查看.
卸载模块可使用"#rmmod demo"。
8 输出Linux驱动模块打印信息
原文链接:http://blog.chinaunix.net/uid-24467128-id-3163582.html
Linux驱动程序开发扩展阅读:
版权声明:
作者:驱动外包
链接:http://www.51qudong.net/143.html
来源:算法优化_驱动外包_直播算法优化_MAC驱动开发_Linux驱动开发_usb驱动移植外包
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
共有 0 条评论