欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

一个最简单的Linux内核模块(代码实例)

程序员文章站 2022-06-24 20:04:16
#include #include static int __init hello_init(void){ printk(KERN_INFO "Hello World enter\n"); return 0;}static void __exit hello_exit(){ printk(KERN_INFO "Hello World exit\n");}module_init(....
#include <linux/init.h>
#include <linux/module.h>

static int __init hello_init(void)
{
    printk(KERN_INFO "Hello World enter\n");
    return 0;
}

static void __exit hello_exit()
{
    printk(KERN_INFO "Hello World exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");

这个最简单的内核模块只包含内核模块加载函数、卸载函数和许可权限的声明。

下面需要编写对应的Makefile文件,生成对应的.ko文件

KERN_DIR = /home/fitz/home/kernel/linux-2.6.22.6
all:
        make -C $(KERN_DIR) M=`pwd` modules

clean:
        make -C $(KERN_DIR) M=`pwd` modules clean
        rm -rf modules.order

obj-m   += hello.o


/home/fitz/home/kernel/linux-2.6.22.6是对应linux内核的路径,需要注意的是,这里的内核必须成功经过编译。

输入make命令即可生成对应的.ko文件

一个最简单的Linux内核模块(代码实例)





将hello.ko文件上传到单板系统,输入

insmod hello.ko加载模块,rmmod hello.ko卸载模块,可以看到对应的打印。

一个最简单的Linux内核模块(代码实例)


内核模块中用于输出的函数是内核空间的printk()而非用户空间的printf(),printk()的用法和printf()的用法基本相似,前者可定义输出级别。printk()可作为一种最基本的内核调试手段。

本文地址:https://blog.csdn.net/Tony_Stack/article/details/107802546