gpt4 book ai didi

c - 在内核模块上获得正常运行时间?

转载 作者:太空狗 更新时间:2023-10-29 11:35:18 25 4
gpt4 key购买 nike

我有这段代码,我试图让内核模块打印 uptime系统,完全在 simple_init 上。

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <sys/sysinfo.h>

/* This function is called when the module is loaded. */

int simple_init(void)
{
struct sysinfo info;
sysinfo(&info);
printk("This pc has been on for %ld seconds\n", info.uptime);;
printk(KERN_INFO "Loading Module\n");
return 0;
}

如果这不是内核模块,我会这样做,我发现 sysinfo 有一个类似的 linux 库,它是 linux/sysinfo,但即使我使用那个,它只有一个 Struct sysinfo 而不是我可以调用 sysinfo() 的函数,当我尝试这样做时,我得到了

error: implicit declaration of function ‘sysinfo’ [-Werror=implicit-function-declaration]
sysinfo(&info);

有谁知道其他有效的方法吗?

谢谢

最佳答案

由于您查找的信息是由内核伪文件/proc/uptime 提供的,我们可以查看fs/proc/uptime.c:uptime_proc_show()在内核源代码中查看信息是如何收集的。

目前相关代码为

#include <linux/ktime.h>

struct timespec uptime;
get_monotonic_boottime(&uptime);

其中 uptime.tv_sec 是秒数,uptime.tv_nsec 纳秒(0 到 999,999,999,包括在内)。

但是,由于内核正在转向 64 位时间,您最好使用

#include <linux/ktime.h>

s64 uptime_ms;
uptime_ms = ktime_to_ms(ktime_get_boottime());

获取以毫秒为单位的正常运行时间。如果您只需要完整的秒数,请使用

#include <linux/ktime.h>

s64 uptime;
uptime = ktime_divns(ktime_get_coarse_boottime(), NSEC_PER_SEC);

(“粗略”意味着只读取完整的秒部分。)

关于c - 在内核模块上获得正常运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com