内核编程学习(1)

一个内核模块至少包括两个函数:初始化函数init_module,在模块被插入到内核时使用;清除函数cleanup_module,在模块被从内核中移走时使用。一般情况下函数init_module或者在内核中注册一个处理程序,或者使用自己的代码替换一个内核函数,函数cleanup_module则清除init_module所做的任何事情,这样模块就可以安全的卸载。

下面来一个最简单的helloworld。总共有两个文件:helloworld.c和Makefile

c文件:helloworld.c

#include </linux/kernel.h>
#include </linux/module.h>


int init_module()
{
        printk("this is kernel speaking");
        return 0;
}


void cleanup_module()
{
        printk("clean module success");
}
在这里要注意linux/module.h文件并非在用户空间,而是在/usr/src/linuxekernel/include下面,linuxkernel是你以自己的内核版本号命名的内核头文件目录,我的是linux-headers-2.6.32-21。这个helloworld没有做什么实质的工作。

makefile文件:Makefile

obj-m := helloworld.o
KERNELBUILD := /lib/modules/`uname -r`/build
all:
        make -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
        rm -rf *.o  *.ko  *.mod.c .tmp_versions modules* Module*

接下来开始编译,执行命令make,然后ls,会发现多了很多*.o文件;

然后安装模块,命令sudo insmod helloworld,在这里helloworld是我们的模块名,这里需要root权限。

查看模块是否安装成功,可以使用命令lsmod,该命令会显示系统内所有的模块。还可以查看文件/proc/modules。

卸载模块 sudo rmmod helloworld.



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值