2016-04-20 57 views
2

我有一个名为drv1的字符驱动程序,用户应用程序使用ioctl与它通信,它将传输参数struct file *filp。现在我想知道drv1的代码段的地址,但是我遇到了一些问题。如何在tmpfs中找到Linux驱动程序的代码段? (实时)

起初,我想struct file *filp可能是有用的,所以我看着源代码中的定义,并找到一个指针struct inode *f_inode; /* cached value */。然后,我大致搜索struct inode的定义(我不确定是否正确,因为我不熟悉tmpfs);一个名为的指针struct address_space * i_mapping似乎是我需要的。但我不知道如何深入挖掘并卡住;有在struct address_space一些复杂的数据结构,如:

struct radix_tree_root page_tree; /* radix tree of all pages */ 

struct rb_root i_mmap;   /* tree of private and shared mappings */ 

这是否意味着司机DRV1的数据被组织为radix_tree_root形式?或者这是否意味着我错过了其他的东西?

回答

0

看来,对于构建为LKM的模块,内存在MODULES_VADDRMODULES_END之间动态分配(请参阅module.carch/($YOUR_ARCH)/kernel/module.c)。我可以通过使用shell命令来获得其函数地址的起始地址,但是在我的代码中没有好的方法。

对于构建在内核映像中的模块,System.map文件将提供信息。无论哪种方式,我不知道如何在代码中动态获取地址。

相关问题