README 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. documentation
  2. =============
  3. This is the directory that contains the Yocto Project documentation. The Yocto
  4. Project source repositories at https://git.yoctoproject.org/cgit.cgi have two
  5. instances of the "documentation" directory. You should understand each of
  6. these instances.
  7. poky/documentation - The directory within the poky Git repository containing
  8. the set of Yocto Project manuals. When you clone the
  9. poky Git repository, the documentation directory
  10. contains the manuals. The state of the manuals in this
  11. directory is guaranteed to reflect the latest Yocto
  12. Project release. The manuals at the tip of this
  13. directory will also likely contain most manual
  14. development changes.
  15. yocto-docs/documentation - The Git repository for the Yocto Project manuals.
  16. This repository is where manual development
  17. occurs. If you plan on contributing back to the
  18. Yocto Project documentation, you should set up
  19. a local Git repository based on this upstream
  20. repository as follows:
  21. git clone git://git.yoctoproject.org/yocto-docs
  22. Changes and patches are first pushed to the
  23. yocto-docs Git repository. Later, they make it
  24. into the poky Git repository found at
  25. git://git.yoctoproject.org/poky.
  26. Manual Organization
  27. ===================
  28. Folders exist for individual manuals as follows:
  29. * sdk-manual - The Yocto Project Software Development Kit (SDK) Developer's Guide.
  30. * bsp-guide - The Yocto Project Board Support Package (BSP) Developer's Guide
  31. * dev-manual - The Yocto Project Development Tasks Manual
  32. * kernel-dev - The Yocto Project Linux Kernel Development Tasks Manual
  33. * ref-manual - The Yocto Project Reference Manual
  34. * brief-yoctoprojectqs - The Yocto Project Quick Start
  35. * profile-manual - The Yocto Project Profile and Tracing Manual
  36. * toaster-manual - The Toaster Manual
  37. * test-manual - The Test Environment Manual
  38. Each folder is self-contained regarding content and figures.
  39. If you want to find HTML versions of the Yocto Project manuals on the web,
  40. go to https://www.yoctoproject.org and click on the "Docs" tab. From
  41. there you have access to archived documentation from previous releases, current
  42. documentation for the latest release, and "Docs in Progress" for the release
  43. currently being developed.
  44. In general, the Yocto Project site (https://www.yoctoproject.org) is a great
  45. reference for both information and downloads.
  46. poky.yaml
  47. =========
  48. This file defines variables used for documentation production. The variables
  49. are used to define release pathnames, URLs for the published manuals, etc.
  50. template
  51. ========
  52. Contains various templates, fonts, and some old PNG files.
  53. Sphinx
  54. ======
  55. The Yocto Project documentation was migrated from the original DocBook
  56. format to Sphinx based documentation for the Yocto Project 3.2
  57. release. This section will provide additional information related to
  58. the Sphinx migration, and guidelines for developers willing to
  59. contribute to the Yocto Project documentation.
  60. Sphinx is a tool that makes it easy to create intelligent and
  61. beautiful documentation, written by Georg Brandl and licensed under
  62. the BSD license. It was originally created for the Python
  63. documentation.
  64. Extensive documentation is available on the Sphinx website:
  65. https://www.sphinx-doc.org/en/master/. Sphinx is designed to be
  66. extensible thanks to the ability to write our own custom extensions,
  67. as Python modules, which will be executed during the generation of the
  68. documentation.
  69. Yocto Project documentation website
  70. ===================================
  71. A new website has been created to host the Yocto Project
  72. documentation, it can be found at: https://docs.yoctoproject.org/.
  73. The entire Yocto Project documentation, as well as the BitBake manual,
  74. is published on this website, including all previously released
  75. versions. A version switcher was added, as a drop-down menu on the top
  76. of the page to switch back and forth between the various versions of
  77. the current active Yocto Project releases.
  78. Transition pages have been added (as rst files) to show links to old
  79. versions of the Yocto Project documentation with links to each manual
  80. generated with DocBook.
  81. How to build the Yocto Project documentation
  82. ============================================
  83. Sphinx is written in Python. While it might work with Python2, for
  84. obvious reasons, we will only support building the Yocto Project
  85. documentation with Python3.
  86. Sphinx might be available in your Linux distro packages repositories,
  87. however it is not recommended to use distro packages, as they might be
  88. old versions, especially if you are using an LTS version of your
  89. distro. The recommended method to install Sphinx and all required
  90. dependencies is to use the Python Package Index (pip).
  91. To install all required packages run:
  92. $ pip3 install sphinx sphinx_rtd_theme pyyaml
  93. To build the documentation locally, run:
  94. $ cd documentation
  95. $ make html
  96. The resulting HTML index page will be _build/html/index.html, and you
  97. can browse your own copy of the locally generated documentation with
  98. your browser.
  99. Alternatively, you can use Pipenv to automatically install all required
  100. dependencies in a virtual environment:
  101. $ cd documentation
  102. $ pipenv install
  103. $ pipenv run make html
  104. Sphinx theme and CSS customization
  105. ==================================
  106. The Yocto Project documentation is currently based on the "Read the
  107. Docs" Sphinx theme, with a few changes to make sure the look and feel
  108. of the project documentation is preserved.
  109. Most of the theme changes can be done using the file
  110. 'sphinx-static/theme_overrides.css'. Most CSS changes in this file
  111. were inherited from the DocBook CSS stylesheets.
  112. Sphinx design guidelines and principles
  113. =======================================
  114. The initial Docbook to Sphinx migration was done with an automated
  115. tool called Pandoc (https://pandoc.org/). The tool produced some clean
  116. output markdown text files. After the initial automated conversion
  117. additional changes were done to fix up headings, images and links. In
  118. addition Sphinx has built in mechanisms (directives) which were used
  119. to replace similar functions implemented in Docbook such as glossary,
  120. variables substitutions, notes and references.
  121. Headings
  122. ========
  123. The layout of the Yocto Project manuals is organized as follows
  124. Book
  125. Chapter
  126. Section
  127. Section
  128. Section
  129. The following headings styles are defined in Sphinx:
  130. Book => overline ===
  131. Chapter => overline ***
  132. Section => ====
  133. Section => ----
  134. Section => ^^^^
  135. Section => """" or ~~~~
  136. With this proposal, we preserve the same TOCs between Sphinx and Docbook.
  137. Built-in glossary
  138. =================
  139. Sphinx has a glossary directive. From
  140. https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#glossary:
  141. This directive must contain a reST definition list with terms and
  142. definitions. It's then possible to refer to each definition through the
  143. [https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-term
  144. 'term' role].
  145. So anywhere in any of the Yocto Project manuals, :term:`VAR` can be
  146. used to refer to an item from the glossary, and a link is created
  147. automatically. A general index of terms is also generated by Sphinx
  148. automatically.
  149. Global substitutions
  150. ====================
  151. The Yocto Project documentation makes heavy use of global
  152. variables. In Docbook these variables are stored in the file
  153. poky.ent. This Docbook feature is not handled automatically with
  154. Pandoc. Sphinx has builtin support for substitutions
  155. (https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#substitutions),
  156. however there are important shortcomings. For example they cannot be
  157. used/nested inside code-block sections.
  158. A Sphinx extension was implemented to support variable substitutions
  159. to mimic the DocBook based documentation behavior. Variable
  160. substitutions are done while reading/parsing the .rst files. The
  161. pattern for variables substitutions is the same as with DocBook,
  162. e.g. `&VAR;`.
  163. The implementation of the extension can be found here in the file
  164. documentation/sphinx/yocto-vars.py, this extension is enabled by
  165. default when building the Yocto Project documentation. All variables
  166. are set in a file call poky.yaml, which was initially generated from
  167. poky.ent. The file was converted into YAML so that it is easier to
  168. process by the custom Sphinx extension (which is a Python module).
  169. For example, the following .rst content will produce the 'expected'
  170. content:
  171. .. code-block::
  172. $ mkdir poky-&DISTRO;
  173. or
  174. $ git clone &YOCTO_GIT_URL;/git/poky -b &DISTRO_NAME_NO_CAP;
  175. Variables can be nested, like it was the case for DocBook:
  176. YOCTO_HOME_URL : "https://www.yoctoproject.org"
  177. YOCTO_DOCS_URL : "&YOCTO_HOME_URL;/docs"
  178. Note directive
  179. ==============
  180. Sphinx has a builtin 'note' directive that produces clean Note section
  181. in the output file. There are various types of directives such as
  182. "attention", "caution", "danger", "error", "hint", "important", "tip",
  183. "warning", "admonition" that are supported, and additional directives
  184. can be added as Sphinx extension if needed.
  185. Figures
  186. =======
  187. The Yocto Project documentation has many figures/images. Sphinx has a
  188. 'figure' directive which is straightforward to use. To include a
  189. figure in the body of the documentation:
  190. .. image:: figures/YP-flow-diagram.png
  191. Links and References
  192. ====================
  193. The following types of links can be used: links to other locations in
  194. the same document, to locations in other documents and to external
  195. websites.
  196. More information can be found here:
  197. https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html.
  198. Anchor (<#link>) links are forbidden as they are not checked by Sphinx during
  199. the build and may be broken without knowing about it.
  200. References
  201. ==========
  202. The following extension is enabled by default:
  203. sphinx.ext.autosectionlabel
  204. (https://www.sphinx-doc.org/en/master/usage/extensions/autosectionlabel.html).
  205. This extension allows you to refer sections by their titles. Note that
  206. autosectionlabel_prefix_document is enabled by default, so that we can
  207. insert references from any document.
  208. For example, to insert an HTML link to a section from
  209. documentation/manual/intro.rst, use:
  210. Please check this :ref:`manual/intro:Cross-References to Locations in the Same Document`
  211. Alternatively a custom text can be used instead of using the section
  212. text:
  213. Please check this :ref:`section <manual/intro:Cross-References to Locations in the Same Document>`
  214. TIP: The following command can be used to dump all the references that
  215. are defined in the project documentation:
  216. python -msphinx.ext.intersphinx <path to build folder>/html/objects.inv
  217. This dump contains all links and for each link it shows the default
  218. "Link Text" that Sphinx would use. If the default link text is not
  219. appropriate, a custom link text can be used in the ':ref:' directive.
  220. Extlinks
  221. ========
  222. The sphinx.ext.extlinks extension is enabled by default
  223. (https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html#use-the-external-links-extension),
  224. and it is configured with the 'extlinks' definitions in
  225. the 'documentation/conf.py' file:
  226. 'yocto_home': ('https://yoctoproject.org%s', None),
  227. 'yocto_wiki': ('https://wiki.yoctoproject.org%s', None),
  228. 'yocto_dl': ('https://downloads.yoctoproject.org%s', None),
  229. 'yocto_lists': ('https://lists.yoctoproject.org%s', None),
  230. 'yocto_bugs': ('https://bugzilla.yoctoproject.org%s', None),
  231. 'yocto_ab': ('https://autobuilder.yoctoproject.org%s', None),
  232. 'yocto_docs': ('https://docs.yoctoproject.org%s', None),
  233. 'yocto_git': ('https://git.yoctoproject.org%s', None),
  234. 'oe_home': ('https://www.openembedded.org%s', None),
  235. 'oe_lists': ('https://lists.openembedded.org%s', None),
  236. 'oe_git': ('https://git.openembedded.org%s', None),
  237. 'oe_wiki': ('https://www.openembedded.org/wiki%s', None),
  238. 'oe_layerindex': ('https://layers.openembedded.org%s', None),
  239. 'oe_layer': ('https://layers.openembedded.org/layerindex/branch/master/layer%s', None),
  240. It creates convenient shortcuts which can be used throughout the
  241. documentation rst files, as:
  242. Please check this :yocto_wiki:`wiki page </Weekly_Status>`
  243. Intersphinx links
  244. =================
  245. The sphinx.ext.intersphinx extension is enabled by default
  246. (https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html),
  247. so that we can cross reference content from other Sphinx based
  248. documentation projects, such as the BitBake manual.
  249. References to the bitbake manual can be done like this:
  250. See the ":ref:`-D <bitbake:bitbake-user-manual/bitbake-user-manual-intro:usage and syntax>`" option
  251. or
  252. :term:`bitbake:BB_NUMBER_PARSE_THREADS`
  253. Submitting documentation changes
  254. ================================
  255. Please see the top level README file in this repository for details of where
  256. to send patches.