1#!/usr/bin/ruby 2 3# display the kernel module dependencies 4 5#based on: modgraph.tcl by: John Ellson <ellson@research.att.com> 6#ruby adaptation by: Patricio Ros <patricioros.dev@gmail.com> 7#additional fixes: Ralph Mueller <ralf.mueller@zmaw.de> 8 9require 'gv' 10 11G = Gv.digraph("G") 12N = Gv.protonode(G) 13E = Gv.protoedge(G) 14 15Gv.setv(G, 'rankdir', 'LR') 16Gv.setv(G, 'nodesep', '0.05') 17Gv.setv(N, 'shape', 'box') 18Gv.setv(N, 'width', '0') 19Gv.setv(N, 'height', '0') 20Gv.setv(N, 'margin', '.03') 21Gv.setv(N, 'fontsize', '8') 22Gv.setv(N, 'fontname', 'helvetica') 23Gv.setv(E, 'arrowsize', '.4') 24 25modules = File.open('/proc/modules', mode="r").readlines 26 27modules.each {|rec| 28 fields = rec.split(' ') 29 n = Gv.node(G, fields[0]) 30 fields[3].split(',').each {|usedby| 31 Gv.edge(n, Gv.node(G, usedby)) if (usedby != '-') and (usedby != '') 32 } 33} 34 35Gv.layout(G, 'dot') 36Gv.render(G, 'xlib') 37