From 98c7c50da1f6d5213cc7b38edb71507a40339255 Mon Sep 17 00:00:00 2001 From: Vreixo Formoso Date: Wed, 3 Oct 2007 21:42:36 +0200 Subject: [PATCH] Add Use Cases and design UML diagram for El-Torito. --- doc/devel/3. Use Cases | 15 +- doc/devel/UML/eltorito.violet | 399 ++++++++++++++++++++++++++++++ doc/devel/UML/eltorito.violet.png | Bin 0 -> 21180 bytes 3 files changed, 413 insertions(+), 1 deletion(-) create mode 100644 doc/devel/UML/eltorito.violet create mode 100644 doc/devel/UML/eltorito.violet.png diff --git a/doc/devel/3. Use Cases b/doc/devel/3. Use Cases index 1437c96..e6e17f0 100644 --- a/doc/devel/3. Use Cases +++ b/doc/devel/3. Use Cases @@ -137,7 +137,20 @@ Phases: 3.2.3 Bootable information -------------------------- -[TODO] + - Addition of a boot image to a volume. + - In most cases, the catalog and the boot image itself is added to the + iso tree. + - Alternatively, user can select to add a hidden images, i.e., images + that don't appear in the iso tree. + - Modification of boot image attributes: + - bootable flag + - load segment + - load size + - Automatic patching of isolinux images. User needs to set whether to apply + this. + - Reading of El-Torito info from multisession images. Modification of its + attributes. + - Removing of El-Torito images 3.2.4 Other operations diff --git a/doc/devel/UML/eltorito.violet b/doc/devel/UML/eltorito.violet new file mode 100644 index 0000000..4a5df24 --- /dev/null +++ b/doc/devel/UML/eltorito.violet @@ -0,0 +1,399 @@ + + + + + + + + Volume + + + + + + 731.0 + 193.0 + + + + + + + + ElToritoCatalog + + + + + + 474.0 + 192.0 + + + + + + + + bootable : bool +type : enum +partition_type : enum +load_seg : uint16 +load_size : uint16 +patch_isolinux : bool + + + + + BootImage + + + + + + 469.0 + 329.0 + + + + + + + + In a future we can support several boot +images + + + + + + 666.0 + 301.0 + + + + + + + + img : boolean + + + + + BootNode + + + + + + 186.0 + 186.0 + + + + + + + + + + TreeNode + + + + + + iso_tree + + + + + 180.0 + 40.0 + + + + + + + + 193.0 + 69.0 + + + + + + + + The img field is an implementation detail, used +to distinguish between the catalog node and the image +node. This is needed when the image is written. + + + + + + 347.0 + 82.0 + + + + + + + + block : uint32_t + + + + + PreviousSessionImage + + + + + + 539.0 + 509.0 + + + + + + + + «interface» +DataSource + + + + + + 746.5857864376269 + 511.3380951166248 + + + + + + + + block : uint32_t + + + + + PreviousSessionCatalog + + + + + + 287.0 + 292.0 + + + + + + + + The support for growing or modify El-Torito images +is really hard to implement. The reason: when the +image is hidden, we don't know its size, so the best we +can do is just refer to the old image. When modify, all +we can do may be wrong. + + + + + + 644.3271028254218 + 382.5643050695048 + + + + + + + + path : char * + + + + + LocalImage + + + + + + 424.0 + 511.0 + + + + + + + + Once we have support for all El-Torito features, namelly +multiple boot images, this type is not needed, the info +can be read and cached in a new catalog. + + + + + + 52.325113060119634 + 434.0605969759931 + + + + + + + + + + + + + 1 image + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0..1 boot_cat + + + + + + + + + + + + + + + 0..1 node + + + + + + + + + + + + + + + + + + + + 0..1 node + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/devel/UML/eltorito.violet.png b/doc/devel/UML/eltorito.violet.png new file mode 100644 index 0000000000000000000000000000000000000000..07fd2b9ed2d63b0fa91333dea932d51b34e594c9 GIT binary patch literal 21180 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 literal 0 HcmV?d00001