Для того, чтобы добавить новое поле в user_struct
, что вам нужно сделать 3 вещи:
Определение user_struct
находится в файле sched.h (включить/Linux/sched.h)
You должно добавить ваше поле в struct
.
struct user_struct {
atomic_t ready_processes; /* I added this line! */
/*Other fields*/
};
В user.c (ядро/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,
};
Вы сделали с инициализацией вашего поля для корневого пользователя, но вы также должны инициализировать его для других пользователей.
С этой целью в 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. Я не уверен в других версиях, но думаю, что это не должно быть совсем иначе.