0

我正在编写一个内核模块,在一个函数内部,我需要检查是否传递了
struct page*映射ZERO_PAGE
我想出了以下代码来检查条件。

foo (struct page *pp, ..) {
     if(pp == ZERO_PAGE(0)) {
          //say, prefault the page.
     }
}

当我尝试编译它时,我收到以下警告消息:

WARNING: "phys_base" [<path_to_'.ko'] undefined!

当我尝试“insmod”“.ko”时,它会给出错误“未知符号”
。并在日志缓冲区中打印“未知符号 phys_base”。
我的制作文件:

obj-m :=zero_page.o

KDIR=/lib/modules/`uname -r`/build

all:
        make -C $(KDIR) M=`pwd` modules

我正在为其编写模块的内核版本:
2.6.18-398.el5 (rhel 5.11)
我试图在内核中找到一些其他“接口”来检查页面是否为 ZERO_PAGE,但没有运气。
有人可以告诉我如何摆脱这个错误。或者任何其他方式来检查这种情况?

注意:我遇到了这个 kernelnewbie线程,它解决了同样的问题。包括<asm/pgtable.h>但没有帮助。

4

1 回答 1

0

我能够想出一个解决这个问题。
在浏览了一些内核代码后,我发现,对于 ZERO_PAGE address_space ptr 是 NULL。
因此修复看起来像这样:

if(page->mapping == NULL) {
   // Its a ZERO_PAGE.
}

谢谢你。

于 2018-06-22T08:57:22.673 回答