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

     2023-02-16     90

关键词:

【中文标题】在内核模块上获得正常运行时间?【英文标题】:Getting uptime on a kernel module? 【发布时间】:2018-08-17 00:19:00 【问题描述】:

我有这段代码,我试图让内核模块打印系统的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);

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

谢谢

【问题讨论】:

@jxh,我对 C 比较陌生,我检查了链接,但没有看到任何与我的目的相关的内容,我可以得到提示吗? 【参考方案1】:

由于您寻找的信息是由内核伪文件/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);

(“粗略”表示只读取完整的秒部分。)

【讨论】:

我问的是正常运行时间,我的意思是计算机处于活动状态的时间,我的问题与内存无关。 @DiegoContreras:对;现在固定以实际回答您的问题。 (我只是在那里呆了一会儿;很抱歉造成混乱!)

内核里获得系统版本,与系统滴答时间(代码片段)

获得系统版本号。内核编程难免使用硬编码,以及使用一些高版本系统才出现的函数。为了使得驱动能在低版本的系统上正常运行,就需要根据不同系统做不同处理了。VOIDGetVersion()ULONGNtBuildNumber;RTL_OSVERSIONINFOWosi;osi.dwOSVersionInfoSi... 查看详情

Jupyter 笔记本内核上的 CNTK 无法正常工作

】Jupyter笔记本内核上的CNTK无法正常工作【英文标题】:CNTKonJupyternotebookkernalnotworking【发布时间】:2017-07-1417:05:41【问题描述】:我正在尝试让JupyterNotebook与我的Azure数据科学VM一起使用,但内核无法正常工作。我使用shellbash安... 查看详情

如何在 linux 中禁用内核模块签名

】如何在linux中禁用内核模块签名【英文标题】:HowtodisableKernelModuleSigninginlinux【发布时间】:2015-06-3015:11:59【问题描述】:我正在使用在我的大学开发的实时调度程序,当我运行它时,我得到“模块验证失败:签名和/或所需的... 查看详情

在专有内核上设置 OProfile

】在专有内核上设置OProfile【英文标题】:SetupOProfileonproprietarykernel【发布时间】:2011-11-1009:51:58【问题描述】:我正在尝试在我们的专有内核上设置OProfile,但没有成功。内核基于:2.6.34.8运行在mips74kCPU上。可以吗?如果是这样... 查看详情

内核模块的加载如何在 linux 中工作?

】内核模块的加载如何在linux中工作?【英文标题】:Howdoesloadingofkernelmoduleworkinlinux?【发布时间】:2021-10-3111:57:02【问题描述】:试图了解内核模块的内部结构。加载内核模块时会发生什么?模块是作为不同的进程运行还是作为... 查看详情

linux内核模块开发怎么进行单元测试

usb_register_notify,你当前的系统中运行的内核缺少这个函数定义,你这个因为你要安装的模块,并没有在这个你运行的这个系统中编译生成,而是拿别的机器,或者别人的模块安装在你当前的机器上,不提倡。有源码的话,在你... 查看详情

如何在 CPU 内核上执行函数,并在完成后获得回调?

】如何在CPU内核上执行函数,并在完成后获得回调?【英文标题】:HowcanIexecuteafunctiononaCPUcore,andgetacallbackwhenithascompleted?【发布时间】:2021-09-3021:21:49【问题描述】:上下文我正在接收流:symbols=[\'ABC\',\'DFG\',...]#52ofthesehandlers=symb... 查看详情

php禁用gzip,minify,缓存,性能,正常运行时间,smush,gravatar,特定页面上的页面缓存等模块(代码片段)

查看详情

试图获得服务服务的正常运行时间,我的状态为 up/down

】试图获得服务服务的正常运行时间,我的状态为up/down【英文标题】:Tryingtogettheuptimeofaservicedservice,Ihavethestateup/down【发布时间】:2022-01-0302:09:09【问题描述】:我正在尝试获取正常运行时间,即服务运行了多长时间。我设法获... 查看详情

尝试在 AWS EMR 中获得 GPU 支持时出现错误“一个 NVIDIA 内核模块 'nvidia' 似乎已加载到您的内核中”

】尝试在AWSEMR中获得GPU支持时出现错误“一个NVIDIA内核模块\\\'nvidia\\\'似乎已加载到您的内核中”【英文标题】:Error\'AnNVIDIAkernelmodule\'nvidia\'appearstoalreadybeloadedinyourkernel\'whentryingtogetGPUsupportinAWSEMR尝试在AWSEMR中获得GPU支持时出现... 查看详情

是否可以使用 C++ 在 Linux 上开发可加载内核模块(LKM)?

】是否可以使用C++在Linux上开发可加载内核模块(LKM)?【英文标题】:Isitpossibletodevelopaloadablekernelmodule(LKM)onLinuxwithC++?【发布时间】:2012-05-0608:23:15【问题描述】:当我开发可加载内核模块(LKM)时,我应该使用C吗?是否可以在Li... 查看详情

从源代码/从头开始编译 linux perf 工具及其依赖的内核模块

】从源代码/从头开始编译linuxperf工具及其依赖的内核模块【英文标题】:Comilinglinuxperftoolsanditsdependentkernelmodulesfromsource/scratch【发布时间】:2020-04-2414:59:05【问题描述】:我正在使用linuxperf工具来分析共享库。虽然它在Ubuntu上运... 查看详情

内核栈溢出

有一个内核模块和一个用户态程序,用户态程序通过ioctl调用模块中的接口。内核模块中有一个switchcase结构来区分用户态的请求以确定调用相应接口。这个switchcase比较大,大概有100多个case分支。目前遇到问题:用户态程序调用... 查看详情

获取iOS系统正常运行时间,睡着时不会暂停

...2-09-1109:27:41【问题描述】:我正在寻找一种方法来在iOS上获得绝对的、始终增加的系统正常运行时间。它应该返回自设备上次重新启动以来的时间,并且不受系统日期更改的影响。我能找到的所有方法要么在设备睡眠时暂停(CAC... 查看详情

带有 MPD 内核模块的 Firehol 规则

】带有MPD内核模块的Firehol规则【英文标题】:FireholruleswithkernelmodulesforMPD【发布时间】:2019-02-0922:26:30【问题描述】:注意:firehol使用iptables,所以也许你不必知道firehol就可以回答我的问题。我一直在调整我的firehol.conf以允许... 查看详情

无法加载内核模块“nvidia.ko”

】无法加载内核模块“nvidia.ko”【英文标题】:Unabletoloadthekernelmodule\'nvidia.ko\'[closed]【发布时间】:2014-09-0406:40:36【问题描述】:我正在尝试通过运行NVIDIA-Linux-x86_64-331.49.run在Ubuntu13.10上安装Nvidia驱动程序。我在/etc/modprobe.d/blackl... 查看详情

在合同上运行方法时如何获得运行结果?

】在合同上运行方法时如何获得运行结果?【英文标题】:HowcanIgettherunningresultwhenIrunmethodoncontract?【发布时间】:2018-12-2701:33:25【问题描述】:我想写一个简单的函数来调用合约上的方法并得到运行结果,这是合约代码function_eva... 查看详情

linux安装内核模块问题

我在虚拟机的linux下编译好的内核模块(是自己写的一个简单的hello.ko的模块),通过nfs放到开发板上insmod的时候,总是不成功,我看国嵌的视频上就是把在虚拟机下编译好的内核模块放到开发板上运行,可是我的总是不行,我... 查看详情