内核模块实验1

1.内核头文件
  • #include <linux/module.h>:包含内核模块信息声明的相关函数
  • #include <linux/init.h>:包含了 module_init()和 module_exit()函数的声明
  • #include <linux/kernel.h>:包含内核提供的各种函数,如printk
2.内核打印等级
  • printf:glibc实现的打印函数,工作于用户空间
  • printtk:内核无法使用glibc函数,内核实现一个类printf的函数,不过需要指定打印等级,等级越低级别越高
    • #define KERN_EMERG       “<0>” 通常是系统崩溃前的信息
    • #define KERN_ALERT         “<1>” 需要立即处理的消息
    • #define KERN_CRIT            “<2>” 严重情况
    • #define KERN_ERR             “<3>” 错误情况
    • #define KERN_WARNING    “<4>” 有问题的情况
    • #define KERN_NOTICE       “<5>” 注意信息
    • #define KERN_INFO            “<6>” 普通消息
    • #define KERN_DEBUG        “<7>” 调试信息
2.1 查看当前系统的printk打印等级 cat /proc/sys/kernel/printk

在这里插入图片描述
数字代表的意思为:

  • 当前控制台日志级别,printk函数小于这个将会被打印出来
  • 默认信息日志级别
  • 最小的控制台级别
  • 默认控制台日志级别

打印内核所有打印信息:dmesg

  • 内核log缓冲区大小有限制,缓冲区数据可能被冲掉
3.内核模块入口/出口
  • module_init():加载模块式该函数自动执行,进行初始化操作
  • module_exit():卸载模块时函数自动执行,进行清理操作
4.内核模块信息声明
  • MODULE_LICENSE():表示模块代码接受的软件许可协议,Linux内核遵循GPL V2开源协议,内核模块与linux内核保持一致即可。
  • MODULE_AUTHOR():描述模块的作者信息
  • MODULE_DESCRIPTION():对模块的简单介绍
  • MODULE_ALIAS():给模块设置一个别名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,那我们可以进行一个简单的 Linux 内核模块实验。 首先,你需要一个 Linux 系统,可以是虚拟机或者实体机。然后,你需要安装 Linux 内核头文件和编译工具。在 Ubuntu 或 Debian 系统中,你可以通过以下命令来安装: ``` sudo apt-get update sudo apt-get install linux-headers-$(uname -r) build-essential ``` 接下来,我们可以创建一个简单的内核模块。在终端中输入以下命令: ``` touch hello.c nano hello.c ``` 然后在编辑器中输入以下代码: ```c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> static int __init hello_init(void) { printk(KERN_INFO "Hello, world!\n"); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO "Goodbye, world!\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); ``` 保存并退出编辑器。这个代码可以输出 "Hello, world!" 和 "Goodbye, world!",分别在模块初始化和模块卸载时进行输出。 接下来,我们可以编译这个模块。在终端中输入以下命令: ``` make -C /lib/modules/$(uname -r)/build M=$(pwd) modules ``` 这个命令会在当前目录下生成一个名为 `hello.ko` 的内核模块。 最后,我们可以加载这个模块并查看输出。在终端中输入以下命令: ``` sudo insmod hello.ko dmesg | tail sudo rmmod hello dmesg | tail ``` 这个命令会先加载模块,然后查看输出,再卸载模块并查看输出。 以上就是一个简单的 Linux 内核模块实验。你可以在这个基础上进行更多的实验和探索,深入了解 Linux 内核的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值