Linux 内核模块 helloworld

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!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值