如何包含linux内核头文件

时间:2014-08-26 02:00:22

标签: linux-kernel

我正在尝试一些Linux内核开发。

我在包含头文件 sched.h 时遇到问题(存在于路径/usr/src/linux-3.12.26/kernel/sched中,而不是在/ usr / src /中linux-3.12.26 / include / linux)。

但是当我" sudo制作-C /usr/src/linux-3.12.26/ M = $(pwd)模块"我收到错误"致命错误:kernel / sched / sched.h:不存在"

这是我的代码:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/percpu.h>
#include </usr/src/linux-3.12.26/kernel/sched/sched.h>

int __init init_current(void){
    int cpu_num=0;
    struct task_struct *p;
    for(cpu_num=0;cpu_num<8;cpu_num++)
    {
     p=curr_task(cpu_num);
     printk(KERN_ALERT "current task on cpu %d is %d\n", cpu_num, p->pid);
    }
    return 0;
}

void __exit exit_current(void)
{
   printk(KERN_ALERT "FINISHED!\n");
}

MODULE_LICENSE("GPL");
module_init(init_current);
module_exit(exit_current);

代码中可能存在一些错误。我的目的是让当前运行的进程在不同的核心。

@Santosh A。感谢继续关注我的谜题。在我更改了/usr/src/linux-3.12.26/中的Makefile后(看到我上面的答案,它可能不是规范性的,但是工作),标题我包括可以找到。然后我得到另一个问题。这是我的代码:

#include <linux/init.h>
#include <linux/module.h>
//#include <linux/sched.h>
#include <linux/percpu.h>
#include <sched/sched.h>
static int __init init_current(void){
int cpu_num=0;
extern struct task_struct *p;
struct rq *q;
extern struct rq * cpu_rq(int);
for(cpu_num=0;cpu_num<8;cpu_num++)
{
 q=cpu_rq(cpu_num);
 p=q->curr;
 printk(KERN_ALERT "current task on cpu %d is %d\n", cpu_num, p->pid);
}
return 0;
}

static void __exit exit_current(void)
{
 printk(KERN_ALERT "FINISHED!\n");
}

MODULE_LICENSE("GPL");
module_init(init_current);
module_exit(exit_current);

以下是错误信息:

/home/wison/code/current/current.c: In function ‘init_current’:
kernel/sched/sched.h:539:23: error: expected identifier or ‘(’ before ‘&’ token
 #define cpu_rq(cpu)  (&per_cpu(runqueues, (cpu)))
               ^
/home/wison/code/current/current.c:11:28: note: in expansion of macro ‘cpu_rq’
 extern struct rq * cpu_rq(int);

0 个答案:

没有答案