linux内核模块的编写

之前学了内核模块的编写,但是没有动手实验,这次试验才发现还是有好动东西需要学习!

我的环境是虚拟机跑centos 7 

1.首先编写模块:

#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
        printk(KERN_ALERT " Hello World enter\n");
        return 0;
}
static void hello_exit(void)
{
module_exit(hello_exit);
        printk(KERN_ALERT " Hello World exit\n");
}

module_init(hello_init);
MODULE_ALIAS("a simplest module");
MODULE_DESCRIPTION("A simple Hello World Module");


 这里就不做解释了,代码具体可以看我 关于设备驱动的学习:http://blog.csdn.net/u012510450/article/details/78141453

2.编写Makefile 文件,因为我还没有学,所以网络上copy 别人的,目前只是看得懂。

ifneq ($(KERNELRELEASE),)
 #kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := hello.o
obj-m := hello.o
else
PWD  := $(shell pwd)
        $(MAKE) -C $(KDIR) M=$(PWD) 
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
clean:
endif
        rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions


这里要注意的是两点,否则可能报错【Makefile missing separator. Stop】

a.  ifneq 后面要有一个空格

b.  all,clean 后一行的指令前面要加tab


3.保存后make一下

 这时候我的错误提示:linux/module.h: No such file or directory

这是缺少内核头文件:安装一下,sudo yum install kernel-headers

其他安装教程在:http://blog.csdn.net/u012510450/article/details/78141522

然后就ok了


4.运行模块

 sudo insmod hello.ko

  查看系统

          dmesg

          或者使用lsmod (查看所有模块)

          我用的是 lsmod | grep ‘hello’

  移除模块

       sudo rmmod hello


好哒,大功告成,开熏,中间好几次报错,主要makefile不会写,接下来要学好Makefile

 

参考:

http://blog.csdn.net/pottichu/article/details/1892245

http://blog.csdn.net/l_in12/article/details/49640833

http://blog.csdn.net/zaijzhgh/article/details/29918721



1.


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值