驱动入门hello实例解析

xiaoxiao2021-02-27  381

首先在终端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

转载请注明原文地址: https://www.6miu.com/read-1902.html

最新回复(0)