You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建Linux内核模块以计算展示秒数、jiffies并通过cat /proc输出

实现步骤

1. 替换simple.c代码

你需要在内核模块中加入proc文件系统的注册逻辑,使用内核标准的seq_file接口实现读取时的输出逻辑,完整代码如下:

/**
 * simple.c
 * 内核模块,通过/proc接口输出当前jiffies和系统运行秒数
 * 编译执行make即可
 */
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/jiffies.h>
#include <linux/time.h>

// 定义proc文件的名称,读取路径为/proc/jiffies_stats
#define PROC_FILE_NAME "jiffies_stats"

/* proc文件的show回调,执行cat时会触发执行 */
static int jiffies_show(struct seq_file *m, void *v)
{
    // 计算系统启动到当前的秒数,HZ为内核配置的每秒jiffies计数
    unsigned long seconds = jiffies / HZ;
    // 输出jiffies和秒数
    seq_printf(m, "当前jiffies值: %lu\n系统运行秒数: %lu\n", jiffies, seconds);
    return 0;
}

/* open回调,绑定show函数 */
static int jiffies_open(struct inode *inode, struct file *file)
{
    return single_open(file, jiffies_show, NULL);
}

/* proc文件操作算子集合 */
static const struct proc_ops jiffies_proc_ops = {
    .proc_open = jiffies_open,
    .proc_read = seq_read,
    .proc_lseek = seq_lseek,
    .proc_release = single_release,
};

/* 模块加载时执行 */
static int __init simple_init(void)
{
    printk(KERN_INFO "加载jiffies统计模块\n");
    // 创建proc入口,权限0644,父节点为NULL即直接在/proc根目录下创建
    proc_create(PROC_FILE_NAME, 0644, NULL, &jiffies_proc_ops);
    return 0;
}

/* 模块卸载时执行 */
static void __exit simple_exit(void)
{
    // 删除proc入口
    remove_proc_entry(PROC_FILE_NAME, NULL);
    printk(KERN_INFO "卸载jiffies统计模块\n");
}

module_init(simple_init);
module_exit(simple_exit);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Jiffies Stats Proc Module");
MODULE_AUTHOR("SGG");

2. Makefile无需修改

你原有提供的Makefile可以直接使用,无需调整:

obj-m += simple.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

注意:Makefile中make命令前必须是Tab缩进,不能是空格。

3. 编译与测试步骤

  • 先安装对应内核头文件:sudo apt install linux-headers-$(uname -r)(Debian/Ubuntu系,其他发行版对应安装内核开发包即可)
  • 执行make编译模块
  • 加载模块:sudo insmod simple.ko
  • 测试输出:cat /proc/jiffies_stats,就能看到jiffies和秒数的输出
  • 卸载模块:sudo rmmod simple

内容的提问来源于stack exchange,提问作者fateme taheri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:12:01