我已经更改了linux内核上的task_struct,以添加另一个变量意味着在include/linux/sched.h 下更改结构task_struct
/* weight new field*/
int weight;
/*
* New fields for task_struct should be added above here, so that
* they are included in the randomized portion of task_struct.
*/
randomized_struct_fields_end
在附表h 的第1135行
我希望init的值初始化为0,所以我还添加了一行:
权重=0/在init_task.h中如此:
定义INIT_TASK(tsk(
{
INIT_TAK_TI(tsk,
.flags=PF_KTHREAD,
.prio=MAX_prio-20,
.static_prio=MAX_prio-20,
.normal_prio=MAX_prio-0,
.policy=SCHED_normal,
>.cpus_allowed=CPU_MASK_ALL,
1.nr_cpus_allowed=nr_cpus,
2.mm=NULL,.active_mm=&init_mm,
.restart_block={
.fn=do_no_restart_syscall,
},
.se={
.group_node=LIST_HEAD_init(tsk.se.group_node(,
}任务(,
INIT_PUSHABLE_TASKS(tsk(
INIT_CGROUP_SCHED(tsk;tsk,
parent=&tsk,
.childred=LIST_HEAD_INIT(tsk.children(,
.sibiling=LIST_HEAD_INIT(tsk.sibiling(,
.group_leader=&tsk,
RCU_POINTER_INITIALIZER(real_cred,&init_cred(,
RCU_POINTER_INITIALIZER(cred,&init_cred;init_fs,
.files=&init_files,
.signal=&init_signals,
.sighand=&init_sighand,
.nproxy=&init_nsproxy,
.pending={
.list=list_HEAD_init(tsk.pending.list(,
.signal={{0}},
>.blocked={0}},
.alloc_lock=__SPIN_lock_UNLOCKED(tsk.alloc_lock(,
.journal_info=NULL,
1INIT_CPU_TIMERS(tsk(
.pri_lock=__RAW_SPIN_lock_UNLOCK(tsk.pi_lock(,
.timer_slack_ns=50000,/*50使用默认松弛*/
.pids={
[PIDTYPE_PID]=INIT_PID_LINK(PIDTYPE_PID(,
[PIDTYPE_PGID]=INIT_PID _LINK weight=0,
INIT_IDS
INIT_PERF_EVENTS(tsk
INIT_NUMA_ALANCING(tsk(
NIT_KASAN(tsk/>INIT_TAK_SECURITY
}
由于某些原因,我修改后的内核无法启动。
卡在上的点
错误消息
在init代码中,每行后面都有一个/,stackoverflow只是不显示它
编辑:我在更改后重新编译编译器,我确实打算更改内核空间
IIRC任务结构是用户空间已知其布局的基本结构之一。更改后,您可能需要重新构建binutils并重新编译C库(至少(。这是一项非常艰巨的工作,我可能只需要实现一个并行数据结构,这样用户空间就不需要知道它了