将另一个字段添加到user_struct

时间:2014-12-21 14:17:29

标签: kernel linux-kernel

我想在文件linux-source / kernel / user.c中的user_struct中添加新字段(以存储此用户的就绪进程数)

struct user_struct {
    atomic_t ready_processes; /* I add this field */
    /* not important fields */
}

正确初始化此字段的位置?

1 个答案:

答案 0 :(得分:4)

要向user_struct添加新字段,您需要执行以下三项操作:

  1. user_struct的定义在文件sched.h中(include / linux / sched.h)
    您应该在struct

    中添加字段
    struct user_struct {
        atomic_t ready_processes; /* I added this line! */
        /*Other fields*/
    };
    
  2. 在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,    
    };
    
  3. 您已完成为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! */
    
  4. 注意:它适用于linux 2.6.32.62。我不确定其他版本,但我认为它不应该是非常不同的。