- 论坛徽章:
- 0
|
background: 2.6.35 + arm + nfs
kernel panic,原因是:
/ # Unable to handle kernel NULL pointer dereference at virtual address 00000004
pgd = 80004000
[00000004] *pgd=00000000
于是想写个模块打钱pgd,看它的第一个entry 是什么时候被改写成NULL的。
- #include <linux/module.h>
- #include <linux/slab.h>
- MODULE_LICENSE("GPL");
- int __init pgd_module_init(void)
- {
- unsigned long pgd;
- pgd = *((unsigned long*)0x80004000);
- printk("pgd:%x\n", pgd);
- return 0;
- }
- void __exit pgd_module_exit(void)
- {
- printk("pgd_module_exit\n");
- }
复制代码 说明:
System.map:
80004000 A swapper_pg_dir
swapper_pg_dir是pgd,最开始我试图直接打swaper_pg_dir,但编译说找不到swapper_pg_dir,
于是直接打0x80004000,
现在的问题是:打印*((unsigned long*)0x80004000);的结果是0?
0x80004000应该是页目录表的第一个entry,即第一个页表的地址,不可能是0啊,
于是我又试图打印*((unsigned long*)0x80004000+1);
*((unsigned long*)0x80004000+50);
发现全是0
哪里有问题吗? |
|