user: Add the boot image tool command.

This commit is contained in:
Chris Johns 2019-06-12 14:19:32 +10:00
parent cf0c79ac22
commit 8c3fac9067
2 changed files with 446 additions and 0 deletions

445
user/tools/boot-image.rst Normal file
View File

@ -0,0 +1,445 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
.. Copyright (C) 2019 Chris Johns <chrisj@rtems.org>
.. _RTEMSExecutableInfomation:
RTEMS Boot Image
================
.. index:: Tools, rtems-boot-image
The RTEMS Boot Image (:program:`rtems-boot-image`) command is an RTEMS
tool to create disk images suitable for SD cards to boot RTEMS on a
range of boards. The supported hosts are:
- FreeBSD
- Linux
- MacOS
The tool captures the specific details for a host operating system to
create a bootable disk image as well as capturing the specific detail
of the boards that are supported. The tool brings these detail
together under a sigle command line interface that is portable across
the supported hosts.
The boot image tool can:
- Create a disk image to boot an RTEMS executable
- Create a disk image to network boot an RTEMS executable
- Convert an RTEMS executable into the format a board's bootloader
can load.
The disk images are suitable for booting a range of hardware that have
media interfaces, such as an SD card. The default partition type is
the Master Boot Record (MRB) and a single root DOS-FS partition is
created.
Boot Loaders
------------
The boot image tool supports the following boot loaders:
- U-boot
U-Boot
~~~~~~
The U-Boot boards supported are:
- BeagleBone (`arm-ti-am335x_evm`)
- Zedboard (`arm-xilinx-zynq-common`)
These boards can be booted with executable and Flat Device Tree (FDT)
blobs on disk or view a network if supported by the boards.
The boot image tool can create the following boot configurations for
U-Boot:
- **Executable**
A kernel executable is copied in the disk image, loaded by U-Boot
and control is passed to the kernel. A reset is performed if the
load fails or the kernel returns control to U-Boot.
- **Executable and FDT**
A kernel executable and FDT blob are copied to the disk image,
loaded by U-boot and control is passed to the kernel. A reset is
performed if the load fails or the kernel returns control to U-Boot.
- **Network DHCP and Executable**
The board's network interface is initialised, a DHCP request made
and a kernel image loaded using TFTP. The loaded kernel is passed
control. A reset is performed if the load fails or the kernel
returns control to U-Boot.
- **Network DHCP, Executable and FDT**
The board's network interface is initialised, a DHCP request made
and a kernel image loaded using TFTP. The loaded kernel is passed
control. A reset is performed if the load fails or the kernel
returns control to U-Boot.
The FDT can be installed in and disk image and loaded from it on
each boot.
- **Network Static IP and Executable**
The board's network interface is initialised with a static IP
address and a kernel image loaded using TFTP. The loaded kernel is
passed control. A reset is performed if the load fails or the kernel
returns control to U-Boot.
- **Network Static IP, Executable and FDT**
The board's network interface is initialised with a static IP
address and a kernel image loaded using TFTP. The loaded kernel is
passed control. A reset is performed if the load fails or the kernel
returns control to U-Boot.
The FDT can be installed in and disk image and loaded from it on
each boot.
Hosts
-----
The hosts each require specific set up to run the boot image
buildier. The tool creates special devices to access the image as a
disk and runs file system partitioning and formatting tools. These
tools typically require super user or root access. It is not good
practice to run commands like this one as root and so the tool
dispatches any specific command that needs higher privileges via
``sudo``. If you see a password prompt please enter your password, not
a root password if you have one confgiured.
FreeBSD
~~~~~~~
Install the ``sudo`` package. All commands used are in standard
operating system paths and should not require any specific
configurations.
Linux
~~~~~
The loop back kernel module needs to be loaded.
MacOS
~~~~~
All command used are part of the base OS. No external packages are
required.
Configuration
-------------
The boot image tool is configured by the file :file:`rtems-boot.ini`
that is installed in the
Command
-------
The :program:`rtems-boot-image` tool creates a boot disk image for a
specified board. The command line options are:
:program:`rtems-boot-image`
.. option:: -h, --help
Display the command line help.
.. option:: -l, --log
Set the log file name. The default is
:file:`rtems-log-boot-image.txt`.
.. option:: -v, --trace
Enable trace or debug logging.
.. option:: -s IMAGE_SIZE, --image-size IMAGE_SIZE
Set the image size. The size can be in SI units of ``k``, ``m``, or
``g``. The size needs to be something the host's parition and
format tools will accept and it must be large enough to fit the
root partition plus any alignments. The default is ``64m``.
.. option:: -F FS_FORMAT, --fs-format FS_FORMAT
Specify type type of format. The supported formats are ``fat16``
and ``fat32``. The default format is ``fat16``.
.. option:: -S FS_SIZE, --fs-size FS_SIZE
Set the size of the first partition in the disk image. The
partition need to be less than the size of the image plus the
alignment. The default size is ``auto`` which will fill the image
with the partition.
.. option:: -A FS_ALIGN, --fs-align FS_ALIGN
Set the alignment of the first partition. The default is ``1m``.
.. option:: -k KERNEL, --kernel KERNEL
Optionally provide a kernel image that is copied into the root
partition of the disk image and loaded and run when the board
boots. The file is an RTEMS executable in the ELF format which is
converted to a format the boot loader can load.
.. option:: -d FDT, --fdt FDT
Optionally provide a FDT blob that is copied into the root
partition of the disk image and loaded when the board boots. If a
kernel is provided or a kernel is loaded via a net boot a kernel
boot with FDT is executabled. The file is an FDT blob created by
the FDT compiler.
.. option:: -f FILE, --file FILE
Optionally provide a file to be copied to the root partition of the
disk image. This option can be provided more than once if more than
one file needs to be installed.
.. option:: --net-boot
Not used and will be removed.
.. option:: --net-boot-dhcp
Configure a network boot using DHCP. The kernel will be loaded
using TFTP and the file request can be specific by the
``--net-boot-file`` option.
.. option:: --net-boot-ip NET_BOOT_IP
Configure a network boot using a static IP address. The kernel will
be loaded using TFTP and the file request can be specific by the
``--net-boot-file`` option. A server IP needs to be specified using
the ``--net-boot-server``.
.. option:: --net-boot-file NET_BOOT_FILE
Specify the kernel image file name requested using the TFTP
protocol. The default is :file:`rtems.img`.
.. option:: --net-boot-fdt NET_BOOT_FDT
Optionally specify the file name of a FDT blob loaded using the
TFTP protocol. If a net boot FDT file is provide the kernel will be
executable with a suitable kernel and FDT boot command.
.. option:: -U CUSTOM_UENV, --custom-uenv CUSTOM_UENV
Optionally provide a custom U-boot :file:`uEnv.txt` file that is
copied to into the root directory of the root partition of the disk
image.
.. option:: -b BOARD, --board BOARD
Specify the board the disk image is built for. The default board is
``list`` which lists the available board configurations.
.. option:: --convert-kernel
Convert an RTEMS ELF executable into an image file the selected
board's bootloader can load. This option does not create a disk
image. The option can be used to create images that can be loaded
when network booting.
.. option:: --no-clean
If provided the :file:`build` directory will not be removed after
the disk image has been created.
.. option:: -o OUTPUT, --output OUTPUT
The output file name for the image. If the ``--convert-kernel``
option is used the conversion is written as this file name and if
it is not provided the output file is the built disk image.
.. option:: paths [paths ...]
The required paths depend on the mix of other options.
If the ``--convert-kernel`` option is provided a single path to an
RTEMS executable file is required. If this option is not provided
the number of paths provided determine how they are processed.
If a single path a built U-boot directory is provided the board
configuration will automatically find and pick up the first and
second stage boot loader executables.
If two paths are provided they are paths to the first and second
stage boot loader executables. This can be used with loader images
they you have not built.
Examples
--------
The examples show the output for FreeBSD. It may vary depending on
your type of host, how it is configured and what is running.
If the board option is not provided a list of boards is displayed:
.. code-block:: none
$ rtems-boot-image -o sd-card.img u-boot
RTEMS Tools - Boot Image, 5.0.not_released
Board list: bootloaders (1)
u-boot: 2
u-boot-beaglebone
u-boot-zedboard
Create a disk image from a built U-Boot sandbox:
.. code-block:: none
$ rtems-boot-image -o sd-card.img -b u-boot-beaglebone u-boot
RTEMS Tools - Boot Image, 5.0.not_released
Create image: sd-card.img size 64m
Attach image to device: sd-card.img
Password:
Partition device: md0 as MBR
Format: /dev/md0s1 as fat16
Mount: /dev/md0s1
Install: MLO
Install: u-boot.img
Finished
Cleaning up
Create a 32M byte SD card image with the testsuite's hello world
executable (``hello.exe``):
.. code-block:: none
$ rtems-boot-image -o sd-card.img -b u-boot-beaglebone -s 32m -k hello.exe u-boot
RTEMS Tools - Boot Image, 5.0.not_released
Create image: sd-card.img size 32m
Attach image to device: sd-card.img
Password:
Partition device: md0 as MBR
Format: /dev/md0s1 as fat16
Mount: /dev/md0s1
Install: MLO
Install: u-boot.img
Install: hello.exe.img
Uenv template: uenv_exe
Install: uEnv.txt
Finished
Cleaning up
Build the same image using the first and second stage boot loaders:
.. code-block:: none
$ rtems-boot-image -o sd-card.img -b u-boot-beaglebone -s 32m -k hello.exe MLO u-boot.img
RTEMS Tools - Boot Image, 5.0.not_released
Create image: sd-card.img size 32m
Attach image to device: sd-card.img
Password:
Partition device: md0 as MBR
Format: /dev/md0s1 as fat16
Mount: /dev/md0s1
Install: MLO
Install: u-boot.img
Install: hello.exe.img
Uenv template: uenv_exe
Install: uEnv.txt
Finished
Cleaning up
Install and load the TI standard FDT for the Beaglebone Black board
with the LibBSD DHCP 01 test application:
.. code-block:: none
$ rtems-boot-image -o sd-card.img -b u-boot-beaglebone -s 32m \
-k dhcpcd01.exe -d am335x-boneblack.dtb MLO u-boot.img
RTEMS Tools - Boot Image, 5.0.not_released
Create image: sd-card.img size 32m
Attach image to device: sd-card.img
Password:
Partition device: md0 as MBR
Format: /dev/md0s1 as fat16
Mount: /dev/md0s1
Install: MLO
Install: u-boot.img
Install: dhcpcd01.exe.img
Install: am335x-boneblack.dtb
Uenv template: uenv_exe_fdt
Install: uEnv.txt
Finished
Cleaning up
Create a DHCP network boot image where the TFTP client requests ``rtems.img``:
.. code-block:: none
$ rtems-boot-image -o sd-card.img -b u-boot-beaglebone -s 32m \
--net-boot-dhcp MLO u-boot.img
RTEMS Tools - Boot Image, 5.0.not_released
Create image: sd-card.img size 32m
Attach image to device: sd-card.img
Password:
Partition device: md0 as MBR
Format: /dev/md0s1 as fat16
Mount: /dev/md0s1
Install: MLO
Install: u-boot.img
Uenv template: uenv_net_dhcp
Install: uEnv.txt
Finished
Cleaning up
Select a specific kernel image to load using TFTP and load a FDT blob
from the SD card:
.. code-block:: none
$ rtems-boot-image -o sd-card.img -b u-boot-beaglebone -s 32m \
--net-boot-dhcp --net-boot-file bbb1a.img \
-d am335x-boneblack.dtb MLO u-boot.img
RTEMS Tools - Boot Image, 5.0.not_released
Create image: sd-card.img size 32m
Attach image to device: sd-card.img
Password:
Partition device: md0 as MBR
Format: /dev/md0s1 as fat16
Mount: /dev/md0s1
Install: MLO
Install: u-boot.img
Install: am335x-boneblack.dtb
Uenv template: uenv_net_dhcp
Install: uEnv.txt
Finished
Cleaning up
Create an image where a specific kernel image and FDT blob is loaded
using the TFTP protocol:
.. code-block:: none
$ rtems-boot-image -o sd-card.img -b u-boot-beaglebone -s 32m \
--net-boot-dhcp --net-boot-file bbb1a.img \
--net-boot-fdt bbb/am335x-boneblack.dtb MLO u-boot.img
RTEMS Tools - Boot Image, 5.0.not_released
Create image: sd-card.img size 32m
Attach image to device: sd-card.img
Password:
Partition device: md0 as MBR
Format: /dev/md0s1 as fat16
Mount: /dev/md0s1
Install: MLO
Install: u-boot.img
Uenv template: uenv_net_dhcp_net_fdt
Install: uEnv.txt
Finished
Cleaning up

View File

@ -22,3 +22,4 @@ developers.
exeinfo
bsp-builder
tester
boot-image