Version 0.2.7 for release.
[virt-mem.git] / HACKING
diff --git a/HACKING b/HACKING
index 52b9829..bedcc68 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -1,3 +1,6 @@
+Source files
+------------
+
 We build all the tools into a single virt-mem executable, in order to
 share the most runtime.  Almost all the code between individual tools
 is shared anyway.
@@ -7,15 +10,46 @@ lib/
  - The common core of all the tools.  Library, kernel symbols, command
    line handling, memory images, etc.
 
-   lib/virt_mem.ml contains most of the important code.
+   lib/virt_mem.ml contains most of the important 'glue' code.
 
 uname/
 dmesg/
   etc.
 
- - The code specific to each tool, usually rather small.
+ - The code specific to each tool.  This is usually rather small because
+   the code in lib/ does the hard work.
 
 mem/
 
  - This brings everything together and links it into a single executable.
    Other than that purpose, there is almost nothing in this directory.
+
+General structure of lib/virt_mem.ml
+------------------------------------
+
+We start with a bare kernel memory image ('Virt_mem_types.image0')
+which gets successively enhanced with extra data along the way:
+
+       Parse command line arguments,
+       work out what virtual machines to
+       process, load kernel images
+
+               |
+               |       (passes a 'Virt_mem_types.image0')
+               V
+
+       Find kernel symbols
+
+               |
+               |       (enhanced into a 'Virt_mem_types.image1')
+               V
+
+       Find kernel version (uname)
+
+               |
+               |       (enhanced into a 'Virt_mem_types.image2')
+               V
+
+       Call tool's "run" function.
+
+Tools can register other callbacks which get called at earlier stages.
\ No newline at end of file