驱动学习第一篇 hello world
hello.c
/*************************************************************************
* > File Name: hello.c
* > Author: Devil_box
* > Mail: 18855953390@163.com
* > Created Time: 2016年05月20日 星期五 14时07分58秒
* > Introduction:
************************************************************************/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE ("GPL");
//模块加载函数
int __init init_module (void)
{
printk("This module was added by the kernel!\n");
return 0;
}
//模块卸载函数
void __exit cleanup_module (void)
{
printk("This module was removed by the kernel!\n");
}
Makefile
NELRELEASE enviroment value
ifeq ($(KERNELRELEASE),)
#It's NULL, so to set the enviroment value
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD :=$(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module* modules*
.PHONY: modules modules_install clean
#To create obj file
else
obj-m := hello.o
endif
在终端里面 执行make,如下图所示:
生成ko文件。
再在root用户下,将ko文件加载到内核里面去。insmod 内核名
查看模块是否加载进去 lsmod
说明已经加载了进去,打印内核输出语句 dmesg
说明模块加载进内核并正常初始化
卸载模块 rmmod 内核名
查看内核输出结果
说明模块正常被卸载并打印卸载信息。
内核模块学习第一篇完!!