相信hello world是所有编程语言的demo吧,linux kernel也不例外,昨天搜集了相关资料,终于完成linux 模块化编程的hello world!特此写下这个博客,记录下步骤。

linux kernel 模块化编程入门

安装Linux头部

sudo apt-get install build-essential linux-headers-$(uname -r)

编写hello world程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <linux/module.h>   // Needed by all modules
#include <linux/kernel.h> // Needed for KERN_ALERT
#include <linux/init.h> // Needed for the macros
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world \n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, world \n");
}
module_init(hello_init);
module_exit(hello_exit);

编写Makefile文件

1
2
3
4
5
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

此刻,当前目录下文件为:
这里写图片描述

make

此刻,观察当前目录下文件:
这里写图片描述

将.ko文件添加到内核中

sudo insmod hello.ko

信息验证

为了查看内核控制台信息,需要用到dmesg指令
这里写图片描述
可以看到,hello world成功输出

移除模块文件

移除模块文件,需要用到如下指令
sudo rmmod hello

此刻,再查看下message
这里写图片描述
发现Goodbye, world成功输出

如果想要了解具体细节,可以结合下参考资料!


参考资料:

  1. tldp
  2. thegeekstuff
  3. youtube