驱动入门hello实例解析

来源:互联网 发布:ubuntu ipython 使用 编辑:程序博客网 时间:2024/06/04 19:20

首先在终端vim一个文件名为hello.c,输入内容如下:

  1 #include <Linux/module.h>
  2 #include <linux/init.h>
  3 
  4 MODULE_LICENSE("GPL");
  5 MODULE_AUTHOR("Snooy");
  6 
  7 static int howmany = 10;
  8 module_param(howmany,int,S_IRUGO);
  9 
 10 static char *name = "Snooy";
 11 module_param(name,charp,S_IRUGO);
 12 
 13 static __init int hello_init(void) //只被用一次就丢弃__init
 14 {
 15     int i = 0;
 16     for(; i<howmany; i++)
 17         printk(KERN_EMERG"this is %s!\n",name);
 18     return 0;
 19 }
 20 
 21 static __exit void hello_exit(void)
 22 {
 23     printk("<0>goodbye!\n");
 24 }
 25 
 26 module_init(hello_init); //module_...是一个宏
 27 module_exit(hello_exit);
 28 //另一种写法如下:
 29 //若不要18/19行,则7,13行可改为函数的如下:
 30 //int init_module(void) 函数调运
 31 //void exit_module(void)  函数调运


编写编译需要的Makefile(注意这里好像必须大写M,否则报错),内容如下:

  1 ifeq ($(KERNELRELEASE),)
  2     KERNELDIR ?= /usr/src/kernels/2.6.18-164.el5-i686/         #这里的路径依据自己虚拟机linux版本决定(查看指令:uname -r)
  3     PWD := $(shell pwd)   #这里获取带扩展的路径
  4 modules:
  5     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
  6 
  7 .PHONY: clean
  8 clean:
  9     rm -rf *.ko *.o Module* *.mod*
 10 else
 11     obj-m := hello.o
 12 endif

解释:该Makefile在执行make时会进入两次,具体自己根据if等理解。


使用指令:

insmod hello.ko  安装模块

lsmod 查看已安装模块

rmmod hello 或 rmmod hello.ko 删除模块

dmesg  查看模块运行信息(最后几行),或者查看cat  /var/log/messages信息也行。

到此一个简单的入门驱动模块编写安装与体验结束。



转自:http://blog.csdn.net/yanbober/article/details/8278434

0 0
原创粉丝点击