Linux 内核模块 helloworld
2017-07-22 20:49
239 查看
uname -r
3.10.0-229.el7.x86_64
hello.c
#ifndef __KERNEL__
# define __KERNEL__
#endif
#ifndef MODULE
# define MODULE
#endif
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
static int year=2017;
//MODULE_PARM(year,"i");
static int hello_init()
{
printk(KERN_INFO"Hello World %d!\n",year);
return 0;
}
static void hello_exit()
{
printk("Hello Exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile
obj-m := hello.o
obj-m2 := hello.ko
all :
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
#install :
#insmod $(obj-m2)
#uninstall :
#rmmod $(obj-m2)
.PHONY : clean
clear :
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
$(MAKE) 前面是tab
执行 make
make -C /lib/modules/3.10.0-229.el7.x86_64/build M=/root/data/hello modules
make[1]: 进入目录“/usr/src/kernels/3.10.0-229.el7.x86_64”
CC [M] /root/data/hello/hello.o
/root/data/hello/hello.c:17:12: 警告:函数声明不是一个原型 [-Wstrict-prototypes]
static int hello_init()
^
/root/data/hello/hello.c:22:13: 警告:函数声明不是一个原型 [-Wstrict-prototypes]
static void hello_exit()
^
Building modules, stage 2.
MODPOST 1 modules
CC /root/data/hello/hello.mod.o
LD [M] /root/data/hello/hello.ko
make[1]: 离开目录“/usr/src/kernels/3.10.0-229.el7.x86_64”
验证:
[root@yujian hello]# insmod ./hello.ko
[root@yujian hello]# rmmod ./hello.ko
查看 dmesg 或者 tail -f /var/log/messages
[3722302.058948] Hello World 2017!
[3722324.017678] Hello Exit!
3.10.0-229.el7.x86_64
hello.c
#ifndef __KERNEL__
# define __KERNEL__
#endif
#ifndef MODULE
# define MODULE
#endif
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
static int year=2017;
//MODULE_PARM(year,"i");
static int hello_init()
{
printk(KERN_INFO"Hello World %d!\n",year);
return 0;
}
static void hello_exit()
{
printk("Hello Exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile
obj-m := hello.o
obj-m2 := hello.ko
all :
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
#install :
#insmod $(obj-m2)
#uninstall :
#rmmod $(obj-m2)
.PHONY : clean
clear :
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
$(MAKE) 前面是tab
执行 make
make -C /lib/modules/3.10.0-229.el7.x86_64/build M=/root/data/hello modules
make[1]: 进入目录“/usr/src/kernels/3.10.0-229.el7.x86_64”
CC [M] /root/data/hello/hello.o
/root/data/hello/hello.c:17:12: 警告:函数声明不是一个原型 [-Wstrict-prototypes]
static int hello_init()
^
/root/data/hello/hello.c:22:13: 警告:函数声明不是一个原型 [-Wstrict-prototypes]
static void hello_exit()
^
Building modules, stage 2.
MODPOST 1 modules
CC /root/data/hello/hello.mod.o
LD [M] /root/data/hello/hello.ko
make[1]: 离开目录“/usr/src/kernels/3.10.0-229.el7.x86_64”
验证:
[root@yujian hello]# insmod ./hello.ko
[root@yujian hello]# rmmod ./hello.ko
查看 dmesg 或者 tail -f /var/log/messages
[3722302.058948] Hello World 2017!
[3722324.017678] Hello Exit!
相关文章推荐
- linux 内核模块的helloWorld
- 最简单的helloworld模块编译加载(linux3.5内核源码树建立)
- Linux2.6.32内核笔记(1)内核模块helloworld
- Linux 下内核模块的开发方式的记录 及问题解决(入门的Helloworld)
- 在Linux 2.6内核下编译可以加载的内核模块
- Linux实验二:Linux 内核模块测试
- linux内核编译与内核模块
- Linux:编译生成内核模块(来自国嵌的视频教学)
- Linux内核编译,模块尺寸变大的解决办法
- Linux 内核模块简介及常用命令
- 在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink
- 怎样用linux内核生成自己的模块
- linux 内核模块 参数
- Linux 内核模块开发基本知识
- 解析 Linux 内核可装载模块的版本检查机制
- 使用kgdb调试linux内核及内核模块
- 使用kgdb调试linux内核及内核模块
- linux 内核模块编程之LED驱动程序(六)
- 【Linux开发】内核模块简介
- linux 内核分析+使用SystemTap调试新增内核模块