ldd3中scullv模块vm_operations_struct -> nopage到vm_operations_struct ->fault的变换

  • Post author:
  • Post category:其他


关于ldd3的scullv,在编译过程中,主要是vm_operations_struct中现在的kernel中已经没有.nopage这一operation了,其被 fault替换了。下面逐一说明:

(1)main.c中,主要就是就是上一篇文章提到的INIT_WORK, schedule_delayed_work等改变。可以参考逐一改变即可。

(2)在scullv.h中,需要包含头文件<linux/semaphore.h>,否则会提示struct semaphore sem没有定义之类的错误。

(3)关键的改变在mmap.c中,由于vm_operations_struct的变化,需要对mmap.c做如下变化:

a.包含头文件<linux/fs.h>,否则在函数scull_mmap中,会提示

vma->vm_private_data = filp->private_data;

dereferencing pointer to incomplete type.这是因为其找不到struct file的定义。

b. 以前的函数

struct page *scullv_vma_nopage(struct vm_area_struct *vma, unsigned long address, int *type)

现在其后面的参数address, type都可以通过结构struct vm_fault来获得。该函数需要改变为:

static int scullv_vma_fault (struct vm_area_struct *vma, st



版权声明:本文为makethyme原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。