linux_kernel 系统调用中未声明 [​​=10=]

Undeclared ptep_t in linux_kernel system call

我正在 Linux 内核中使用以下系统调用,它获取进程的虚拟地址并输出以下信息:

  1. 如果这个地址的数据在内存或者磁盘上。

  2. 该地址所属页面是否被引用

  3. 该地址所属页是否脏。

    #include<linux/kernel.h>
    #include<linux/sched.h>
    #include<asm/page.h>
    #include<asm/pgtable.h>
    #include<linux/mm_types.h>
    
    asmlinkage int sys_vma_props(unsigned long mem,int pid)
    {
      struct task_struct *task=find_task_by_vpid(pid);
      struct mm_struct *memory=task->active_mm;
    
      int data=0;
      int ref=0;
      int dirty =0;
    
      pgd_t *pgd=pgd_offset(memory,mem);
      pud_t *pud=pud_offset(pgd,mem);
      pmd_t *pmd=pmd_offset(pud,mem);
      ptet_t *ptep=pte_offset_kernel(pmd,mem);
      pte_t pte=*ptep;
    
      data=pte_present(pte);
      printk("present flag: %i\n",data?1:0);
    
      ref=pte_young(pte);
      printk("referenced flag: %i\n",ref?1:0);
    
      dirty=pte_dirty(pte);
      printk("dirty flag: %i\n",dirty?1:0);
    
      return 0;
    }
    

但是,ptep_t 变量和 ptep 变量出现以下错误。我已经研究过,这对我来说很有意义,所以我不确定问题出在哪里。是什么导致了错误?任何建议将不胜感激。

address/sys_vadd.c:19: error: ‘ptep_t’ undeclared (first use in this function)
address/sys_vadd.c:19: error: (Each undeclared identifier is reported only once
address/sys_vadd.c:19: error: for each function it appears in.)

address/sys_vadd.c:19: error: ‘ptep’ undeclared (first use in this function)
address/sys_vadd.c:20: warning: ISO C90 forbids mixed declarations and code

问题是您为 ptep 变量使用了错误的类型。应该是 pte_t 而不是 ptet_t.