[Concept,02/24] doc: Provide documentation for the blkmap command
Commit Message
From: Simon Glass <sjg@chromium.org>
This command lacks documentation in the normal place. Add it.
Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
---
doc/usage/blkmap.rst | 5 +
doc/usage/cmd/blkmap.rst | 323 +++++++++++++++++++++++++++++++++++++++
doc/usage/index.rst | 1 +
3 files changed, 329 insertions(+)
create mode 100644 doc/usage/cmd/blkmap.rst
@@ -109,3 +109,8 @@ Now we can access the filesystem:
blkmap get sq dev devnum
load blkmap ${devnum} ${loadaddr} /etc/version
+
+See also
+--------
+
+* :doc:`/usage/cmd/blkmap`
new file mode 100644
@@ -0,0 +1,323 @@
+.. SPDX-License-Identifier: GPL-2.0+
+
+.. index::
+ single: blkmap (command)
+
+blkmap command
+==============
+
+Synopsis
+--------
+
+::
+
+ blkmap info
+ blkmap part
+ blkmap dev [<dev>]
+ blkmap read <addr> <blk#> <cnt>
+ blkmap write <addr> <blk#> <cnt>
+ blkmap get <label> dev [<var>]
+ blkmap create <label>
+ blkmap destroy <label>
+ blkmap map <label> <blk#> <cnt> linear <interface> <dev> <blk#>
+ blkmap map <label> <blk#> <cnt> mem <addr>
+
+Description
+-----------
+
+The *blkmap* command is used to create and manage virtual block devices that
+are composed of one or more "slices" mapped from other block devices or memory
+regions.
+
+See :doc:`../blkmap` for an overview of the blkmap subsystem and usage examples.
+
+label
+ Unique label assigned to a blkmap device during creation. Used to identify
+ the device for subsequent operations (map, get, destroy).
+
+blk#
+ Block number. Blocks are 512 bytes in size. When used as a starting position,
+ this specifies where in the device to begin the operation. When used as a
+ mapping parameter, it indicates which block in the source or destination to
+ use.
+
+cnt
+ Number of blocks (count). Each block is 512 bytes, so cnt=1 represents 512
+ bytes, cnt=2048 represents 1MB, etc.
+
+addr
+ Memory address in hexadecimal format (e.g., ${loadaddr}, 0x82000000). Used
+ for specifying where to read/write data or where a memory region is located.
+
+blkmap info
+~~~~~~~~~~~
+
+List all configured blkmap devices and their properties::
+
+ blkmap info
+
+This displays information about all active blkmap devices, including device
+number, vendor, product, revision, type, and capacity.
+
+blkmap part
+~~~~~~~~~~~
+
+List available partitions on the current blkmap device::
+
+ blkmap part
+
+This command displays the partition table of the currently selected blkmap
+device. If the device has no partition table (whole-disk filesystem), it will
+report "no blkmap partition table available".
+
+blkmap dev
+~~~~~~~~~~
+
+Show or set the current blkmap device::
+
+ blkmap dev [<dev>]
+
+dev
+ Optional device number to set as current. If omitted, displays the current
+ device information.
+
+blkmap read
+~~~~~~~~~~~
+
+Read data from the current blkmap device::
+
+ blkmap read <addr> <blk#> <cnt>
+
+blkmap write
+~~~~~~~~~~~~
+
+Write data to the current blkmap device::
+
+ blkmap write <addr> <blk#> <cnt>
+
+**Note**: Write support is limited and may not be available for all blkmap
+types.
+
+blkmap get
+~~~~~~~~~~
+
+Get the device number for a labeled blkmap device::
+
+ blkmap get <label> dev [<var>]
+
+var
+ Optional environment variable name to store the device number. If omitted,
+ the device number is printed to stdout.
+
+This is useful for scripting, allowing you to find a blkmap device by its label
+and store or use its device number.
+
+blkmap create
+~~~~~~~~~~~~~
+
+Create a new blkmap device with the specified label::
+
+ blkmap create <label>
+
+After creation, the device has no mappings and is empty. Use ``blkmap map``
+to add slices to the device.
+
+blkmap destroy
+~~~~~~~~~~~~~~
+
+Destroy a blkmap device and free its resources::
+
+ blkmap destroy <label>
+
+This removes the blkmap device and all its mappings. Any data stored only in
+the blkmap device will be lost.
+
+blkmap map - linear
+~~~~~~~~~~~~~~~~~~~
+
+Map a region from another block device into the blkmap device::
+
+ blkmap map <label> <blk#> <cnt> linear <interface> <dev> <blk#>
+
+label
+ Label of the blkmap device to map into
+
+blk#
+ Starting block number in the blkmap device where this mapping begins
+
+cnt
+ Number of blocks to map
+
+interface
+ Source device interface (e.g., mmc, usb, scsi)
+
+dev
+ Source device number
+
+blk# (last parameter)
+ Starting block number on the source device
+
+This creates a linear mapping that redirects reads from a region of the blkmap
+device to the corresponding region on another block device. Multiple mappings
+can be added to compose a single virtual device from multiple sources.
+
+blkmap map - mem
+~~~~~~~~~~~~~~~~
+
+Map a memory region as a block device::
+
+ blkmap map <label> <blk#> <cnt> mem <addr>
+
+label
+ Label of the blkmap device to map into
+
+blk#
+ Starting block number in the blkmap device where this mapping begins
+
+cnt
+ Number of blocks to map
+
+addr
+ Memory address of the data to map
+
+This creates a mapping that exposes a memory region as block device sectors.
+The memory region must be at least ``cnt * 512`` bytes in size.
+
+Usage Examples
+--------------
+
+See :doc:`../blkmap` for complete examples including:
+
+* Netbooting an Ext4 image
+* Accessing filesystems inside FIT images
+* Creating composite devices from multiple sources
+* Using memory-backed block devices
+
+Implementation Details
+----------------------
+
+Blkmap devices are implemented as standard U-Boot block devices (UCLASS_BLK)
+with a custom driver. Each device maintains an ordered list of "slices" -
+mappings from a range of blocks to a source (another device or memory region).
+
+See :doc:`../blkmap` for more details on the implementation.
+
+Configuration
+-------------
+
+The blkmap command is available when CONFIG_CMD_BLKMAP is enabled::
+
+ CONFIG_BLKMAP=y
+ CONFIG_CMD_BLKMAP=y
+
+Return Value
+------------
+
+The return value $? is set to 0 on success, 1 on failure.
+
+Examples
+--------
+
+List all blkmap devices
+~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+ => blkmap info
+ Device 0: Vendor: U-Boot Rev: 1.0 Prod: blkmap
+ Type: Hard Disk
+ Capacity: 60.0 MB = 0.0 GB (122880 x 512)
+
+Check or set current device
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+ => blkmap dev
+ Device 0: Vendor: U-Boot Rev: 1.0 Prod: blkmap
+ Type: Hard Disk
+ Capacity: 60.0 MB = 0.0 GB (122880 x 512)
+ ... is now current device
+
+ => blkmap dev 0
+ Device 0: Vendor: U-Boot Rev: 1.0 Prod: blkmap
+ Type: Hard Disk
+ Capacity: 60.0 MB = 0.0 GB (122880 x 512)
+ ... is now current device
+
+Create a new device
+~~~~~~~~~~~~~~~~~~~
+
+::
+
+ => blkmap create mydisk
+ => blkmap info
+ Device 0: Vendor: U-Boot Rev: 1.0 Prod: blkmap
+ Type: Hard Disk
+ Capacity: 0.0 MB = 0.0 GB (1 x 512)
+
+Map a linear region from MMC
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Map MMC blocks 1000-1999 to blkmap blocks 0-999::
+
+ => blkmap create composed
+ => blkmap map composed 0 1000 linear mmc 0 1000
+
+Map memory as a block device
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Map 1MB of memory as blocks::
+
+ => blkmap create ramdisk
+ => blkmap map ramdisk 0 2048 mem ${loadaddr}
+
+Read from a blkmap device
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+ => blkmap dev 0
+ => blkmap read ${loadaddr} 0 10
+ blkmap read: device 0 block # 0, count 10 ... 10 blocks read: OK
+
+Get device number by label
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+ => blkmap get testdev dev mydev
+ => printenv mydev
+ mydev=0
+
+Complete workflow example
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Create, map, and use a device::
+
+ => blkmap create testdev
+ => blkmap map testdev 0 2048 linear mmc 0 2048
+ => blkmap dev 0
+ => blkmap read ${loadaddr} 0 1
+
+Destroy a device
+~~~~~~~~~~~~~~~~
+
+::
+
+ => blkmap destroy mydisk
+
+Accessing whole-disk filesystems
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Blkmap devices often contain whole-disk filesystems (no partition table).
+Access them using partition 0 or omitting the partition specification::
+
+ => ls blkmap 0 /
+ => ext4load blkmap 0 ${loadaddr} /boot/vmlinuz
+ => cat blkmap 0 /etc/config.txt
+
+See Also
+--------
+
+* :doc:`../blkmap` - Blkmap device documentation and examples
@@ -34,6 +34,7 @@ Shell commands
cmd/bdinfo
cmd/bind
cmd/blkcache
+ cmd/blkmap
cmd/bootd
cmd/bootdev
cmd/bootefi