| mosys - The more open system tool |
| |
| Introduction |
| ------------ |
| Mosys is designed to aid in obtaining obscure system-specific information |
| and present it in a uniform, human-friendly manner that is also parseable. It |
| is intended to complement other systems software and may overlap in some areas. |
| |
| Examples of information this program is useful for: |
| - Platform identification |
| - Snapshot of machine information |
| - Listing non-enumerable devices |
| - Retrieving vital product data |
| |
| Due to the system-specific nature of this program, it is unlikely to work with |
| most platforms. A generic subset of functionality will be available, though |
| its usefulness may be extremely limited. |
| |
| Configuration & Building |
| ------------------------ |
| Dependencies: |
| libfmap |
| libuuid |
| libfdt (typically from the dtc package in your distribution) |
| |
| Mosys is a two-stage compile: the first stage is for all of the C components and |
| uses the Meson build system and the second stage is Rust Cargo for all of the |
| Rust components. |
| |
| Chrome OS contributors will want to use cros_workon instead. Using the ebuild is |
| vastly easier than trying to build manually. |
| |
| See meson.build for valid arch options. |
| |
| Flags of interest: |
| -Duse_cros_config=true/false: whether to enable linking to cros_config for |
| Chrome OS. See Chrome OS example in Mosys ebuild. |
| |
| Note that you might have better luck compiling Mosys with Clang while -Werror is |
| enabled. This is because we (Chromium) use Clang as our default compiler. To do |
| that, add CC=clang before you invoke Meson. |
| |
| All of this should look something like, for the C components: |
| CC=clang meson -Darch=amd64 output_dir |
| ninja -C output_dir |
| |
| or: |
| CC=clang meson -Darch=amd64 -Duse_cros_config=true output_dir |
| ninja -C output_dir |
| |
| To build with use_cros_config=true, you need two files that are dynamically |
| provided as inputs to the build process from other ebuilds in the Chrome OS |
| build system: |
| lib/cros_config/config.dtb |
| lib/cros_config/cros_config_data.c |
| |
| If you just want to compile something quickly, you can do: |
| touch lib/cros_config/config.dtb |
| cp lib/cros_config/dummy_cros_config_data.c lib/cros_config/cros_config_data.c |
| |
| and then run the `meson` command as above. |
| |
| Then, to build the Rust components, first build the C components using the |
| instructions above. Then, run: |
| |
| MESON_BUILD_ROOT=output_dir cargo build |
| |
| If you are building with use_cros_config, as above, instead you will do: |
| |
| MESON_BUILD_ROOT=output_dir USE=unibuild cargo build |
| |
| In the end, this will output a "target/debug/mosys" binary that is dynamically |
| linked. Use `--release` argument to `cargo` to get a release build. |
| |
| The `mosys` binary that is output will typically abort on most platforms when |
| run as a user without root privs. To try to work with this locally without |
| moving it to a target platform, you can run: |
| |
| sudo mosys --help |
| |
| or: |
| |
| sudo mosys -j -p dummy |
| |
| to disable the Minijail and force the platform to the "dummy" platform. |
| |
| To run tests (with cros_config enabled): |
| CC=clang meson -Darch=amd64 -Duse_cros_config=true -Dtest_cros_config=true out |
| ninja -C out |
| USE=unibuild MESON_BUILD_ROOT=out cargo test |
| |
| Usage |
| ----- |
| Mosys uses a natural language syntax to navigate thru a command hierarchy for |
| a given platform. Each supported platform will have a specific set of commands |
| available. |
| |
| Typically, top-level commands will reflect classes of hardware components |
| such as "cpu" or "sensor", available busses such as "pci" or "i2c", or a |
| type of information such as "smbios" or "vpd". |
| |
| Mosys returns EXIT_SUCCESS upon successful completion of a command, or |
| EXIT_FAILURE if a command is not supported on a given platform. These values |
| are defined in the system's stdlib.h. In case of failure, Mosys will also print |
| a message to stderr to let the user know. |
| |
| Use "mosys -t" to display the command tree for the host platform. |
| |
| Debugging |
| --------- |
| Mosys uses a minijail to restrict behavior. This can sometimes restrict desired |
| behavior, especially system calls not whitelisted by the seccom filter. |
| If a subcommand is returning with an error that should be passing, this might |
| be why. In order to debug this, run seccomp_debug.sh with the failing command. |
| This will print out the system calls that caused the run to fail. |
| |
| Ex. 'mosys platform id' failing on DUT |
| On the DUT, copy over seccomp_debug.sh and run: |
| ./seccomp_debug.sh mosys platform id |