Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | documentation |
| 2 | ============= |
| 3 | |
| 4 | This is the directory that contains the Yocto Project documentation. The Yocto |
Andrew Geissler | d1e8949 | 2021-02-12 15:35:20 -0600 | [diff] [blame] | 5 | Project source repositories at https://git.yoctoproject.org/cgit.cgi have two |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 6 | instances of the "documentation" directory. You should understand each of |
| 7 | these instances. |
| 8 | |
| 9 | poky/documentation - The directory within the poky Git repository containing |
| 10 | the set of Yocto Project manuals. When you clone the |
| 11 | poky Git repository, the documentation directory |
| 12 | contains the manuals. The state of the manuals in this |
| 13 | directory is guaranteed to reflect the latest Yocto |
| 14 | Project release. The manuals at the tip of this |
| 15 | directory will also likely contain most manual |
| 16 | development changes. |
| 17 | |
| 18 | yocto-docs/documentation - The Git repository for the Yocto Project manuals. |
| 19 | This repository is where manual development |
| 20 | occurs. If you plan on contributing back to the |
| 21 | Yocto Project documentation, you should set up |
| 22 | a local Git repository based on this upstream |
| 23 | repository as follows: |
| 24 | |
| 25 | git clone git://git.yoctoproject.org/yocto-docs |
| 26 | |
| 27 | Changes and patches are first pushed to the |
| 28 | yocto-docs Git repository. Later, they make it |
| 29 | into the poky Git repository found at |
| 30 | git://git.yoctoproject.org/poky. |
| 31 | |
| 32 | Manual Organization |
| 33 | =================== |
| 34 | |
William A. Kennington III | ac69b48 | 2021-06-02 12:28:27 -0700 | [diff] [blame] | 35 | Here the folders corresponding to individual manuals: |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 36 | |
Andrew Geissler | 5199d83 | 2021-09-24 16:47:35 -0500 | [diff] [blame] | 37 | * overview-manual - Yocto Project Overview and Concepts Manual |
| 38 | * sdk-manual - Yocto Project Software Development Kit (SDK) Developer's Guide. |
| 39 | * bsp-guide - Yocto Project Board Support Package (BSP) Developer's Guide |
| 40 | * dev-manual - Yocto Project Development Tasks Manual |
| 41 | * kernel-dev - Yocto Project Linux Kernel Development Manual |
| 42 | * ref-manual - Yocto Project Reference Manual |
| 43 | * brief-yoctoprojectqs - Yocto Project Quick Start |
| 44 | * profile-manual - Yocto Project Profiling and Tracing Manual |
| 45 | * toaster-manual - Toaster User Manual |
| 46 | * test-manual - Yocto Project Test Environment Manual |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 47 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 48 | Each folder is self-contained regarding content and figures. |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 49 | |
| 50 | If you want to find HTML versions of the Yocto Project manuals on the web, |
Andrew Geissler | 5199d83 | 2021-09-24 16:47:35 -0500 | [diff] [blame] | 51 | the current versions reside at https://docs.yoctoproject.org. |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 52 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 53 | poky.yaml |
| 54 | ========= |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 55 | |
| 56 | This file defines variables used for documentation production. The variables |
| 57 | are used to define release pathnames, URLs for the published manuals, etc. |
| 58 | |
Andrew Geissler | 595f630 | 2022-01-24 19:11:47 +0000 | [diff] [blame] | 59 | standards.md |
| 60 | ============ |
| 61 | |
| 62 | This file specifies some rules to follow when contributing to the documentation. |
| 63 | |
| 64 | template/ |
| 65 | ========= |
| 66 | |
| 67 | Contains a template.svg, to make it easier to create consistent |
| 68 | SVG diagrams. |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 69 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 70 | Sphinx |
| 71 | ====== |
| 72 | |
| 73 | The Yocto Project documentation was migrated from the original DocBook |
| 74 | format to Sphinx based documentation for the Yocto Project 3.2 |
| 75 | release. This section will provide additional information related to |
| 76 | the Sphinx migration, and guidelines for developers willing to |
| 77 | contribute to the Yocto Project documentation. |
| 78 | |
| 79 | Sphinx is a tool that makes it easy to create intelligent and |
| 80 | beautiful documentation, written by Georg Brandl and licensed under |
| 81 | the BSD license. It was originally created for the Python |
| 82 | documentation. |
| 83 | |
| 84 | Extensive documentation is available on the Sphinx website: |
| 85 | https://www.sphinx-doc.org/en/master/. Sphinx is designed to be |
| 86 | extensible thanks to the ability to write our own custom extensions, |
| 87 | as Python modules, which will be executed during the generation of the |
| 88 | documentation. |
| 89 | |
| 90 | Yocto Project documentation website |
| 91 | =================================== |
| 92 | |
Andrew Geissler | 0903674 | 2021-06-25 14:25:14 -0500 | [diff] [blame] | 93 | The website hosting the Yocto Project documentation, can be found |
| 94 | at: https://docs.yoctoproject.org/. |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 95 | |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 96 | The entire Yocto Project documentation, as well as the BitBake manual, |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 97 | is published on this website, including all previously released |
| 98 | versions. A version switcher was added, as a drop-down menu on the top |
| 99 | of the page to switch back and forth between the various versions of |
| 100 | the current active Yocto Project releases. |
| 101 | |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 102 | Transition pages have been added (as rst files) to show links to old |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 103 | versions of the Yocto Project documentation with links to each manual |
| 104 | generated with DocBook. |
| 105 | |
| 106 | How to build the Yocto Project documentation |
| 107 | ============================================ |
| 108 | |
| 109 | Sphinx is written in Python. While it might work with Python2, for |
| 110 | obvious reasons, we will only support building the Yocto Project |
| 111 | documentation with Python3. |
| 112 | |
| 113 | Sphinx might be available in your Linux distro packages repositories, |
Andrew Geissler | 3b8a17c | 2021-04-15 15:55:55 -0500 | [diff] [blame] | 114 | however it is not recommended to use distro packages, as they might be |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 115 | old versions, especially if you are using an LTS version of your |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 116 | distro. The recommended method to install the latest versions of Sphinx |
| 117 | and of its required dependencies is to use the Python Package Index (pip). |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 118 | |
| 119 | To install all required packages run: |
| 120 | |
| 121 | $ pip3 install sphinx sphinx_rtd_theme pyyaml |
| 122 | |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 123 | To make sure you always have the latest versions of such packages, you |
| 124 | should regularly run the same command with an added "--upgrade" option: |
| 125 | |
| 126 | $ pip3 install --upgrade sphinx sphinx_rtd_theme pyyaml |
| 127 | |
Andrew Geissler | eff2747 | 2021-10-29 15:35:00 -0500 | [diff] [blame] | 128 | Also install the "inkscape" package from your distribution. |
| 129 | Inkscape is need to convert SVG graphics to PNG (for EPUB |
| 130 | export) and to PDF (for PDF export). |
| 131 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 132 | To build the documentation locally, run: |
| 133 | |
| 134 | $ cd documentation |
Andrew Geissler | f034379 | 2020-11-18 10:42:21 -0600 | [diff] [blame] | 135 | $ make html |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 136 | |
| 137 | The resulting HTML index page will be _build/html/index.html, and you |
| 138 | can browse your own copy of the locally generated documentation with |
| 139 | your browser. |
| 140 | |
Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 141 | Alternatively, you can use Pipenv to automatically install all required |
| 142 | dependencies in a virtual environment: |
| 143 | |
| 144 | $ cd documentation |
| 145 | $ pipenv install |
| 146 | $ pipenv run make html |
| 147 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 148 | Sphinx theme and CSS customization |
| 149 | ================================== |
| 150 | |
| 151 | The Yocto Project documentation is currently based on the "Read the |
| 152 | Docs" Sphinx theme, with a few changes to make sure the look and feel |
| 153 | of the project documentation is preserved. |
| 154 | |
| 155 | Most of the theme changes can be done using the file |
| 156 | 'sphinx-static/theme_overrides.css'. Most CSS changes in this file |
| 157 | were inherited from the DocBook CSS stylesheets. |
| 158 | |
| 159 | Sphinx design guidelines and principles |
| 160 | ======================================= |
| 161 | |
| 162 | The initial Docbook to Sphinx migration was done with an automated |
| 163 | tool called Pandoc (https://pandoc.org/). The tool produced some clean |
| 164 | output markdown text files. After the initial automated conversion |
| 165 | additional changes were done to fix up headings, images and links. In |
| 166 | addition Sphinx has built in mechanisms (directives) which were used |
| 167 | to replace similar functions implemented in Docbook such as glossary, |
| 168 | variables substitutions, notes and references. |
| 169 | |
| 170 | Headings |
| 171 | ======== |
| 172 | |
| 173 | The layout of the Yocto Project manuals is organized as follows |
| 174 | |
| 175 | Book |
| 176 | Chapter |
| 177 | Section |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 178 | Subsection |
| 179 | Subsubsection |
| 180 | Subsubsubsection |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 181 | |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 182 | Here are the heading styles that we use in the manuals: |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 183 | |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 184 | Book => overline === |
| 185 | Chapter => overline *** |
| 186 | Section => ==== |
| 187 | Subsection => ---- |
| 188 | Subsubsection => ~~~~ |
| 189 | Subsubsubsection => ^^^^ |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 190 | |
| 191 | With this proposal, we preserve the same TOCs between Sphinx and Docbook. |
| 192 | |
| 193 | Built-in glossary |
| 194 | ================= |
| 195 | |
| 196 | Sphinx has a glossary directive. From |
| 197 | https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#glossary: |
| 198 | |
| 199 | This directive must contain a reST definition list with terms and |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 200 | definitions. It's then possible to refer to each definition through the |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 201 | [https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-term |
| 202 | 'term' role]. |
| 203 | |
| 204 | So anywhere in any of the Yocto Project manuals, :term:`VAR` can be |
| 205 | used to refer to an item from the glossary, and a link is created |
| 206 | automatically. A general index of terms is also generated by Sphinx |
| 207 | automatically. |
| 208 | |
| 209 | Global substitutions |
| 210 | ==================== |
| 211 | |
| 212 | The Yocto Project documentation makes heavy use of global |
| 213 | variables. In Docbook these variables are stored in the file |
| 214 | poky.ent. This Docbook feature is not handled automatically with |
| 215 | Pandoc. Sphinx has builtin support for substitutions |
| 216 | (https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#substitutions), |
| 217 | however there are important shortcomings. For example they cannot be |
| 218 | used/nested inside code-block sections. |
| 219 | |
| 220 | A Sphinx extension was implemented to support variable substitutions |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 221 | to mimic the DocBook based documentation behavior. Variable |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 222 | substitutions are done while reading/parsing the .rst files. The |
| 223 | pattern for variables substitutions is the same as with DocBook, |
| 224 | e.g. `&VAR;`. |
| 225 | |
| 226 | The implementation of the extension can be found here in the file |
| 227 | documentation/sphinx/yocto-vars.py, this extension is enabled by |
| 228 | default when building the Yocto Project documentation. All variables |
| 229 | are set in a file call poky.yaml, which was initially generated from |
| 230 | poky.ent. The file was converted into YAML so that it is easier to |
| 231 | process by the custom Sphinx extension (which is a Python module). |
| 232 | |
| 233 | For example, the following .rst content will produce the 'expected' |
| 234 | content: |
| 235 | |
| 236 | .. code-block:: |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 237 | $ mkdir poky-&DISTRO; |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 238 | or |
| 239 | $ git clone &YOCTO_GIT_URL;/git/poky -b &DISTRO_NAME_NO_CAP; |
| 240 | |
| 241 | Variables can be nested, like it was the case for DocBook: |
| 242 | |
Andrew Geissler | d1e8949 | 2021-02-12 15:35:20 -0600 | [diff] [blame] | 243 | YOCTO_HOME_URL : "https://www.yoctoproject.org" |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 244 | YOCTO_DOCS_URL : "&YOCTO_HOME_URL;/docs" |
| 245 | |
| 246 | Note directive |
| 247 | ============== |
| 248 | |
| 249 | Sphinx has a builtin 'note' directive that produces clean Note section |
| 250 | in the output file. There are various types of directives such as |
| 251 | "attention", "caution", "danger", "error", "hint", "important", "tip", |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 252 | "warning", "admonition" that are supported, and additional directives |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 253 | can be added as Sphinx extension if needed. |
| 254 | |
| 255 | Figures |
| 256 | ======= |
| 257 | |
| 258 | The Yocto Project documentation has many figures/images. Sphinx has a |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 259 | 'figure' directive which is straightforward to use. To include a |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 260 | figure in the body of the documentation: |
| 261 | |
| 262 | .. image:: figures/YP-flow-diagram.png |
| 263 | |
| 264 | Links and References |
| 265 | ==================== |
| 266 | |
| 267 | The following types of links can be used: links to other locations in |
| 268 | the same document, to locations in other documents and to external |
| 269 | websites. |
| 270 | |
| 271 | More information can be found here: |
| 272 | https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html. |
| 273 | |
Andrew Geissler | 3b8a17c | 2021-04-15 15:55:55 -0500 | [diff] [blame] | 274 | Anchor (<#link>) links are forbidden as they are not checked by Sphinx during |
| 275 | the build and may be broken without knowing about it. |
| 276 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 277 | References |
| 278 | ========== |
| 279 | |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 280 | The following extension is enabled by default: |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 281 | sphinx.ext.autosectionlabel |
| 282 | (https://www.sphinx-doc.org/en/master/usage/extensions/autosectionlabel.html). |
| 283 | |
| 284 | This extension allows you to refer sections by their titles. Note that |
| 285 | autosectionlabel_prefix_document is enabled by default, so that we can |
| 286 | insert references from any document. |
| 287 | |
| 288 | For example, to insert an HTML link to a section from |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 289 | documentation/manual/intro.rst, use: |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 290 | |
| 291 | Please check this :ref:`manual/intro:Cross-References to Locations in the Same Document` |
| 292 | |
| 293 | Alternatively a custom text can be used instead of using the section |
| 294 | text: |
| 295 | |
| 296 | Please check this :ref:`section <manual/intro:Cross-References to Locations in the Same Document>` |
| 297 | |
| 298 | TIP: The following command can be used to dump all the references that |
| 299 | are defined in the project documentation: |
| 300 | |
| 301 | python -msphinx.ext.intersphinx <path to build folder>/html/objects.inv |
| 302 | |
| 303 | This dump contains all links and for each link it shows the default |
| 304 | "Link Text" that Sphinx would use. If the default link text is not |
| 305 | appropriate, a custom link text can be used in the ':ref:' directive. |
| 306 | |
| 307 | Extlinks |
| 308 | ======== |
| 309 | |
| 310 | The sphinx.ext.extlinks extension is enabled by default |
| 311 | (https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html#use-the-external-links-extension), |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 312 | and it is configured with the 'extlinks' definitions in |
| 313 | the 'documentation/conf.py' file: |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 314 | |
| 315 | 'yocto_home': ('https://yoctoproject.org%s', None), |
| 316 | 'yocto_wiki': ('https://wiki.yoctoproject.org%s', None), |
| 317 | 'yocto_dl': ('https://downloads.yoctoproject.org%s', None), |
| 318 | 'yocto_lists': ('https://lists.yoctoproject.org%s', None), |
| 319 | 'yocto_bugs': ('https://bugzilla.yoctoproject.org%s', None), |
| 320 | 'yocto_ab': ('https://autobuilder.yoctoproject.org%s', None), |
| 321 | 'yocto_docs': ('https://docs.yoctoproject.org%s', None), |
| 322 | 'yocto_git': ('https://git.yoctoproject.org%s', None), |
| 323 | 'oe_home': ('https://www.openembedded.org%s', None), |
| 324 | 'oe_lists': ('https://lists.openembedded.org%s', None), |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 325 | 'oe_git': ('https://git.openembedded.org%s', None), |
| 326 | 'oe_wiki': ('https://www.openembedded.org/wiki%s', None), |
| 327 | 'oe_layerindex': ('https://layers.openembedded.org%s', None), |
| 328 | 'oe_layer': ('https://layers.openembedded.org/layerindex/branch/master/layer%s', None), |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 329 | |
| 330 | It creates convenient shortcuts which can be used throughout the |
| 331 | documentation rst files, as: |
| 332 | |
| 333 | Please check this :yocto_wiki:`wiki page </Weekly_Status>` |
| 334 | |
| 335 | Intersphinx links |
| 336 | ================= |
| 337 | |
| 338 | The sphinx.ext.intersphinx extension is enabled by default |
| 339 | (https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html), |
| 340 | so that we can cross reference content from other Sphinx based |
| 341 | documentation projects, such as the BitBake manual. |
| 342 | |
Patrick Williams | 213cb26 | 2021-08-07 19:21:33 -0500 | [diff] [blame] | 343 | References to the BitBake manual can be done: |
| 344 | - With a specific description instead of the section name: |
| 345 | :ref:`Azure Storage fetcher (az://) <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>` |
| 346 | - With the section name: |
Andrew Geissler | 595f630 | 2022-01-24 19:11:47 +0000 | [diff] [blame] | 347 | :ref:`bitbake:bitbake-user-manual/bitbake-user-manual-intro:usage and syntax` option |
Patrick Williams | 213cb26 | 2021-08-07 19:21:33 -0500 | [diff] [blame] | 348 | - Linking to the entire BitBake manual: |
| 349 | :doc:`BitBake User Manual <bitbake:index>` |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 350 | |
Patrick Williams | 213cb26 | 2021-08-07 19:21:33 -0500 | [diff] [blame] | 351 | Note that a reference to a variable (:term:`VARIABLE`) automatically points to |
| 352 | the BitBake manual if the variable is not described in the Reference Manual's Variable Glossary. |
| 353 | However, if you need to bypass this, you can explicitely refer to a description in the |
| 354 | BitBake manual as follows: |
| 355 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 356 | :term:`bitbake:BB_NUMBER_PARSE_THREADS` |
Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 357 | |
| 358 | Submitting documentation changes |
| 359 | ================================ |
| 360 | |
| 361 | Please see the top level README file in this repository for details of where |
| 362 | to send patches. |