我正在尝试一些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);