cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

writing-schema.rst (6684B)


      1.. SPDX-License-Identifier: GPL-2.0
      2
      3Writing Devicetree Bindings in json-schema
      4==========================================
      5
      6Devicetree bindings are written using json-schema vocabulary. Schema files are
      7written in a JSON-compatible subset of YAML. YAML is used instead of JSON as it
      8is considered more human readable and has some advantages such as allowing
      9comments (Prefixed with '#').
     10
     11Also see :ref:`example-schema`.
     12
     13Schema Contents
     14---------------
     15
     16Each schema doc is a structured json-schema which is defined by a set of
     17top-level properties. Generally, there is one binding defined per file. The
     18top-level json-schema properties used are:
     19
     20$id
     21  A json-schema unique identifier string. The string must be a valid
     22  URI typically containing the binding's filename and path. For DT schema, it must
     23  begin with "http://devicetree.org/schemas/". The URL is used in constructing
     24  references to other files specified in schema "$ref" properties. A $ref value
     25  with a leading '/' will have the hostname prepended. A $ref value with only a
     26  relative path or filename will be prepended with the hostname and path
     27  components of the current schema file's '$id' value. A URL is used even for
     28  local files, but there may not actually be files present at those locations.
     29
     30$schema
     31  Indicates the meta-schema the schema file adheres to.
     32
     33title
     34  A one-line description on the contents of the binding schema.
     35
     36maintainers
     37  A DT specific property. Contains a list of email address(es)
     38  for maintainers of this binding.
     39
     40description
     41  Optional. A multi-line text block containing any detailed
     42  information about this binding. It should contain things such as what the block
     43  or device does, standards the device conforms to, and links to datasheets for
     44  more information.
     45
     46select
     47  Optional. A json-schema used to match nodes for applying the
     48  schema. By default, without 'select', nodes are matched against their possible
     49  compatible-string values or node name. Most bindings should not need select.
     50
     51allOf
     52  Optional. A list of other schemas to include. This is used to
     53  include other schemas the binding conforms to. This may be schemas for a
     54  particular class of devices such as I2C or SPI controllers.
     55
     56properties
     57  A set of sub-schema defining all the DT properties for the
     58  binding. The exact schema syntax depends on whether properties are known,
     59  common properties (e.g. 'interrupts') or are binding/vendor-specific
     60  properties.
     61
     62A property can also define a child DT node with child properties defined
     63under it.
     64
     65For more details on properties sections, see 'Property Schema' section.
     66
     67patternProperties
     68  Optional. Similar to 'properties', but names are regex.
     69
     70required
     71  A list of DT properties from the 'properties' section that
     72  must always be present.
     73
     74examples
     75  Optional. A list of one or more DTS hunks implementing the
     76  binding. Note: YAML doesn't allow leading tabs, so spaces must be used instead.
     77
     78Unless noted otherwise, all properties are required.
     79
     80Property Schema
     81---------------
     82
     83The 'properties' section of the schema contains all the DT properties for a
     84binding. Each property contains a set of constraints using json-schema
     85vocabulary for that property. The properties schemas are what are used for
     86validation of DT files.
     87
     88For common properties, only additional constraints not covered by the common,
     89binding schema need to be defined such as how many values are valid or what
     90possible values are valid.
     91
     92Vendor-specific properties will typically need more detailed schema. With the
     93exception of boolean properties, they should have a reference to a type in
     94schemas/types.yaml. A "description" property is always required.
     95
     96The Devicetree schemas don't exactly match the YAML-encoded DT data produced by
     97dtc. They are simplified to make them more compact and avoid a bunch of
     98boilerplate. The tools process the schema files to produce the final schema for
     99validation. There are currently 2 transformations the tools perform.
    100
    101The default for arrays in json-schema is they are variable-sized and allow more
    102entries than explicitly defined. This can be restricted by defining 'minItems',
    103'maxItems', and 'additionalItems'. However, for DeviceTree Schemas, a fixed
    104size is desired in most cases, so these properties are added based on the
    105number of entries in an 'items' list.
    106
    107The YAML Devicetree format also makes all string values an array and scalar
    108values a matrix (in order to define groupings) even when only a single value
    109is present. Single entries in schemas are fixed up to match this encoding.
    110
    111Coding style
    112------------
    113
    114Use YAML coding style (two-space indentation). For DTS examples in the schema,
    115preferred is four-space indentation.
    116
    117Testing
    118-------
    119
    120Dependencies
    121~~~~~~~~~~~~
    122
    123The DT schema project must be installed in order to validate the DT schema
    124binding documents and validate DTS files using the DT schema. The DT schema
    125project can be installed with pip::
    126
    127    pip3 install dtschema
    128
    129Note that 'dtschema' installation requires 'swig' and Python development files
    130installed first. On Debian/Ubuntu systems::
    131
    132    apt install swig python3-dev
    133
    134Several executables (dt-doc-validate, dt-mk-schema, dt-validate) will be
    135installed. Ensure they are in your PATH (~/.local/bin by default).
    136
    137Recommended is also to install yamllint (used by dtschema when present).
    138
    139Running checks
    140~~~~~~~~~~~~~~
    141
    142The DT schema binding documents must be validated using the meta-schema (the
    143schema for the schema) to ensure they are both valid json-schema and valid
    144binding schema. All of the DT binding documents can be validated using the
    145``dt_binding_check`` target::
    146
    147    make dt_binding_check
    148
    149In order to perform validation of DT source files, use the ``dtbs_check`` target::
    150
    151    make dtbs_check
    152
    153Note that ``dtbs_check`` will skip any binding schema files with errors. It is
    154necessary to use ``dt_binding_check`` to get all the validation errors in the
    155binding schema files.
    156
    157It is possible to run both in a single command::
    158
    159    make dt_binding_check dtbs_check
    160
    161It is also possible to run checks with a subset of matching schema files by
    162setting the ``DT_SCHEMA_FILES`` variable to a specific schema file or pattern.
    163
    164::
    165
    166    make dt_binding_check DT_SCHEMA_FILES=trivial-devices.yaml
    167    make dt_binding_check DT_SCHEMA_FILES=/gpio/
    168    make dtbs_check DT_SCHEMA_FILES=trivial-devices.yaml
    169
    170
    171json-schema Resources
    172---------------------
    173
    174
    175`JSON-Schema Specifications <http://json-schema.org/>`_
    176
    177`Using JSON Schema Book <http://usingjsonschema.com/>`_
    178
    179.. _example-schema:
    180
    181Annotated Example Schema
    182------------------------
    183
    184Also available as a separate file: :download:`example-schema.yaml`
    185
    186.. literalinclude:: example-schema.yaml