2016-04-20 54 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文件將提供信息。無論哪種方式,我不知道如何在代碼中動態獲取地址。

相關問題