linux_kernel 系统调用中未声明 [=10=]
Undeclared ptep_t in linux_kernel system call
我正在 Linux 内核中使用以下系统调用,它获取进程的虚拟地址并输出以下信息:
如果这个地址的数据在内存或者磁盘上。
该地址所属页面是否被引用
该地址所属页是否脏。
#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
.
我正在 Linux 内核中使用以下系统调用,它获取进程的虚拟地址并输出以下信息:
如果这个地址的数据在内存或者磁盘上。
该地址所属页面是否被引用
该地址所属页是否脏。
#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
.