【发布时间】:2014-10-15 22:54:15
【问题描述】:
我对内核编程很陌生,我写了一个像这样的小内核模块,
mod.c
#include<linux/kernel.h>
#include<linux/module.h>
#include<sys/sysinfo.h>
int init_module(void)
{
int k;
struct sysinfo info;
printk(KERN_INFO "hello\n");
k = sysinfo(&info);
printk(KERN_EMERG "procs = %d\n", info.procs)
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye\n");
}
Makefile 看起来像这样,
obj-m +=mod.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
如果我从终端发出 make,它会给出错误
致命错误:sys/sysinfo.h:没有这样的文件或目录
你能告诉我这里有什么问题吗?
【问题讨论】:
-
看起来您正在尝试调用库函数
sysinfo()。内核不支持这些东西:那里没有 libc,等等。 -
关于线程/进程的数量,看
<linux/sched.h>中的nr_threads变量以及do_sysinfo(kernel/sys.c)中如何使用in,@的实现987654327@ 系统调用。可能是,这可能会有所帮助。 -
感谢@Eugene 的提示,第一个是非常有效的一点,我们不能在内核中使用 sysinfo() 。我已经使用 fork.c 下的 nr_processes 函数调用几乎解决了这个问题,我会在它完全工作后立即更新解决方案。
标签: linux kernel kernel-module sysinfo