This section describes how to get SMMUMAN or SMMUMAN for Safety and add it to a QNX Neutrino OS, QNX for Safety (QOS), or other QNX system.
Two variants of SMMUMAN are available:
If you are building a safety-related system (i.e., you are using QNX for Safety (QOS), QNX Platform for Instrument Clusters (QPIC), QNX Hypervisor for Safety (QHS), or any other QNX for Safety product) remember that the functional safety of your system depends on the correct implementation of SMMUMAN.
This means that:
These instructions assume that:
To implement SMMUMAN on your system, assuming that all the SMMUMAN components were included in your QNX SDP package, in your development environment:
Modify your BSP buildfile to include the SMMUMAN components:
Note the following about SMMUMAN component locations:
Below are some examples of how the buildfile might be modified to include SMMUMAN.
For a non-safety system running on a supported x86 board, the buildfile might include the following:
/bin/smmuman = smmuman /lib/dll/smmu-vtd.so = smmu-vtd.so
where smmuman is the SMMUMAN service, and smmu-vtd.so is the SMMUMAN support library for x86 platforms.
For a safety-related system running directly on a supported Renesas R-Car H3 board, the buildfile might include the following:
/sbin/smmuman = smmuman /usr/dll/smmu-rcar3.so = smmu-rcar3.so /etc/smmuman/rcar-h3.smmu = ./smmuman-config/rcar-h3.smmu
where smmuman-safety is the SMMUMAN for Safety service, smmu-rcar-safety.so is the SMMUMAN support library, and rcar-h3-safety.smmu is your safety smmuman configuration file for Renesas R-Car H3 platforms.
For a safety-related system running as a guest in a QNX Hypervisor for Safety VM, the guest's buildfile might include the following:
/bin/smmuman-safety = smmuman-safety
where smmuman-safety is the SMMUMAN for Safety service, and vdev-smmu-safety is the QNX Hypervisor virtual IOMMU/SMMU device in the hosting VM.
For a system running on a supported Renesas R-Car H3 board, the buildfile might include the following:
/bin/smmuman = smmuman /bin/dll/smmu-rcar3.so = smmu-rcar3.so /etc/smmuman/rcar-h3.smmu = ./smmuman-config/rcar-h3.smmu
where smmuman is the smmuman service, smmu-rcar.so is the SMMUMAN support library, and rcar-h3.smmu is your smmuman configuration file for Renesas R-Car H3 platforms.
For a system running as a guest in a QNX Hypervisor VM, the guest's buildfile might include the following:
/bin/smmuman = smmuman
where smmuman is the smmuman service.
If you are using the safety variant of the VTD support library (smmu-vtd-safety.so), you must include the pci_server-qvm_support.so support file in your system.
To load this file, add the configuration information to one of:
You can use your buildfile to configure your startup to load the pci_server-qvm_support.so support file. For example, you can add the following in-line file to your buildfile:
pci_server.cfg = { [runtime] PCI_SERVER_MODULE_LIST=pci_server-qvm_support.so }
which, because no paths are specified, will use the default locations: pci_server.cfg in /proc/boot, and pci_server-qvm_support.so in /lib/dll/pci, the directory where pci-server expects to find all its *.so files.
You can add the configuration information to a separate file and point pci-server to it at startup:
pci-server --config=pathto/pci_server.cfg
where pathto is the path to the directory with your configuration file.
After your system has booted, you can use pidin or slog2info to confirm that the server module has loaded; for example:
pidin -ppci-server libs
For more information about including configuration information in your buildfile, see OS Image Buildfiles in Building Embedded Systems. For more information about configuring pci-server, see pci-server in the QNX Neutrino Utilities Reference.