我想在文件linux-source / kernel / user.c中的user_struct中添加新字段(以存储此用户的就绪进程数)
struct user_struct {
atomic_t ready_processes; /* I add this field */
/* not important fields */
}
正确初始化此字段的位置?
答案 0 :(得分:4)
要向user_struct
添加新字段,您需要执行以下三项操作:
user_struct
的定义在文件sched.h中(include / linux / sched.h)
您应该在struct
。
struct user_struct {
atomic_t ready_processes; /* I added this line! */
/*Other fields*/
};
在user.c(kernel / user.c)第51行中,user_struct
全局实例化root_user
。在这里给你的领域一个值。
struct user_struct root_user = {
.ready_processes = ATOMIC_INIT(1), /* I added this line! */
.__count = ATOMIC_INIT(2),
.processes = ATOMIC_INIT(1),
.files = ATOMIC_INIT(0),
.sigpending = ATOMIC_INIT(0),
.locked_shm = 0,
.user_ns = &init_user_ns,
};
您已完成为root用户初始化字段,但您也应该为其他用户初始化该字段。
为此目的,在user.c中,转到新用户分配和初始化的函数alloc_uid
。例如,您看到有一行atomic_set(&new->__count, 1);
初始化__count
。在此旁边添加初始化代码。
atomic_set(&new->__count, 1);
atomic_set(&new->ready_processes, 1); /* I added this line! */
注意:它适用于linux 2.6.32.62。我不确定其他版本,但我认为它不应该是非常不同的。