Ich habe einen Zeichentreiber namens drv1, und eine Benutzeranwendung verwendet ioctl
, um damit zu kommunizieren, die den Parameter struct file *filp
übertragen wird. Jetzt möchte ich die Adresse des Codesegments von drv1 herausfinden, aber ich stieß auf einige Probleme.Wie finde ich das Code-Segment eines Linux-Treibers in tmpfs? (in Echtzeit)
Zuerst, ich denke, struct file *filp
könnte nützlich sein, so schaute ich auf die Definition im Quellcode, und finde einen Zeiger struct inode *f_inode; /* cached value */
. Dann habe ich grob die Definition von struct inode
durchsucht (ich bin mir nicht sicher, ob es richtig ist, da ich nicht vertraut bin, wenn tmpfs); ein Zeiger namens struct address_space * i_mapping scheint zu sein, was ich brauche. Aber ich weiß nicht, wie ich tiefer graben und stecken bleiben kann; gibt es einige komplizierte Datenstrukturen in der struct address_space
, wie zum Beispiel:
struct radix_tree_root page_tree; /* radix tree of all pages */
und
struct rb_root i_mmap; /* tree of private and shared mappings */
es bedeutet, dass die Daten des Fahrers drv1 als Form radix_tree_root
organisiert ist? Oder bedeutet es, dass ich etwas anderes verpasst habe?