OpenEuler插入内核模块时发生没有可制作目标错误
收藏回复举报
OpenEuler插入内核模块时发生没有可制作目标错误
t('forum.solved') 已解决
新人帖
发表于2023-11-02 13:38:39
0 查看

本人正在进行操作系统实验的时候遇到如下问题:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/pid.h>
#include <linux/resource.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("MRX");
MODULE_DESCRIPTION("view status");
MODULE_VERSION("0.1");
static int pid;
module_param(pid, int, 0644);

static int __init my_usage_init(void)
{
    struct pid *pid_struct;
        struct task_struct *task;
        struct rusage r;

        pid_struct = find_get_pid(pid);
        if (!pid_struct) {
                printk(KERN_ERR "Failed to get PID structure for PID %d\n", pid);
            return -1;
        }

        task = pid_task(pid_struct, PIDTYPE_PID);
        if (!task) {
            printk(KERN_ERR "Failed to get task_struct for PID %d\n", pid);
            return -1;
        }

        getrusage(task, RUSAGE_SELF, &r);

       printk(KERN_INFO "Resource usage for PID %d:\n", pid);
        printk(KERN_INFO "User time: %ld.%06ld seconds\n", r.ru_utime.tv_sec, r.ru_utime.tv_usec);
        printk(KERN_INFO "System time: %ld.%06ld seconds\n", r.ru_stime.tv_sec, r.ru_stime.tv_usec);
        printk(KERN_INFO "Minor faults (no I/O): %ld\n", r.ru_minflt);
        printk(KERN_INFO "Major faults (with I/O): %ld\n", r.ru_majflt);
        printk(KERN_INFO "Swaps: %ld\n", r.ru_nswap);

        return 0;
}


static void __exit my_usage_exit(void)
{
    printk(KERN_INFO "Resource usage module unloaded\n");
}

module_init(my_usage_init);
module_exit(my_usage_exit);

上述为my_usage.c中的内容

然后我要通过makefile将其插入至内核中,makefile内容如下

obj-m := my_usage.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

执行 sudo make后发生如下错误

➜  homework sudo make
make -C /lib/modules/5.10.0-153.12.0.92.oe2203sp2.x86_64/build M= modules
make[1]: 进入目录“/usr/src/kernels/5.10.0-153.12.0.92.oe2203sp2.x86_64”
make[2]: *** 没有规则可制作目标“arch/x86/tools/relocs_32.c”,由“arch/x86/tools/relocs_32.o” 需求。 停止。
make[1]: *** [arch/x86/Makefile:222:archscripts] 错误 2
make[1]: 离开目录“/usr/src/kernels/5.10.0-153.12.0.92.oe2203sp2.x86_64”
make: *** [Makefile:4:all] 错误 2

本帖最后由 匿名用户2023/11/23 11:31:02 编辑

我要发帖子