我使用的是android-kernel 2.6.29。我试图在android-kernel上挂钩开放系统调用。我按照链接http://syprog.blogspot.com.au/2011/10/hijack-linux-system-calls-part-iii.html挂钩ubuntu 12.04LTS并成功但是当我交叉编译我的模块的android然后我得到以下错误
错误:隐式lookup_address函数
任何人都可以帮忙吗?为什么我收到此错误?有什么替代的lookup_address?
答案 0 :(得分:0)
根据Linux Cross-reference判断ARM架构的适当标准,参考第一个引用的内核版本2.6.32(没有2.6.29 不幸)
尽管设定了标准,但交叉引用将产生主要指x86架构的命中。引用:
lookup_address
Defined as a function in:
arch/x86/mm/pageattr.c, line 295
arch/sh/kernel/io_trapped.c, line 162
Defined as a function prototype in:
arch/x86/include/asm/pgtable_types.h, line 330
Referenced (in 11 files total) in:
arch/x86/include/asm/pgtable_types.h, line 330
arch/x86/mm/kmemcheck/pte.c, line 12
arch/x86/mm/kmemcheck/kmemcheck.c:
line 269
line 295
arch/x86/mm/pageattr-test.c:
line 60
line 150
line 183
line 203
line 215
arch/x86/mm/mmio-mod.c, line 96
arch/x86/mm/fault.c, line 577
arch/x86/mm/kmmio.c, line 136
arch/x86/mm/pageattr.c:
line 200
line 238
line 295
line 326
line 371
line 487
line 606
line 1288
arch/x86/xen/mmu.c:
line 335
line 347
line 362
arch/x86/xen/enlighten.c:
line 281
line 364
arch/sh/kernel/io_trapped.c:
line 162
line 228
line 251
查看x86/mm/pageattr.c
here中的实际源函数,只是为了显示函数的外观:
295 pte_t *lookup_address(unsigned long address, unsigned int *level)
296 {
297 pgd_t *pgd = pgd_offset_k(address);
298 pud_t *pud;
299 pmd_t *pmd;
300
301 *level = PG_LEVEL_NONE;
302
303 if (pgd_none(*pgd))
304 return NULL;
305
306 pud = pud_offset(pgd, address);
307 if (pud_none(*pud))
308 return NULL;
309
310 *level = PG_LEVEL_1G;
311 if (pud_large(*pud) || !pud_present(*pud))
312 return (pte_t *)pud;
313
314 pmd = pmd_offset(pud, address);
315 if (pmd_none(*pmd))
316 return NULL;
317
318 *level = PG_LEVEL_2M;
319 if (pmd_large(*pmd) || !pmd_present(*pmd))
320 return (pte_t *)pmd;
321
322 *level = PG_LEVEL_4K;
323
324 return pte_offset_kernel(pmd, address);
325 }
326 EXPORT_SYMBOL_GPL(lookup_address);