如何检查给定页面是否是内核模块中的ZERO_PAGE?

时间:2018-05-15 19:29:09

标签: linux linux-kernel mmu rhel5 kbuild

我正在编写一个内核模块,其中,在一个函数中我需要检查是否通过了 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&#39; &#39; .ko&#39; ,它给出错误&#34;未知符号&#34;。并打印
&#34;未知符号phys_base&#34;在日志缓冲区中。
我的Makefile:

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)
我试图找到一些其他的界面&#39;在内核中检查页面是否为ZERO_PAGE,但没有运气 有人可以告诉我如何摆脱这个错误。或任何其他方式来检查这种情况?

注意:我遇到了这个针对同一问题的kernelnewbie thread。包括<asm/pgtable.h>但没有帮助。

1 个答案:

答案 0 :(得分:0)

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

best = BaseClass()
abs = AbstractClass()
abs.start # AttributeError: 'AbstractClass' object has no attribute 'start'

谢谢。