OpenArbor BSP Interface
A DDS is created from a baseline for a customer, and may contain one or more bsps. The OpenArbor automated testing system (a.k.a test harness) is used to execute automated OpenArbor tests on one bsp in a DDS. The examples shipped with the DDS are used for testing. Some examples are not applicable for a customer, or a bsp. The tool(s) for generating a boot image, or how to configure multicore examples for testing can vary between bsps. A bsp should provide an interface definition that provides testing information as well as features to be included in OpenArbor.
Problems to be Addressed
- Isolation of change impact
- For example, if the definition of a socket changes, it does not require updates to the application
- Ability for applications (eg, customer's and OA) to identify dependencies.
- How do customers know if they can run an example?
- DDS should not include examples that are board-specific for boards not included in a customer's DDS
- Prevention vs Detection approach on implementation of the BSP-OA interface
- Ability for BSP (ie, platform project) to identify supported features.
- Feature set defined in PD/FP file (may impact/update the registry; eg, socket use).
- Objective: only define unique features (eg, type of FPU), not generic ones that work on all targets
- Still need to inform customers on how to use/integrate the feature.
- BSP examples current approach: will execute, but results will vary by target(pass OR fail gracefully)
- Long-term solution: Only execute examples that provide "meaningful" results
- component descriptor cd.xml is currently an output file from OA, which is also used as an input file to OA
- Address baseline specific features, eg, MMS works on Jupiter, not Indie
- .options file. Currently aligns with OA widgets (text box)
- Gluing together the automation of editing a PD file
Implementation Proposals
- Proposal 1: BSP provides openarbor-interface.xml
- Proposal 2: BSP provides a cd.xml file
Platform/bsp attributes:
<supportsCacheTrasher>boolean</supportsCacheTrasher>
- When true, the CasheTrasher example is configured properly for this bsp.
<supportsMulticoreIntegration>boolean</supportsMulticoreIntegration>
- When true, the MulticoreIntegration test is run
<supportedMALS>malName[,malName]</supportedMALs>
- The CffsMal test will be run for the malNames specified.
<requiresDevice>device name</requiresDevice>
- If the bsp/target board requires a hardware device
Multicore Integration
<maxNumberOfCores>integer</maxNumberOfCores>
- number of cores the bsp supports for multi-core integration
Boot Image Generation
Testing
Some bsps have requirements for building a boot image that require an SD card be attached to the test system and it would not be possible to test in an automated way. Bsp developers can indicate that testing the boot image generation not be performed.
<testBootImageGenerationAutomated>boolean</testBootImageGenerationAutomated>
- Indicates the generation of a boot image can be performed with this bsp
Existing bsp special cases
Harrys Bsp
The bootImageTab test fails when run on the harrys bsp.
Error executing makeboot: ValueError: invalid literal for int() with base 16:
The Harrys bsp user's guide indicates that executing makeboot requires passing the mac address for the board e.g. makeboot @../bootimage.hyp -extensionParam=-MACaddress="00:1B:C3:12:34:23"
Boot Image Tab Design
The generation of a boot image file is controlled by the platform project's Properties|DDC-I Options|Deos|Boot Image tab.
The checkbox "Generate a boot image file" is by default unchecked for non-QEMU bsps, and checked for QEMUs.
The Command: and Output filename: textboxes are populated from (1)the platform project's .options file, (which is originally populated from the desk/platform/<bsp>/etc/openarbor.options file) or (2) default values defined in OA.
<bootImageCommand>hypstart @../bootimage.hyp -hypFile=$@</bootImageCommand>
<bootImageOutputFilename>hypstart.bin</bootImageOutputFilename>
The values specified in these two textboxes are used when generated makefile lines in the platform project's project-config.mk file to create a boot image.
The Execute hypdump, and Execute bifdump checkboxes (if checked) will generate additional makefile lines to cause those tools to be run as well.
The default value for bootImageCommand is determined by the following logic:
If the bsp has a makeboot_ext.py file, then the makeboot command is used (makeboot @../bootimage.hyp -bootDest=dir:$(dir $@))
Otherwise, the hypstart command is used (hypstart @../bootimage.hyp -hypFile=$@)
The default value for bootImageOutputFilename is determined by the following logic:
If the bsp is a QEMU platform, the filename is deosBoot.qemu.
Otherwise the filename is hypstart.bin
Makeboot - Not QEMUs
Media:bootImageTab-makeboot-zcu102.png
Generated lines for makeboot, hypdump and bifdump in project-config.mk
# boot image
boot : hypstart.bin
hypstart.bin : $(HYPSTART_WORKSTATION_FILES) loadlist.txt $(PROJECT_DIR)/bootimage.hyp
makeboot @../bootimage.hyp -bootDest=dir:$(dir $@) > $@.cck
CLEAN_FILES += hypstart.bin hypstart.bin.cck
all : boot
# hypdump
boot : hypstart.bin.htm
hypstart.bin.htm: hypstart.bin
hypdump -hypFile=hypstart.bin -target=arm -hdFile=hypstart.bin.htm > hd.cck
CLEAN_FILES += hypstart.bin.htm hd.cck
# bifdump
boot : $(OUTPUT_DIR)/bifdump/deosBoot/bifd.htm
$(OUTPUT_DIR)/bifdump/deosBoot/bifd.htm: hypstart.bin
rm -rf $(OUTPUT_DIR)/bifdump/deosBoot
mkdir -p $(OUTPUT_DIR)/bifdump/deosBoot
bifdump -biFile=$(OUTPUT_DIR)/deosBoot.composite -target=arm -dest=$(OUTPUT_DIR)/bifdump/deosBoot
CLEAN_FILES += $(OUTPUT_DIR)/bifdump/deosBoot
Makeboot QEMUs
Media:bootImageTab-makeboot-qemu.png
Generated lines for makeboot, hypdump and bifdump in project-config.mk
# boot image
boot : deosBoot.qemu
deosBoot.qemu : $(HYPSTART_WORKSTATION_FILES) loadlist.txt $(PROJECT_DIR)/bootimage.hyp
makeboot @../bootimage.hyp -bootDest=dir:$(dir $@) > $@.cck
CLEAN_FILES += deosBoot.qemu deosBoot.qemu.cck deosBoot.qemu.launch
# all : boot
# hypdump
# boot : deosBoot.qemu.htm
deosBoot.qemu.htm: deosBoot.qemu
hypdump -hypFile=deosBoot.qemu -target=arm -hdFile=deosBoot.qemu.htm > hd.cck
CLEAN_FILES += deosBoot.qemu.htm hd.cck
# bifdump
# boot : $(OUTPUT_DIR)/bifdump/deosBoot/bifd.htm
$(OUTPUT_DIR)/bifdump/deosBoot/bifd.htm: deosBoot.qemu
rm -rf $(OUTPUT_DIR)/bifdump/deosBoot
mkdir -p $(OUTPUT_DIR)/bifdump/deosBoot
bifdump -biFile=$(OUTPUT_DIR)/deosBoot.composite -target=arm -dest=$(OUTPUT_DIR)/bifdump/deosBoot
CLEAN_FILES += $(OUTPUT_DIR)/bifdump/deosBoot
Media:makeboot-qemu-output.txt
Hypstart
Media:bootImageTab-hypstart-imx8qm.png
Generated lines for makeboot, hypdump and bifdump in project-config.mk
# boot image
boot : hypstart.bin
hypstart.bin : $(HYPSTART_WORKSTATION_FILES) loadlist.txt $(PROJECT_DIR)/bootimage.hyp
hypstart @../bootimage.hyp -hypFile=$@ > $@.cck
CLEAN_FILES += hypstart.bin hypstart.bin.cck
all : boot
# hypdump
boot : hypstart.bin.htm
hypstart.bin.htm: hypstart.bin
hypdump -hypFile=hypstart.bin -target=arm -hdFile=hypstart.bin.htm > hd.cck
CLEAN_FILES += hypstart.bin.htm hd.cck
# bifdump
boot : $(OUTPUT_DIR)/bifdump/deosBoot/bifd.htm
$(OUTPUT_DIR)/bifdump/deosBoot/bifd.htm: hypstart.bin
rm -rf $(OUTPUT_DIR)/bifdump/deosBoot
mkdir -p $(OUTPUT_DIR)/bifdump/deosBoot
bifdump -biFile=$(OUTPUT_DIR)/deosBoot.composite -target=arm -dest=$(OUTPUT_DIR)/bifdump/deosBoot
CLEAN_FILES += $(OUTPUT_DIR)/bifdump/deosBoot