Add an example of a program which boots an OS by calling into the U-Boot library. Series-to: concept Co-developed-by: Claude <noreply@anthropic.com> Co-developed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Simon Glass <sjg@chromium.org> Series-links: 1:28
90 lines
2.4 KiB
Plaintext
90 lines
2.4 KiB
Plaintext
U-Boot Library Example
|
|
======================
|
|
|
|
This directory contains example programs showing how to use the U-Boot library
|
|
(libu-boot.so) in external C programs.
|
|
|
|
Building U-Boot Library
|
|
-----------------------
|
|
|
|
First, build U-Boot with library support:
|
|
|
|
make O=/tmp/b/sandbox -j$(nproc) sandbox_defconfig all
|
|
|
|
This creates:
|
|
- /tmp/b/sandbox/libu-boot.so (shared library)
|
|
- /tmp/b/sandbox/libu-boot.a (static library)
|
|
|
|
Example Programs
|
|
----------------
|
|
|
|
The examples are built automatically as part of the U-Boot build. Each program
|
|
demonstrates different aspects of the U-Boot library.
|
|
|
|
**demo.c** - Demonstrates using U-Boot library functions
|
|
|
|
- Shows how to init the library with ulib_init()
|
|
- Uses U-Boot's OS functions (os_open(), os_fgets(), os_close())
|
|
- Reads and displays system information
|
|
- Shows the U-Boot version
|
|
|
|
**boot.c** - Demonstrates booting an OS using U-Boot bootflow
|
|
|
|
- Shows bootflow scanning and booting functionality
|
|
- Uses system headers for main program logic (boot.c)
|
|
- Uses U-Boot headers for bootflow internals (bootflow.c)
|
|
- Demonstrates attaching disk images and scanning for bootable OS
|
|
- Attempts to boot the first discovered bootflow
|
|
|
|
Building Examples
|
|
-----------------
|
|
|
|
The examples are built automatically when U-Boot has these options enabled::
|
|
|
|
CONFIG_ULIB=y
|
|
CONFIG_EXAMPLES=y
|
|
|
|
To build manually:
|
|
|
|
# From this directory examples/ulib
|
|
make UBOOT_BUILD=/tmp/b/sandbox/ srctree=../..
|
|
|
|
Running Examples
|
|
----------------
|
|
|
|
# Run the demo
|
|
LD_LIBRARY_PATH=/tmp/b/sandbox ./demo
|
|
|
|
# Run the demo (static version)
|
|
./demo_static
|
|
|
|
# Run the boot example (requires disk image at /home/sglass/u/mmc1.img)
|
|
LD_LIBRARY_PATH=/tmp/b/sandbox ./boot
|
|
|
|
# Run the boot example (static version)
|
|
./boot_static
|
|
|
|
Key Points
|
|
----------
|
|
|
|
- Files are compiled with U-Boot headers by default, except those listed in
|
|
sys-objs which use system headers
|
|
- Use ulib_init() to init the library
|
|
- Use ulib_uninit() to clean up
|
|
- Set LD_LIBRARY_PATH when running dynamically linked programs
|
|
- Each program automatically gets both dynamic and static versions built
|
|
|
|
Copying for External Use
|
|
-------------------------
|
|
|
|
This directory can be copied elsewhere and used independently:
|
|
|
|
cp -r examples/ulib ~/my-project/
|
|
cd ~/my-project/ulib
|
|
make UBOOT_BUILD=/path/to/u-boot-build srctree=/path/to/u-boot-source
|
|
|
|
License
|
|
-------
|
|
|
|
All examples are licensed under GPL-2.0+
|