Linux kernel 如何包含linux内核头文件
我正在尝试一些Linux内核开发 我在包含头文件sched.h时遇到了一个问题,它存在于路径/usr/src/linux-3.12.26/kernel/sched中,而不是/usr/src/linux-3.12.26/include/linux中 但是当我sudo make-C/usr/src/linux-3.12.26/M=$pwd modules时,我得到了一个错误致命错误:kernel/sched/sched.h:不存在 这是我的密码:Linux kernel 如何包含linux内核头文件,linux-kernel,Linux Kernel,我正在尝试一些Linux内核开发 我在包含头文件sched.h时遇到了一个问题,它存在于路径/usr/src/linux-3.12.26/kernel/sched中,而不是/usr/src/linux-3.12.26/include/linux中 但是当我sudo make-C/usr/src/linux-3.12.26/M=$pwd modules时,我得到了一个错误致命错误:kernel/sched/sched.h:不存在 这是我的密码: #include <linux/init.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);
#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);
我怀疑sched.h只用于包含在密切相关的目录中的代码,所以它不是include路径的一部分。出于更根本的原因,您尝试执行的操作可能不可行,但您可以通过简单地说include(包括),甚至不可移植地说include(包括),让它查找文件,但只是为了查看您将遇到的其他问题,用引号而不是尖括号指定文件的完整绝对路径。
/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);