Linux内核模块编程——Hello World模块

Linux内核模块编程


编程环境

Ubuntu 16.04 LTS

什么是模块

内核模块的全称是动态可加载内核模块(Loadable Kernel Modul,KLM),可以动态载入内核,让它成为内核代码的一部分。

一个模块一般由一组函数和数据结构组成。

如何编写最简单的Hello World模块
  • 首先要创建一个工作目录,取名叫hello,在命令行输入如下命令
mkdir hello
cd hello
  • hello.c代码如下:
#include<linux/module.h>   //每个模块都要包括的头文件
#include<linux/kernel.h>   //用到了printk()函数
#include<linux/init.h>

MODULE_LICENSE("GPL");  //没有指定license会出现error

static int hello_init(void)     //static使得该文件以外无法访问
{
    printk(KERN_ALERT "Hello World\n");  //只能使用内核里定义好的C函数,printk会根据日志级别将指定信息输出到控制台或日志文件中,KERN_ALERT会输出到控制台
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye World\n");
}

module_init(hello_init);
module_exit(hello_exit);
  • Makefile代码如下:
obj-m := hello.o

KERNEL_DIR := /lib/modules/$(shell uname -r)/build   //指定内核源码
PWD := $(shell pwd)  //指向当前目录

all:
    make -C $(KERNEL_DIR) M=$(PWD) modules
clean:
    make -C $(KERNEL_DIR) M=$(PWD) clean
检验模块工作情况

在命令行输入:

modinfo hello.ko    //modinfo用来查看模块信息
insmod hello.ko    //加载模块
lsmod   //查看已经载入的模块,看看有没有hello!
dmesg   //如果成功应该可以看到最后一行输出了hello world
rmmod hello   //卸载模块

大功告成✔

转载于:https://www.cnblogs.com/MartinLwx/p/10628530.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值