# Qualcomm Linux features

Qualcomm Linux features include:

- Metadata layers
- Recipes and configurations in the metadata layers
- Software features to enhance Qualcomm Linux
- Tools introduced by Qualcomm
- Instructions on how to build Qualcomm Linux images

Note

Qualcomm Linux is based on the Yocto Kirkstone release.

For a comprehensive document on the Yocto Project Kirkstone release, see
[Yocto Project documentation](https://docs.yoctoproject.org/4.0.22/singleindex.html).

Note

When you read this document, the Yocto Project may have released additional Kirkstone LTS point releases.
This document refers to the version that was current at the time of this release.

If you are new to the Yocto Project, see the build instruction in the
[Yocto Project documentation](https://docs.yoctoproject.org/4.0.22/singleindex.html#document-brief-yoctoprojectqs/index).

The Qualcomm Linux environment consists of several community-maintained
metadata layers that deliver recipes for software packages, package groups,
image recipes, and configurations. The Qualcomm Linux metadata layers are stacked
on the community layers to provide additional software components required for
Qualcomm development kits.

## Qualcomm Linux metadata layers overview

This section introduces the layers that are included
in the [Qualcomm manifest](https://github.com/quic-yocto/qcom-manifest).
This manifest includes all the layers that are required to reproduce the
reference build. The layers maintained by the Yocto Project are
introduced in the subsequent sections. Qualcomm maintains the layers
specific to Qualcomm development kits, which depend on the community
layers to realize full functionality.

The following figure shows the layers included in the Qualcomm Linux release:

![../../_images/qualcomm_linux_metadata_layers.png](data:image/png;base64,UklGRrQfAABXRUJQVlA4TKcfAAAvF4OEAGJh5LZtJPP/z+6Cjjsz54iYgLyrIvOgJ/LGkuiybPpCY0JoSlR9pGVVJFL1nUTbJ9pBYmXigHFiHgMzK1bf6nASPJEzU0f+IH0XqpNvtTptv2M5zsCFAwUHCg68UFBw1xkunD9BzAsF9R94oaGgs80saCjmgcssKDZV95zz/X79O31u9/yONMc5h6nrbIs5JyXmHLrs65zjpvFFzhmlds45TG1XedaK3LWZGUaYc2oytTmvcnABAGwcBYfBYrG4+4PF4eFwGDyc3XBYPLvD/8HazW44jF1xdsVZXQAAHDeHw2GwWAweHhaDxWKwWFuxGJxtWBzGNttswf47jO0wlv5LYiRJUiRPLRJzySMbaFiq6XzjdbZ/cmM5t9iXokvRpTDsS6hQl8BQoe6ggf/v+32/os7RqIc9XpgIYKAyUIpGwwFxwKASwbOP4rO0a7Y+1gDyRsD7QkBQZ95tQgBxHLcKrUHBGtCLmHkhUElns09HXm5AXvrnReh/cpTIa4QkAJtUQhLlkiiLQIRHQF5OLsLlItDgTBpJEmTrJb3cgwsHNmw4bPovi5HssG2OaAAatLpniSIpyc319z7//233l0hR9/797v55junilKaPEjWe69sdb4eXWZpKOUrUyVWT/Cf5z4adrItZ4UuKtUM6haO61xOkWNPJiTmre71Zjlvkm7KXKLeYb6pewtx8vil6Jf/ZOJc6FHxfZKAuQ6nxfbqKtaoh5zegUEp8X0Ol1U2aQc73IHUZV0P3lhPj6lLM7w0aKq1mUpcRR5A3s1pRUIK5J0OQ6barp5oUhUBhZPeuLB94vrgXkX2n8UxoG5bjWLZ42iLyQz9xndItyK1l1CUpCqFmMDWqPYpqgmdBE1gDWzEYtpjaSuplhZnGLfetY9RlJEUhQC9UCFqwIicwBjSBTYMdS8MWV1vJwrTdWr41jFqGiQfjPeS07bm37QoSZUuJHcayBIIH08SsRGIZRw5lHONK0GYrgZFZFYFO0MqzFnNv8YDzsYZtT38dCNqsB4QWGcY0tjjaUMHNCzF4Y25Xl56tZI48W81cBsM0WkaWu5RBwrmU+TCqThh6UmRqRZ3AlHr10c4BybPKx1FD+CoT45G7tpDKFq3tIHirNregQu4lDjNolAz3xAxXFpdkS0tBaZlhPIUrU3omFffmL4ZRutAy6sXHHvSOI9Kh5v143uaW8RAJRtLDbFssbarrSyFZWTk6JhUx4SIYRtFYxEi3NI4jeD9uSa+8y8gWIbqMPOvhFG+sISjOrArc3BalXRJsS336coka22YGjZIxlvGAben60rFYeplkc5xUqbFjcX0pfUORK4iyVATwF2S9VLYc60iwSQVni09emFpE04zaMavSCPjcEhApkQu6JetK7VynMrA135dg6dIzxc0oH/MhmWUhBQwQL4wKDjRMqX4Mjm3R2qbK+GctmHvg6eSH8l3JeriSKYlmlS9051HrdcUXR6Lry1Qvz4e22NpGR09ygUc10SoNM2qHrC7mfblRMlYjQz8OcUunFQiv7wLfMI5gRa4gzr+0jHv0bbZ42kyzB+4yoO8HKbeR6LHUrykd1/tkCVNCt8FOymBqRL6+ZCwEdhnJ/ZDExNIWS/tZxVRpG8qtVl3iMM1QxThNt/D4uRwuSMmQAmvwbBlYqoCyAi5hnFDM5+2s+7Ol6nLxqNI31081dhpbhDY4ur4UnTq8r80qYOUW9DWxD8M0irYuq7S2BDdJEESTRWEhNJwZp2gGLCOwbbG0qSuKTtwa9m1tTVvHW1tbctfMqgGFPEeLbZCRA5QF2oxYLG2YqsHC2AdbNqp23Ee6LSkCDQGP8aCcAVDWEeTEIrVhFCIbmZawHE4fKEE3gI+27ek52bjK/Dkk7ouV+PC5Vc6LlfjweW7Oi5V48fmfyX/KABHjfPoxaP4KbS85Lp2UpO51abyYky35T6qYtTJ1iDo5FUetbJ0ucerpPqZomRkLo8Z1d19lYqmuLyuMulidKIzjoRSKojh+VqkoguPok/8k/9lgiY5+76/PJBpM3dHvifeaRFVpYCGNEnJFKAra0REAIpQ8IYnoQ5DELspfKWkGsBqgEfd8HEtF0ZCOTUNZNpQ8lkT0BiSxi/RXSazdR0yR8R0VNUVtMZalSWnCc8hStwMnqtj8ComZ2e8XH61CWlhp149lfKuSsNaY5G8cW2jlPu+peZfkmstWyUgCzR65z49jCVyPh9GAR0riYA8TaX4NnVxfzn+umg+Vn3iae7YMH45OAjwxUqmUhdL1JeLAvEsjBiUYwsWRwtXwlJI4COzLWTU4pk7m9wLlZ1ahj0Gjk+yVfpGY4WHoGdeXWS+e7w+O1WxrNRjG2eXgOEKZVQHqSz44BoDTsYC8iIF5yeEVJXMQUPZ9qSpBiyHxc+jz4Xk77Vrq0feL19LnrqGDQMl6sDpX+S8Hx3sw4kjviTLkAECMACLNxxxeUTIHceSBjyjrMT/X++6P+1JRVuKs8rRaxHITdX0pczQq5gfCoGY9Db2YVYOeDl66gHZpKiKpJAZAoJ0lgOQOkvHSx+AExfwcJmYYj3ysobAV/KGT2PuDY7MJAiyiAllELkVJHEgPlA6MTlDaD/4FSxUlHlUouRa8jEfujz8hgiu+5/uetWioCJQ/6UcMpJyYoSFNqR3I9E6uB6ATfJn4OXJ/JhvSyvcTy0jalUb4ZEJRkzuEM1GpaBRXyeBNSs4lIBYv4R8qJMMGrBEhT5IwAEJBEFGaRnHVDN6iLDlXneYpl27m8yfDIV5TWAMGA9AUBFFL0SguE54Z4iYYCGPqTj6v6GupuZqgPYL4niBO0B5FfH8WJmiPLr5X/mP+awYmIsb59GPG/BUbyM7rco/uNQJQIHWbsokXc7Il/0n+U/ZY039OyE5VcdQEt5FiHW+0OO4jWhwnGC+OK0/+k/xnusCW/a3jOgNuV0v5v3vlc0qFmmTA7caprus3SxgLH1ONMBqQkg8Zu2+qJV/IVgvvUpc6LhijAen4FGM3S3AUc0ZRYlfi+Y0sNs2ULvO5pQ7uXrQVqU8oqKDXwL1PE05LdfdKDTGKeSfBz2uLTTOZmc8poQPDiqtfU9DG9sINUMDARCV83So1A2IU87TBz2HAMNnKyLfEAC0nLCtSn1LomJ4D2AKnAQismIjATbdK5kH/Gy208scv9z1bxnj+0+7zHkboXJLg5zA4BLAWGak4kZIctXJ/0rewS0po3WVObCLH6mnzVVhB6vPRPMn6QuNjWskAitkmQTynAQL8VuXzPvJpjQRJsSAkcpTjX4Aiwc9DMeOnLjWGgR0poQ1hxfH/huXGtUA8B4xH/H6b7SlTqASDSaZmsYwjn/dnEKF2PgwQSyP4eevW3cezatBXMZ4DwFGLCsZ5QDaw9yihDWllDf28BOCgX48zja9gtdx4dgMAOKgfIzeVsPCnm6XBMXa/EXYZd6UyvpW7O+oQczjreNvwPum5FjY0tEFWTL0oXV4AGL6CBcF4lyHwf+1ATWV590z4gy2zDz0xKuC2GiBWQoxD348t9H2HH6Yug4YcVCVbQipuJfVDwQZl97vsqyCevcPU5Us+tkz5MpZdMumXYWhY8oDbdEFBX54PLQ2QoQ3faj6EHkooCKxpz25AlJZP3t/3sfHyIXwmOkY8b7MguJbVgylTwg2OgW8WSFapMJ7vywWqcxVu21QDDG04VqOsReGCFkrjx3N18Qz/AhDPboBoVgGH5lJ+F90qOW9HlPpGhRk9mz3/VJMbG9bNEIptC1KGtBWoFwkJv4tiGiIaQO63lDZb2d26z17rG9tm9Gx2hxz4UMa/SWtiD0lD0kqLkIAzDWAZAg3QxPyjoI66W89lhXZIYEbPNr5fUWvxR7FMbNqQsmIiJMYDYYYhogG/qsE0H3PUrZKflblvLGFdAnq3+XuCOFl7owlrQO82CyZrbzxhQH908e8t/Jj/mhmbQqhB1Ji/YgPZeV3GFF1cGPUZZeJPL7tvcdSKuo8Xc7Il/0kl8qd9xVHrougSq9+P0UyNKSyMWoLlcmsixfr2aHE8VLQ4fjZefN5C8p9EK3Vd1113bWYqBdY1NZa6rt+kM7AY8dlJFfFCN+kgVMib8A9Ng6QjweglRqxthoGpvhSFzagACIgFbyAaZFpgCjIVXjbgpdZBrFjbBAPjeSqK2mSsa4uytrJxc0SLTAly5qGYqRsNpC6N4NoaAxU1RW0xlqVJacJTRJOMCbHYqRv9oy5DOO3Tyuc9adePkD3bE6PCco5JLG41+0qynv25BOPGZLWxBK7Hw2jC40Rt/nPVfKh9KAcgZUoQ2KkHjQrC+ObDuAcAC9JlEAemWRoxKMEQLo6szKlOKEXAoH1oB6a4qdWQxXBWhdHh0CFTcy+e7w+OaSxunbMTswl/KQgATscC8iIG5iWHR0rRYhiJD+2AVkT81INGA8nUrApzA0PJetgknuYwMO3B6HHo86FO5jyMMQKINB8b8D9UA1PWi5H4QAcpxE6tnsRZ5Wm1iOVma1Z5d1ezatCLUPZ8Ae3SVQ5h4EkMgEA7Do8VJeVDO2BapJNrab6sjZAVPIwwYx0X3WyCAIuoQBaRCylRJfGBDpTQlIidWiEvYjyqUHIteBmP3B9/QgTbOt/37KcqofuSe9vK9VzMep5CtVapfaADpRJMpVLXUglRN/7KSNpRbxkSilrdTnTfHSff/0PyirJWAPT7ihbvZZdxUivclWwLE0vSjlpiQigIor1qhF4vguQ1JQLQ61A0L6Hgpx4qIL8KDxXqduSSRE1BEIlVhkPXkiGviDjrFhUvoeCnVjVyduBGhDh+1n6CFiOOK7eeoMWLzyHZiJ7kP23yfy70HxTJXOj/jRfz4yX/SSWyr0DqtDHqErc/j0UyF/oyW0WK9e3R4nioaHH8bLz4vIXkP4lVmqZplJl8jaeg0nR3M7kYZ0ShaTzvZsB4YHU3VF7HRBeeEp0C0NWoRxFVEb9jogtPiQ7RAcCsdmYXqIl4HhNdeEp0ABgYj7UDSRQRz2Oii0+JbrO6k37AgJS32O7Q916GBkHXQzyPiS4/JboBDKq6EIj5MGD+0h0EXRXxOya6jynRuzgas0pehwS3VhB0NSQHY6JLTYnuzs79r5+7LiNf7mW5LwUTDLytvFz21Z+0TBax3Ezt+ddG81NfCKBK4ndMdB9TokNm1bNqETDyQOnmUsUvex4TXX5K9AECVv7LmGDgBg+Crob4HhNdekr0BhMTDOeDslAaXPbWn6gjvsdEF5sSHUjCKJzIqKrjFc9jostPiT6EUQwiNAi6HuJ3THQPU6JDbQMBDYKukYR0OIemHydoP0GLEceVW0/Q4sXnkCT/mVGJiHE+/agxf8UGsvO6jGK5VLWFUWNolIl1UWYLpPbFi/nxkv/MYE8cWX/ytZ7WoMnAiA8HGHplO6yfEuKlAaZ+KeK+V4W4wcvAesXq5NL2sBo3ehYxuz281EuU2ocY08WJ2zq40H++BA7q/48QN7js+vYTiQujLqa4wzv0sHor5q3hpR7PEXPqwQcX+imYYYAbXJpbLLeCKAZ3uIeeVTShpSYJLTVJcC33wM1XWyEUizvdQ48qDmGlpgksNU1oLS8T3On+7UnFI6TUDMJKzSCwlif/ST1RdytP5KQNnslJ8mkUOb5x1f1u1UYvg3fukGqDR/KSvGdgtkCZIxy+HR5cDC/dru1Wn7gNMkx1cOYI+n6WqQ21H4QiyyTH20oIgdC+H516ETc3N72PqRy+HR5cDC8N2B3e/JNNd+jD+fZtkJFGH5yiSDeI2wY7rBcyR5b6lzymYt70YWJbyeAttOCjU+/hpiiKxd5BjQt55Hj4KhxCSA8uigdE4OccsB5OY3DXKHgmRBtkO2I3ByIs5+ey4GPbMCz1R03our6OIBe//XaiEfFAD8ztBbmFxyIshlG0Tn38rEXHgnZ0BIAIJZ9D6j6uGng07aq3/wU0hUPH/VyJ4wER+Lk+gSNFMQmQHQRkzoJog2xHwg3iWnN+rs6Aj21DW+pdRem6vq4gE8/9rqEzULCxbi/IrQ6NxWfButEYqGe5FqTj4iJpScnnDGsr4OoDD+w5ucYh477mNPCaBhCBp3WFyMPUpIL06wzINQg4Om4Z2kD+HBDz8bFtOJY4NlC6ri8Q5OG5333ozL+99Pu2d1jcFO3cfPVY+bwn7VaQ4qZoHSXJ+b2TAhNxF5gUvbhRjCoqelFAVPTiBrge/2JhwucK2IP33230Noa1ctc3xqSftEv0mrxpl7vu6z/36119SuDumra664EJD5bAsuYnR9bO/Uo1OLmodtpyd+d+HeKRYUlxgtTo4O7Z24pnD9S8EpT1z23TBAdrEj3XfIQbJB/RWvHaszUfYQOZr4OIqFHtqu/cqlM+G9ltwwxdVIjaBJYNz7MnaKO4um5T7C14zfl93nGCvvvdXK2rgeqEfxhtCYfNfR1QT0a2b0h26NBwUua/WHwdQ6gq3dtcKhyZ02nEoARDuGKkcE34xRxCYPDQlLI+IT1H4agZwwROcBcgd08hzWkr8NCa65pyGuTaXM1GvkHgdnCi2agca4C4PpDJVRZEIxtyB/MaetOHqebDprRty8d3v3HnTqwPg+lG94YU4oUvfnFlW4WxaXUbetrHL7NesbIJSc6xUqwefrH47uXguIDy3SpAfSkIAP5qLCCrmSIwLy34fDK5fbUbTmtrTzhmsreb5OWpmvg2zVrltnmlJz+wS68+lb2tNLnV8wByeGtOIiCbEH6k+Wo3W+uT4+cgSHnOgnyDznzn9sONlrExOdYAYRw89YOOKrKRDf2noB4Eiuztqz9pN32Yar7TFGcL8q/47rdYbr51p6QtXmjvVkvMDSlEsl7x8dDnoN1vO5Ssh02Kv8Kk6F+HYem3ZQz6bjU4BoCiABBpPubwOSWj860z9dm8jaev5luv1ZlPnRsPZLRHyW7MTSEnFR4jDfJjEGddCxgXFRjPhnyDLp66f/CyIWxMljrB1adkjOxIcpHBsZKyKDsKPni6UxxwUx79yvP5P+K737hzG+vDYOqb7W6u9xZkDEqrRXHzEUMyIaCSIUdwOlHgtASnQuD3i4cGXbXla8/e3iRdVMLbkUQiS/H/R7VZqOeYeOo3ZNLkHcn05BtGoJ4Lmu9Wg14hJWgB7dJURFJJDIBAuy2msNfebqCoOe8Epwek+jR729QEjukDmKIgJ5UQNYzf1XSeWki7zZF8g87CWvezfkfYUgg0SojXh8rvOpJwZGWIVLK3WYVqPmhKRnz3+0z67beeqw/D1AfsNnXVgoet4GXEGuOwNTg2myDAolAgi2ILyViGw3n07szVaRCuuKu5DhfikSUtchJpkAPNb2saFOqk2RyJN6hRbglbCoFGgeszPCbZyEbmi3sFx1Co5oOmZMR3v68+Ra8NUBHvZvf24GvCp0jQClVIUvRCJUUvbgDxH1VUdIHyJ3I1GaKi/+KW09Vnd9VhtN717KD5rPsH673Bibr+KLvvruFSeB8+9WzN+dTgBDlTiPDbmnbApXv2/HaTJN2gHC6Lbkw/2QhbWoFGyQwSVtRZEI6sDIHFJ7v+PycNQ6Gab5oige9+w87d+LxUHwYXUFt/2d5Hh/h+4k1B2lm3DAkFu534XZF9P9GEz+f7iWY7BpCb9/rsO4CBJAVtZwx9jgn1XPPfT5Ru0DQnlszCtc6bDu8n+omMZxmkYZgsXbRdufjud96kskjx+1Z7POJ7YeKNbmc+YqIpGCLKfFrFhM/p+hOzHQIghvV8Q4onRqZ5CtrOGGqOCfU8x0e6QfTxC7Nwrad5h8+f+ImsDnSgYZgsXeDMxne/p3kqixz//Ie1D74mHPzdZbS24vOKZjsAMB+mMx5ZpDTTFLSdMcwxTLjxDAg3iD+uZxaWNZju8HlFP5HJAKCoEZCl6zrz8dhvRZXOIkHpn79ni/1fHT0M1urmo8Pvz05znJVtpe/Peu5OzwMmaB8tfq98ipOqrSSv3VG2z1uASdWWks/uxIvPIUn+M4MMEeN8+jFj/oo4NK/LKKoxhYVRX3wZwbCH1T8w/wgv9SieMeNGBxd6O+ZIgBtclPVT2lcgNRkYc68h9LQGrYsCxzELMXWL+EGAoX8AUwe5wePF/HjJf5IAfHiZrZYRTbfrxMI8Da4KK9yer3JOdL1iJ6eVzXW6XUt1idcrrtgNBdvyiaq9QpTlhTm/7Ffw69uLtX4qTb/sV+jHQxVqyz1Ql/0K/fjZAm25F+bKfoX+eQuF2fLkPxEX+HXUXXt11OWmGF+gS69pJ11umqu8HF15TXPscmmRXu36ROKjbcIc76FaZjOzdfhi5pZRtpjmzZlDLI2U6lOmTud4D9Gqrc3M1kFinKci5RFMcpK9TdTpHO+hRt39eA6fV7B1kBjnqUhJgcWlMTCINJVm0vUdqZuRaCg4neMxlocO1bnaj9dgSila5/+PsgYCQwYcp1LClMZr4hhajEoxTUmdJ5cibBqcdlpqZnuWn+HNp0Jjn+PSk7CGRppz5Xm4D6vlhmnO45hRjFyLUCmmnNQ5MmHTMLmSAFP2bVl+hjfPhUbxEO70JMSQYY4XkHcBBnDwrzLDVI6Jwcm3XruPXkLP+bsN191j27ltlJqLp+4B66BREzLW0xQyZPOTLX0gsECQPU/qNRhrEbt0UvnTXYxJmE+3Y/kZ3hxoNI/mTk+Ch9JzvZC8BTRwlYxJ6WHd9VBw5FlXHYp0N9TVp9yf990nuoPmpB6UvQbKwbqnYa9ULxycMAVMApNPt2FJD29OErGz6OiaU0dkZyREHsNkEMoUDZ2ODJyp0B2TcoP7BI6NCXTB/wnBLAPEHUp61XMZl2RP7rhK1/kpH5yAZM9+WJEtrfkJyn/eNt8SE6TS9P9nre8WOvbB9izh4c1zGkxVn8M0Jwu1apG3GUzRoK3AwFVyTcoMsIexy6n1CvY/UF/+yEGCEc03Bl2fNDlo0jR0S3fYU7HD6iYwmVBc27Hkp2snidhZdHTNeV+pFDghOZPIwzFd00cwdPr/LQMc2jYpLbC52EWFgf4HJxpCtPHr2PPOpNPy+kGTE+QztiV1qnS3lFSWr91925b08OZncnaUvLgsIrfmTDqVoicka2Qi8nBMJ0VMiP8/ypjaBjC0Y1J+gPbQgwBCaf2769nbuoPqbgi9lsurXVuKzx9iZDZP0JSuC1aBHgrrlU+pbnjmEHyZzc5tgwWlLK31becV6eHNwbDoaHR013PeBZjsIeCYvrIrMHQpujJp0ry8cwuC6wBI4tgNcZHD5qIC8LxpCH2jlkHbuISHN3dfhn/gfPTq3vX8owswuYOfCDimr+wmMHQp+hGf3KpLXzIsWW+7gMtbsD95nU2zrgF4uFFy1wDgy+ZW/QV/t7tNS3y69j6YiB2Njm48KYwJjwe/kDK9JaHTz7cNYGjHpMxAVyL6dAYXv1Dyvuxt2JJV53LxlC1h5JQI6Dvb/Muiw5tnHR0diTNMgAjHtLFIoQDKW16+/C28xSTTB7goM1rra3LSzz6r/p8LvG7zKw7NVVtqcHXKPRCWXfdRolTbtSSHN888OjoSZ5ggEYZpbpGyBOZKDPy5BsbAznn60hivuw+/1F8ywTULOydux88rSg9vPsdafUjPrc4xgSK06dQiZQmUGvQJi5+8pvychxd7aR08/FJ/yQTXLOSc+PD0fai6H9DDV8lBn7DsZ6hxSzhru6N1IEb9JRvcYplOH6K+J+g+ypV5vuX+yfDhdUz3YeUDqF99Cq601CX4c6ush68yRODPE6a5WqsQAEX8PLfQnyfg0mTKABSR4J8nWGuVRxf/Lu6P+a9yTcQ4n37MmL8iCs3r8tJRVMPpdh05DzFu9PaCbfm7nipJ+6d90+2C/9rTxli4PX9NvJgfL/lPGpH3P6dAap8uce6KuttXGHXurDLxtbYwajb5T/Kf5D8RnPVTumpWtJ6m6HztD+dI1hLEWU3n+LMk6xwWU8mPMFTVCOBalyFrkxshPCTL/fn/5f9TgNDJ7sBZ6ViUqy6sfxPg23bCwwjYKZ+90EmvU0PeK1UOrL3KwgjBBNtvn9m926wSrKpvn2nYUVWP6X69A25K8uYO2A5DdXTCQdeGALhrhNX7CaV/83z1/sIxJVPHQVX92vW2zN7RFf91O5Wm06sO4I0qy/y3z0RY+xRzf+rKzBuTVTR1766bq8cs3P0EAXBnCAFVBBBmbwS8q8e4UboRNlf6e7G5qqqdXeaPvqPdcfQdg9N3brb2O937FQFw1wh/IJQiYbZwvTcbkw5hZSy6EZT2ysKNO9t2x9E7iLX2PTt+/eUPOPenhQ6jtZvJxruB0pLxBnzWerE0r7YX7cKNVWW9LHn107sX/+0QGAanV9+e8pN5odJmvfiXhqndUf3aeAPMC6P/HhqYQDpL27bWL+b8fRO9pW3bjYzQz/fZI8a6rI0A1vE+bVa2zosXxwkm/0n+k9IkWhwPNRlY04+ffddbJWv7rKZz4A7vIFlvVXb6cqXv1FKl8czJFJuFG6tvnynB5v8e8n1qP3Xlyx/4dbswQV7uzH2Sp/bTX+btr+6oqqO7GOfww98rA7+kb+HHa910unVepvmj7/Bzaj+tZd464RjjHH4oQLBPRtP127Gz9XNqP6XFPonfG+lzMqGgUzl8+QN3YD/CeKj1c2o/feWbd38eXrYuPsvA2h1h2h3mPwf8nNpPX/GflIXIwLwk2czAOikfwD5z36/b1tOp/bT7fZOFHx+KEe+z2y+AlHpdVrxYxxst5gH7cLw4TjD5zwzm/L4qkHoplxhQyX+S/6Q++cS+KFHLi+pbH39OpKh7ft8A)

**Qualcomm Linux metadata layers**

Qualcomm Linux metadata layers and descriptions

| Metadata layer | Description |
| --- | --- |
| `meta-qcom-hwe` | Contains recipes that build software components for Qualcomm development kits and provides value-added software features applicable to Qualcomm SoCs. |
| `meta-qcom-distro` | Provides a reference distribution configuration for Qualcomm development kits. Image recipes and package groups are defined in this layer. |
| `meta-qcom-extras` | Optional metadata layer for registered users. This layer enables source compilation of select components, which are<br>otherwise provided as binaries in `meta-qcom-hwe`. |
| `meta-qcom-qim-product-sdk` | Provides Qualcomm^®^ Intelligent Multimedia (QIM) SDK and AI SDKs based on the GStreamer framework. This includes<br>a set of GStreamer plug-ins, sample applications for multimedia, and AI use cases. |
| `meta-qcom-realtime` | Provides patches and configurations for the Linux Kernel to enable real-time operations. |
| `meta-qcom` | Contains Qualcomm device support and upstream OSS software components. |
| `meta-virtualization`<br><br><br>For more information, see [meta-virtualization](https://git.yoctoproject.org/meta-virtualization). | Contains packages for constructing OpenEmbedded virtualized solutions and virtualization stacks, such as Docker and Kubernetes. |
| `meta-selinux`<br><br><br>For more information, see [meta-selinux](https://git.yoctoproject.org/meta-selinux). | Enables SELinux support. This layer includes reference SELinux policies and<br>provides necessary tooling. To enable SELinux for Qualcomm Linux, set the<br>variable `DEFAULT_ENFORCING` to `enforcing` in `meta-qcom-distro/conf/distro/include/qcom-base.inc`. |
| `poky/meta`<br><br><br>For more information, see [poky/meta](https://git.yoctoproject.org/poky). | Provides build tools and recipe files that provide various software components needed for an embedded OS distribution. |
| `meta-openembedded`<br><br><br>For more information, see [meta-openembedded](https://git.openembedded.org/meta-openembedded). | Collection of layers for the OpenEmbedded build system. |
| `meta-security`<br><br><br>For more information, see [meta-security](https://git.yoctoproject.org/meta-security/tree/README?h=kirkstone). | Provides security tools and hardening tools for Linux kernels and libraries for implementing security mechanisms. |
| `meta-updater`<br><br><br>For more information, see [meta-updater](https://github.com/uptane/meta-updater/blob/kirkstone/README.adoc). | Enables over-the-air updates (OTA) with OSTree. OSTree is a tool for atomic full file system upgrades with rollback capability. |

For information about robotics layers, see [Qualcomm Intelligent Robotics Product (QIRP) SDK layers](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-265/architecture.html#component-layers-of-the-qirp-sdk).

## Qualcomm Linux metadata layers

The following layers represent the Qualcomm BSP metadata:

- [meta-qcom](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#meta-qcom-section)
- [meta-qcom-hwe](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#meta-qcom-hwe-section)
- [meta-qcom-realtime](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#meta-qcom-realtime-section)

The `qcom-wayland` reference distribution is defined in the following layer:

- [meta-qcom-distro](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#meta-qcom-distro-section)

The optional Qualcomm^®^ Intelligent Multimedia (QIM) SDK is defined by following layer:

- [meta-qcom-qim-product-sdk](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#meta-qcom-qim-product-sdk-section)

The optional BSP is defined by the following metadata layer:

- [meta-qcom-extras](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#meta-qcom-extras-section)

### Use of BitBake OVERRIDES in Qualcomm Linux metadata layers

The Qualcomm Linux metadata layers use the OVERRIDES mechanism of BitBake to implement two
distinct BSP variants referred to as `base` and `custom`.

When initiating Qualcomm Linux builds, set the `QCOM_SELECTED_BSP` variable to either
`custom` or `base`. This variable is defined in
`conf/machine/include/qcom-base.inc` and is set to `custom` by default as follows:

QCOM_SELECTED_BSP ??= "custom"
    Copy to clipboard

The value set for `QCOM_SELECTED_BSP` translates into two BitBake OVERRIDES.
The following is a mapping table of `QCOM_SELECTED_BSP` to the corresponding BitBake OVERRIDE:

| `QCOM_SELECTED_BSP` value | Corresponding BitBake OVERRIDE |
| --- | --- |
| `base` | `qcom-base-bsp` |
| `custom` | `qcom-custom-bsp` |

The effective value of the BitBake OVERRIDE sets variables selectively,
resulting in inclusion of packages in the image.

Note

To familiarize yourself with BitBake OVERRIDES, see
[Conditional syntax (Overrides)](https://docs.yoctoproject.org/bitbake/2.8/bitbake-user-manual/bitbake-user-manual-metadata.html#conditional-syntax-overrides)
and [Yocto Project documentation](https://docs.yoctoproject.org/singleindex.html#term-OVERRIDES).

To utilize the `base` variant of the BSP and how to set `QCOM_SELECTED_BSP` at build time,
see [Build base image](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/github_workflow_unregistered_users.html#build-base-image).

Note

In this release, the `base` BSP supports Qualcomm reference devices for building with `qcs8300-ride-sx.conf`,
`qcs9075-ride-sx.conf`, `qcs9100-ride-sx.conf`.

The final image composition depends on whether you choose `base` or `custom` value for the
`QCOM_SELECTED_BSP` variable, see [Overview](https://docs.qualcomm.com/doc/80-70017-27/topic/intro_yocto_linux_qualcomm.html#purpose).

To find examples of how these OVERRIDES select the software components
to be built, search the `meta-qcom-hwe` codebase using `qcom-base-bsp` and `qcom-custom-bsp`.

### meta-qcom

The `meta-qcom` metadata layer is hosted at
[git.yoctoproject.org](http://git.yoctoproject.org) and provides
recipes to build the Qualcomm OSS. The software image is built using the
following recipes from the `meta-qcom` layer.

| `recipes-devtools/qdl/qdl_git.bb` | The Qualcomm Download (QDL) flashing tool communicates<br>with the USB devices displaying ID 05c6:9008 to upload a flash<br>loader and uses this to flash the images. |
| --- | --- |
| `recipes-support/pd-mapper/pd-mapper_git.bb` | The Qualcomm pd-mapper is an implementation for the<br>protection domain mapper service. This service configures a<br>nd manages protection domains, ensuring secure communication<br>between applications and various remote processors. |
| `recipes-support/qrtr/qrtr_git.bb` | The Qualcomm Router (QRTR) is an inter-process communication mechanism<br>used in Qualcomm SoCs. It enables communication between different processors in the system,<br>like the application processor and the modem, using a socket-style programming interface in user space. |
| `recipes-support/initrdscripts/initramfs-module-copy-modules_1.0.bb` | `initramfs-framework` module for copying kernel modules from<br>`initramfs` to `rootfs`. |

### meta-qcom-hwe

The `meta-qcom-hwe` metadata layer is available on
[GitHub](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone).
It provides additional software support for enabling Qualcomm devices.

> 
> 
> - **BitBake classes**
> 
> 
>     For an introduction to the BitBake classes,
> see [Classes](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/classes).
> 
> 
> 
> 
> 
> 
>     | `classes/qimage_types.bbclass` | Implements `oe_mkvfatfs()` to generate a virtual file allocation table (VFAT) image<br>using the `mkfs.vfat` tool. |
>     | --- | --- |
>     | `classes/qprebuilt.bbclass` | Implements logic to use a prebuilt package instead of fetching and<br>compiling the source. For any recipe inheriting **qprebuilt**,<br>this class unpacks the binary packed in a <cite>tar.gz</cite> archive<br>and provides these binaries to be packaged using a BitBake task. |
>     | `classes/qmodule.bbclass` | By default, the Qualcomm BSP enforces signing the kernel module by<br>enabling `CONFIG_MODULE_SIG_FORCE` in the kernel.<br>However, some out-of-tree modules may not be properly signed.<br>To avoid module loading issues, `qmodule.bbclass` inspects<br>all packages providing kernel modules and signs them if they are<br>not already signed. |
>     | `classes/image_types_ota_sdboot.bbclass` | This bitbake class implements image creation as per requirements<br>of OSTree over-the-air upgrade system. |
> - **Machine configurations**
> 
> 
>     The Qualcomm Linux machine configuration files are available on
> [GitHub](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/conf/machine).
> 
> 
>     The files located in the `meta-qcom-hwe/conf/machine/include` directory define and
> set the required BitBake variables, which can be commonly used by machine
> configurations defined by the Qualcomm BSP. The following table provides an
> overview of these files.
> 
> 
> 
> 
> 
> 
>     | File | Description |
>     | --- | --- |
>     | `meta-qcom-hwe/conf/machine/include/qcom-base.inc` | This file sets the BitBake variables that are commonly<br>shared by all machine configurations defined in the Qualcomm BSP.<br>For example, `SOC_ARCH`, `PREFERRED_PROVIDER` and `IMAGE_FSTYPES`. |
>     | `meta-qcom-hwe/conf/machine/include/qcom-qcs6490.inc` | This file sets the `SOC_FAMILY` variable to `qcm6490`.<br>This allows Qualcomm Linux recipes to use the `qcm6490` OVERRIDE to<br>implement changes specific to the Qualcomm BSP. This file also defines<br>configuration variables that are shared by<br>all Qualcomm development kits based on QCS6490. |
>     | `meta-qcom-hwe/conf/machine/include/qcom-qcs9100.inc` | This file sets the `SOC_FAMILY` variable to `qcs9100`.<br>This allows Qualcomm Linux recipes to use the `qcs9100` OVERRIDE to<br>implement changes specific to the Qualcomm BSP. This file also defines<br>configuration variables that are shared by<br>all Qualcomm development kits based on QCS9100. |
>     | `meta-qcom-hwe/conf/machine/include/qcom-qcs8300.inc` | This file sets the `SOC_FAMILY` variable to `qcs8300`.<br>This allows Qualcomm Linux recipes to use the `qcs8300` OVERRIDE to<br>implement changes specific to the Qualcomm BSP. This file also defines<br>configuration variables that are shared by<br>all Qualcomm development kits based on QCS8300. |
> 
> 
> 
>     **Machine configuration files for development kits based on QCS6490**
> 
> 
> Note
> 
> 
> For Qualcomm Linux 1.2 and future releases, you must use the new machine configuration
> files listed in the following table. The previous machine configuration file, `qcm6490.conf`,
> from Qualcomm Linux 1.1 has been replaced with the machine configuration files of Qualcomm Linux 1.2.
> 
> 
> 
> 
> 
> 
>     | Configuration file | Description |
>     | --- | --- |
>     | `conf/machine/qcm6490-idp.conf` | This file is for the<br>integrated development platform (IDP) with QCM6490. |
>     | `conf/machine/qcs6490-rb3gen2-core-kit.conf` | This file is for the QCS6490-based<br>Qualcomm^®^ RB3 Gen 2 Core development kit. |
>     | `conf/machine/qcs6490-rb3gen2-vision-kit.conf` | This file is for the QCS6490-based<br>Qualcomm^®^ RB3 Gen 2 Vision development kit with low-/high-resolution<br>CSI cameras. |
>     | `conf/machine/qcs6490-rb3gen2-industrial-kit.conf` | This file is for the QCS6490-based<br>Qualcomm^®^ RB3 Gen 2 Industrial development kit. |
> 
> 
> 
>     **Machine configuration files for development kits based on QCS9075 and QCS9100**
> 
> 
> 
> 
> 
> 
>     | Configuration file | Description |
>     | --- | --- |
>     | `conf/machine/qcs9100-ride-sx.conf` | This file is for QCS9100-based<br>Qualcomm^®^ IQ9 Beta Evaluation Kit (EVK). |
>     | `conf/machine/qcs9075-ride-sx.conf` | This file is for QCS9075-based<br>Qualcomm^®^ IQ9 Beta EVK. |
> 
> 
> 
>     **Machine configuration files for development kits based on QCS8300**
> 
> 
> 
> 
> 
> 
>     | Configuration file | Description |
>     | --- | --- |
>     | `conf/machine/qcs8300-ride-sx.conf` | This file is for QCS8300-based<br>Qualcomm^®^ IQ8 Beta EVK. |
> 
> 
> 
>     **Use of OVERRIDES in** `meta-qcom-hwe`
> 
> 
>     The Qualcomm BSP uses BitBake OVERRIDES to define
> two different methods for building the BSP.
> 
> 
>     The metadata layer derives `MACHINEOVERRIDES` from `QCOM_SELECTED_BSP`
> in the `meta-qcom-hwe/conf/machine/include/qcom-base.inc` file as follows:
> 
> 
> MACHINEOVERRIDES =. "qcom-${QCOM_SELECTED_BSP}-bsp:"
>         Copy to clipboard
> 
> 
>     The two MACHINEOVERRIDES in `meta-qcom-hwe` are `qcom-custom-bsp`
> and `qcom-base-bsp`. These OVERRIDES are used by machine configuration
> files, recipes, and other configuration files within the `meta-qcom-hwe`
> metadata layer. The configuration files and recipes use these OVERRIDE constructs
> to conditionally set variables and append tasks as needed.
> 
> 
>     The use of MACHINEOVERRIDES in recipes and configuration files determines
> whether the final image is composed of Qualcomm custom BSP software components
> or upstream software components, based on the effective OVERRIDE at build time.
> 
> 
>     For example, PREFERRED\_PROVIDER for `egl`, `libgl`, `libgles1`,
> and `libgles2` is set as follows:
> 
> 
> 
> 
> 
> 
>     | Effective OVERRIDE | PREFERRED\_PROVIDER for `egl`, `libgl`, `libgles1`, `libgles2` |
>     | --- | --- |
>     | `qcom-custom-bsp` | `adreno` |
>     | `qcom-base-bsp` | `mesa` |
> 
> 
> 
>     In the BitBake code snippet, the OVERRIDES conditionally sets the variables as follows:
> 
> 
> # Provider for Graphics Library.
>         # qcom-base-bsp uses 'mesa' as GL provider
>         GL_PROVIDER ?= "adreno"
>         GL_PROVIDER:qcom-base-bsp ?= "mesa"
>         
>         PREFERRED_PROVIDER_virtual/egl      = "${GL_PROVIDER}"
>         PREFERRED_PROVIDER_virtual/libgl    = "${GL_PROVIDER}"
>         PREFERRED_PROVIDER_virtual/libgles1 = "${GL_PROVIDER}"
>         PREFERRED_PROVIDER_virtual/libgles2 = "${GL_PROVIDER}"
>         
>         PREFERRED_PROVIDER_virtual/egl-native      = "mesa-native"
>         PREFERRED_PROVIDER_virtual/libgl-native    = "mesa-native"
>         PREFERRED_PROVIDER_virtual/libgles1-native = "mesa-native"
>         PREFERRED_PROVIDER_virtual/libgles2-native = "mesa-native"
>         Copy to clipboard
> 
> 
> Note
> 
> 
> In this release, the `qcom-base-bsp` OVERRIDE is built only for `qcs9100-ride-sx.conf` and `qcs8300-ride-sx.conf`.
> 
>     - **Kernel cmdline**
> 
> 
>         The `meta-qcom-hwe/conf/machine/include/qcom-qcs6490.inc`, `meta-qcom-hwe/conf/machine/include/qcom-qcs9100.inc`
> and `meta-qcom-hwe/conf/machine/include/qcom-qcs8300.inc` include files
> use the `KERNEL_CMDLINE_EXTRA` variable to set the kernel command-line parameters as follows:
> 
> 
> Tab qcom-qcs6490.inc
> Tab qcom-qcs9100.inc
> Tab qcom-qcs8300.inc
> 
> The following snippet is from the `qcom-qcs6490.inc` file:
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>             DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>             
>             KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 kpti=off kasan=off kasan.stacktrace=off no-steal-acc ${DBG_CMDLINE} swiotlb=128 mitigations=auto net.ifnames=0"
>             Copy to clipboard
> 
> The following snippet is from the `qcom-qcs9100.inc` file:
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>             DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon reboot=panic_warm page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>             
>             KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi net.ifnames=0 pci=noaer kpti=off kasan=off kasan.stacktrace=off swiotlb=128 ${DBG_CMDLINE} mitigations=auto kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 no-steal-acc vfio_iommu_type1.allow_unsafe_interrupts=1 fw_devlink.strict=1"
>             Copy to clipboard
> 
> The following snippet is from the `qcom-qcs8300.inc` file:
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>             DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon reboot=panic_warm page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>             
>             KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi net.ifnames=0 pci=noaer kpti=off kasan=off kasan.stacktrace=off swiotlb=128 ${DBG_CMDLINE} mitigations=auto kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 no-steal-acc arm64.nopauth  fw_devlink.strict=1"
>             Copy to clipboard
>     - **Include DTB**
> 
> 
>         To ensure that the correct device tree binary (DTB) is included, the
> `KERNEL_DEVICETREE` variable is conditionally set using the
> OVERRIDES mechanism. This is managed within each individual
> machine configuration file in `meta-qcom-hwe/conf/machine`.
> 
> 
>         In the machine configuration file, `KERNEL_DEVICETREE` is set
> differently for `custom` vs. `base` variant. The following example from
> `conf/machine/qcs9100-ride-sx.conf` shows how the machine configuration
> file selects a DTB:
> 
> 
> Tab linux-qcom-base
> Tab linux-qcom-custom
> 
> The following code block shows how `KERNEL_DEVICETREE`
> is set for `linux-qcom-base`, resulting in the `base` variant using the upstream DTB.
> 
> 
> KERNEL_DEVICETREE:pn-linux-qcom-base = " \
>                                  qcom/qcs9100-ride.dtb \
>                                  qcom/qcs9100-ride-r3.dtb \
>                                  qcom/sa8775p-ride.dtb \
>                                  qcom/sa8775p-ride-r3.dtb \
>                                  "
>             Copy to clipboard
> 
> The following code block shows how `KERNEL_DEVICETREE`
> is set for `linux-qcom-custom`, resulting in the `custom` variant using the upstream DTB.
> 
> 
> KERNEL_DEVICETREE:pn-linux-qcom-custom = " \
>                                  qcom/qcs9100-addons-ride.dtb \
>                                  qcom/qcs9100-addons-ride-r3.dtb \
>                                  qcom/sa8775p-addons-ride.dtb \
>                                  qcom/sa8775p-addons-ride-r3.dtb \
>                                  "
>             Copy to clipboard
>     - **Include additional DTBOs**
> 
> 
>         To include an additional device-tree overlay (DTBO) to be overlaid
> on the kernel device-tree, use the `KERNEL_TECH_DTBOS` variable
> to list the DTBO names.
> 
> 
> Note
> 
> 
> Qualcomm Linux supports device tree binary overlay only for `custom` variant.
> 
> 
>         The following example from `qcs9100-ride-sx.conf` shows
> how DTBOs are used.
> 
> 
> KERNEL_TECH_DTBOS[sa8775p-addons-ride] = " \
>                sa8775p-video.dtbo qcs9100-graphics.dtbo \
>                qcs9100-ride-sx-camera.dtbo \
>                "
>             KERNEL_TECH_DTBOS[sa8775p-addons-ride-r3] = " \
>                sa8775p-video.dtbo qcs9100-graphics.dtbo \
>                qcs9100-ride-sx-camera.dtbo \
>                "
>             
>             KERNEL_TECH_DTBOS[qcs9100-addons-ride] = " \
>                sa8775p-video.dtbo qcs9100-graphics.dtbo \
>                qcs9100-ride-sx-camera.dtbo \
>                "
>             
>             KERNEL_TECH_DTBOS[qcs9100-addons-ride-r3] = " \
>                sa8775p-video.dtbo qcs9100-graphics.dtbo \
>                qcs9100-ride-sx-camera.dtbo \
>                "
>             
>             KERNEL_TECH_DTBO_PROVIDERS = "\
>                qcom-graphicsdevicetree \
>                qcom-videodtb \
>                cameradtb \
>                "
>             Copy to clipboard
> - **Firmware recipes**
> 
> 
>     Qualcomm Linux firmware recipe files are available on
> [GitHub](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-firmware).
> When the Qualcomm Linux source code is synced, the firmware recipes
> are available in the following directory:
> `<workspace>/layers/meta-qcom-hwe/recipes-firmware/firmware`.
> 
>     - **Critical boot binaries**
> 
> 
>         Critical boot firmware images are required to boot the kernel on the
> device. The following firmware recipe provides the hardware SoC-specific
> boot firmware.
> 
> 
> 
> 
> 
> 
>         | `firmware-qcom-bootbins_1.0.bb` | Handles fetch, unpack, and deploy for critical<br>boot firmware binaries for compatible targets.<br>The boot firmware required for QCS6490, QCS9075, and QCS8300<br>based machines are provided by the `QCM6490_bootbinaries.zip`,<br>`QCS9100_bootbinaries.zip`, and `QCS8300_bootbinaries` files. |
>         | --- | --- |
> 
> 
> 
>         After the build is generated, the firmware binaries in these zip files
> are available for flashing in the following directory:
> 
> 
>         `<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/<machine-name>/<image-name>/`
>     - **Subsystem firmware binaries**
> 
> 
>         Qualcomm Linux includes firmware binaries that are loaded and run on
> the corresponding subsystems. As the Qualcomm hardware SoC boots up, individual
> subsystems execute the firmware as they come out of reset.
> 
> 
> 
> 
> 
> 
>         | `firmware-qcom-hlosfw_1.0.bb` | Handles fetch, unpack, and install for subsystem<br>firmware binaries, such as aDSP, cDSP, modem, and WLAN.<br>The firmware files for QCM6490, QCS9075, and QCS8300 based machines<br>are packed in `QCM6490_fw.zip`, `QCS9100_fw.zip`, and `QCS8300_fw.zip` files. |
>         | --- | --- |
> 
> 
> 
>         The `firmware-qcom-hlosfw_1.0.bb` recipe does the following:
> 
> 
> 
> > 
> > 
> > 1. Fetches the subsystem firmware binaries from the remote server based on SRC\_URI.
> >         2. Unpacks the zip file.
> >         3. Installs the firmware in `rootfs`.
>     - **DSP libraries**
> 
> 
>         User space utilities refer to the DSP libraries, which must
> be available in the `rootfs` image.
> The following firmware recipes provide the hardware SoC-specific DSP libraries:
> 
> 
> 
> 
> 
> 
>         | `firmware-qcom-dspso_1.0.bb` | Handles fetch, unpack, and install for DSP libraries.<br>The libraries for QCM6490, QCS9075, and QCS8300 based machines are packed<br>in the `QCM6490_dspso.zip`, `QCS9100_dspso.zip`, and `QCS8300_dspso.zip` zip files. |
>         | --- | --- |
> 
> 
> 
>         The `firmware-qcom-dspso_1.0.bb` recipe does the following:
> 
> 
> 
> > 
> > 
> > 1. Fetches the DSP libraries from the remote server based on SRC\_URI.
> >         2. Unpacks the zip file.
> >         3. Installs the DSP libraries in `rootfs`.
>     - **Installation of boot, subsystem, and dspso**
> 
> 
>         When Qualcomm Linux is built, the build system uses the firmware
> recipes to deploy the prebuilt firmware based on the `MACHINE_EXTRA_RDEPENDS`
> configuration variable, which is set in the machine configuration file.
> For example, in `qcom-qcs6490.inc`, see the inclusion of
> `packagegroup-firmware-qcm6490` in the `MACHINE_EXTRA_RDEPENDS` variable:
> 
> 
> MACHINE_EXTRA_RDEPENDS += " \
>                packagegroup-firmware-qcm6490 \
>                "
>             Copy to clipboard
> 
> 
> Note
> 
> 
> The `packagegroup-firmware-qcm6490` recipe is present in
> the `<workspace>/layers/meta-qcom-hwe/recipes-firmware/packagegroups/` directory.
> It groups the firmware recipes to generate the image.
> 
> 
>         When Qualcomm Linux is built, based on the configuration in the machine
> configuration and the package group recipe file, the respective firmware
> recipes from the `<workspace>/layers/meta-qcom-hwe/recipes-firmware/firmware`
> directory are built.
> - **Kernel recipes**
> 
> 
>     The Linux kernel recipes used by Qualcomm Linux are in
> `<workspace>/layers/meta-qcom-hwe/recipes-kernel/linux`.
> 
> 
>     Qualcomm Linux supports the long-term support (LTS) Linux kernel v6.6.x.
> In the `meta-qcom-hwe` layer, there are two distinct kernel recipes:
> 
>     - The `linux-qcom-custom_6.6.bb` recipe supports the `custom` BSP and fetches
> the kernel sources from `qcom.git` hosted at `git.codelinaro.org`.
>     - The `linux-qcom-base_6.6.bb` recipe supports the `base` BSP and retrieves
> kernel sources from `linux.git` hosted at `git.kernel.org`.
> 
> 
> 
> Tab linux-qcom-custom\_6.6.bb
> Tab linux-qcom-base\_6.6.bb
> 
> inherit kernel sota
>         
>         COMPATIBLE_MACHINE = "(qcom)"
>         
>         SRCPROJECT = "git://git.codelinaro.org/clo/la/kernel/qcom.git;protocol=https"
>         SRCBRANCH  = "kernel.qclinux.1.0.r1-rel"
>         SRCREV     = "d3ed32bf7ee64db22653833d4c3d9a80dd76896d"
>         
>         SRC_URI = "${SRCPROJECT};branch=${SRCBRANCH};destsuffix=kernel \
>                  ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', ' file://selinux.cfg', '', d)} \
>                  ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', ' file://selinux_debug.cfg', '', d)} \
>                  "
>         
>         S = "${WORKDIR}/kernel"
>         
>         KERNEL_CONFIG ??= "qcom_defconfig"
>         Copy to clipboard
> 
> inherit kernel sota
>         
>         COMPATIBLE_MACHINE = "(qcom)"
>         
>         SRC_URI = " git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git;protocol=https;branch=linux-6.6.y \
>                     file://qcom.cfg \
>                     file://vm-configs/qcom_vm.cfg \
>                     file://qcom_debug.cfg \
>                     "
>         # Apply qcom patches
>         require ${BPN}-${PV}/configs.inc
>         require ${BPN}-${PV}/devicetree.inc
>         require ${BPN}-${PV}/drivers.inc
>         require ${BPN}-${PV}/dt-bindings.inc
>         require ${BPN}-${PV}/tools.inc
>         
>         KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom.cfg"
>         KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${WORKDIR}/qcom_debug.cfg', '', d)}"
>         
>         S = "${WORKDIR}/git"
>         Copy to clipboard
> 
> 
>     The machine configuration files use OVERRIDES to select the appropriate
> kernel recipe variant. The `qcom-base.inc` file chooses
> `linux-qcom-base` when you select the `base` variant. If you
> select the `custom` variant, the kernel is built using the `linux-qcom-custom`
> recipe as shown in the following snippet.
> 
> 
> PREFERRED_PROVIDER_virtual/kernel ?= "linux-qcom-custom"
>         PREFERRED_PROVIDER_virtual/kernel:qcom-base-bsp ?= "linux-qcom-base"
>         Copy to clipboard
> 
> 
>     **Kernel configuration**
> 
> 
>     The Qualcomm Linux kernel recipe uses a different set of kernel
> configuration and fragments for the `base` and `custom` variants.
> 
> 
> 
> 
> 
> 
>     | Variant | Configuration and fragments files |
>     | --- | --- |
>     | `base` | `defconfig`, `qcom.cfg`, `qcom_vm.cfg`, `qcom_debug.cfg` |
>     | `custom` | `qcom_defconfig`, `qcom_addons.config`, `selinux.cfg`,<br>`qcom_debug.config`, `qcom_addons_debug.config`, `selinux_debug.cfg` |
> 
> 
> 
>     The description of `defconfig` and `fragments` used for the `custom`
> variant are provided in the following table.
> 
> 
> 
> 
> 
> 
>     | Kernel configuration fragments | Description |
>     | --- | --- |
>     | `<kernel_src>/arch/arm64/configs/qcom_defconfig` | Default configuration that is aligned to product/performance needs |
>     | `<kernel_src>/arch/arm64/configs/qcom_debug.config` | Debug configuration fragment |
>     | `<kernel_src>/arch/arm64/configs/qcom_addons.config` | Additional Qualcomm value-added additions on top of upstream aligned base |
>     | `<kernel_src>/arch/arm64/configs/qcom_addons_debug.config` | Qualcomm debug enablement |
> 
> 
> 
>     The Qualcomm Linux `custom` variant recipe `linux-qcom-custom_6.6.bb`
> further supports the `perf` and `debug` variations.
> The default method to build the kernel using `linux-qcom-custom_6.6.bb`
> is `perf`.
> 
> 
> 
> 
> 
> 
>     | Build variant | Defconfig/config fragments |
>     | --- | --- |
>     | `Perf` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_defconfig</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons.config</span></code></p></li><br></ul> |
>     | `Debug` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_defconfig</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_debug.config</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons.config</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons_debug.config</span></code></p></li><br></ul> |
> 
> 
> 
>     To build the debug kernel image with `linux-qcom-custom_6.6.bb`,
> set DEBUG\_BUILD to 1 in the shell where you are using BitBake comamnds to build the image.
> 
> 
>     This selection is effective in the following code:
> 
> 
> KERNEL_CONFIG ??= "qcom_defconfig"
>         
>         KERNEL_CONFIG_FRAGMENTS:append = " ${S}/arch/arm64/configs/qcom_addons.config"
>         KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_debug.config', '', d)}"
>         KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_addons_debug.config', '', d)}"
>         
>         # Enable selinux support
>         SELINUX_CFG = "${@oe.utils.vartrue('DEBUG_BUILD', 'selinux_debug.cfg', 'selinux.cfg', d)}"
>         KERNEL_CONFIG_FRAGMENTS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', '${WORKDIR}/${SELINUX_CFG}', '', d)}"
>         Copy to clipboard
> 
> 
>     To autoload kernel modules for Qualcomm platforms, update the
> KERNEL\_MODULE\_AUTOLOAD variable in the Qualcomm Linux kernel recipe.
> For example, the CoreSight and STM modules are autoloaded as follows:
> 
> 
> KERNEL_MODULE_AUTOLOAD += "coresight coresight-tmc coresight-funnel"
>         KERNEL_MODULE_AUTOLOAD += "coresight-replicator coresight-etm4x coresight-stm"
>         KERNEL_MODULE_AUTOLOAD += "coresight-cti coresight-tpdm coresight-tpda coresight-dummy"
>         KERNEL_MODULE_AUTOLOAD += "coresight-remote-etm coresight-tgu"
>         KERNEL_MODULE_AUTOLOAD += "stm_core stm_p_ost stm_console stm_heartbeat stm_ftrace "
>         Copy to clipboard
> - **Licenses**
> 
> 
>     The licenses for recipes in `meta-qcom-hwe` are listed at
> `<workspace>/meta-qcom-hwe/files/common-licenses`.
> 
> 
> common-licenses/
>         ├── BSD-3-Clause-Clear
>         ├── GPLv2.0-with-linux-syscall-note
>         └── Qualcomm-Technologies-Inc.-Proprietary
>         Copy to clipboard
> 
> 
>     Yocto can automatically create SPDX SBOM documents based on image creation.
> To enable this feature, inherit the `create-spdx` class in `local.conf` as follows:
> 
> 
> INHERIT += "create-spdx"
>         Copy to clipboard
> 
> 
>     After the class is inherited, you can rebuild the image with
> the BitBake command:
> 
> 
> bitbake qcom-multimedia-image
>         Copy to clipboard
> 
> 
>     The SPDX output can be found in the following directories:
> 
>     - For each recipe, the generated files are available in
> the `tmp/deploy/spdx/<machine>` directory.
>     - The top-level SPDX output file is in the `tmp/deploy/images/MACHINE/<image-recipe>-<MACHINE>.spdx.json` directory.

### meta-qcom-distro

This layer provides a reference distribution configuration for Qualcomm
Linux. Image recipes and package groups are defined in this layer.

- **BitBake classes**

    The following table provides an introduction to the BitBake classes,
which are available at [Classes](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/classes).

    Qualcomm Linux supports both SSH and UART serial shell for device access.
You can choose either SSH or UART to access the device. You can also use
ADB to debug issues when IP interfaces are down or to transfer large files.

    | `image-adbd.bbclass` | The `image-adbd.bbclass` class in `meta-qcom-distro` installs adbd<br>in the image. The adbd daemon remains disabled unless<br>`IMAGE_FEATURES` contains the `enable-adbd` feature.<br>You can disable adbd by manually removing `/etc/usb-debugging-enabled`<br>from `rootfs`. |
    | --- | --- |
    | `image-qcom-deploy.bbclass` | Deploys the image files available in<br>`<workspace>/build-<distro>/tmp-glibc/deploy/images/<machine>/<image-name>`.<br>The generated images are deployed in the `<image-name>` subdirectory. |
- **Distro configuration**

    The following table provides an introduction to the distro configurations,
which are available on
[GitHub](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/conf/distro).

    | `conf/distro/qcom-wayland.conf` | This distro configuration file defines the `qcom-wayland` distro.<br>You can use the `qcom-wayland` distro in the following example command.<br><br><br><br>> <br>> <br>> MACHINE=qcs6490-rb3gen2-core-kit DISTRO=qcom-wayland QCOM_SELECTED_BSP=base source setup-environment<br>>         Copy to clipboard<br><br><br><br>The `meta-qcom-distro/conf/distro/include/qcom-base.inc` configuration<br>defines common DISTRO\_FEATURES. The `meta-qcom-distro/conf/distro/qcom-wayland.conf` configuration<br>adds the following features:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">wayland</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">vulkan</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">opengl</span></code></p></li><br>> </ul><br><br><br><br>The Yocto Project documentation defines these distro features at<br>[Distro features](https://docs.yoctoproject.org/4.0.22/singleindex.html#distro-features). |
    | --- | --- |
    | `conf/distro/include/qcom-base.inc` | The INIT\_MANAGER is set to `systemd`.<br>For Yocto Project documentation on INIT\_MANAGER,<br>see [INIT_MANAGER](https://docs.yoctoproject.org/4.0.22/singleindex.html#term-INIT_MANAGER).<br>Other DISTRO\_FEATURES enabled are:<br><br><br>DISTRO_FEATURES:append = ” pam overlayfs acl xattr selinux ptest security virtualization tpm usrmerge sota”<br>        Copy to clipboard<br><br><br>To understand the purpose of these DISTRO\_FEATURES, see<br>[Distro features](https://docs.yoctoproject.org/4.0.22/singleindex.html#distro-features).<br><br><br>This file selects `systemd` as INIT\_MANAGER and `udev` as the DEV\_MANAGER. |
    | `conf/distro/include/qcom-security_flags.inc` | This file includes the security flags as defined in<br>[security flags](https://git.yoctoproject.org/poky/tree/meta/conf/distro/include/security_flags.inc?h=kirkstone). |
- **Package groups**

    Package groups are defined in `meta-qcom-hwe` and `meta-qcom-distro`.
These package groups help you understand the features
defined by the Qualcomm BSP.

    | `packagegroup-qcom.bb` | Package group that contains all the basic packages. |
    | --- | --- |
    | `packagegroup-qcom-multimedia.bb` | Package group that contains packages to enable multimedia support:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-container</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-audio</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-camera</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-display</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-fastcv</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-graphics</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-k8s</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-opencv</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-video</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">python3-docker-compose</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-iot-base-utils</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-location</span></code></p></li><br>> </ul><br>> <br>> Note<br>> <br>> <br>> The `packagegroup-qcom-location` is defined in `meta-qcom-extras` metadata layer. |
    | `packagegroup-qcom-test-pkgs.bb` | Package group that contains test packages. |
- **Image recipes**

    The `meta-qcom-distro` Qualcomm Linux metadata layer defines image
recipes, which are available on
[GitHub](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/recipes-products/images).
The following table lists various images, their `IMAGE_FEATURES`, and
the functions that the images serve:

    | Image recipe | Description of the image |
    | --- | --- |
    | `qcom-minimal-image.bb` | Defines a small `rootfs` to boot to the shell.<br><br><br>The `IMAGE_FEATURES` enabled are as follows:<br><br><br>IMAGE_FEATURES += "splash tools-debug allow-root-login post-install-logging enable-adbd"<br>        Copy to clipboard<br><br><br>For more information on `IMAGE_FEATURES`, see<br>[Image features](https://docs.yoctoproject.org/4.0.22/singleindex.html#image-features). |
    | `qcom-console-image.bb` | Extends `qcom-minimal-image` by adding more packages<br>and enabling more `IMAGE_FEATURES`:<br><br><br>IMAGE_FEATURES += “package-management ssh-server-openssh”<br>        Copy to clipboard |
    | `qcom-multimedia-image.bb` | Requires `DISTRO_FEATURE` wayland and it includes<br>all the multimedia packages in `rootfs`. |
    | `qcom-multimedia-test-image.bb` | Includes test packages in `rootfs` to test `qcom-multimedia-image`. |
    | `qcom-multimedia-crossesdk-image.bb` | Generates eSDK for `qcom-multimedia-image`. |
    | `qcom-guestvm-image.bb` | A minimal kernel-based virtual machine (KVM) image with boot to shell support. |
- **QDL flashing tool**

    QDL is a flashing tool that communicates
with the USB devices to upload flash loader to the
device. The flash loader flashes the images to universal flash storage (UFS)
or embedded multimedia card (eMMC) built into the device.
For more information on `QDL flashing`, see
[QDL](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/flash_images.html).

### Build Qualcomm Linux

The `meta-qcom`, `meta-qcom-hwe`, and `meta-qcom-distro` sections described the
machine configurations, distro configurations, image recipes, and OVERRIDES.

The [table](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#qcom-selected-bsp) lists the supported values that can be set for `MACHINE`, `DISTRO`, and `QCOM_SELECTED_BSP`.
To setup the environment, use these values and run the following command:

MACHINE=<machine configuration name> DISTRO=<Distro name> QCOM_SELECTED_BSP=<variant name> source setup-environment
    Copy to clipboard

The following table lists the possible image recipes to select and generate an image as per the selected
`MACHINE`, `DISTRO`, and `QCOM_SELECTED_BSP`, run the following command:

bitbake <image recipe name>
    Copy to clipboard

| `QCOM_SELECTED_BSP`<br><br>(selected by you) | Effective BitBake OVERRIDE<br><br>(derived from `QCOM_SELECTED_BSP`) | MACHINE configuration<br><br>(selected by you) | Reference DISTRO configuration<br><br>(selected by you) | Image recipe<br><br>(selected by you) |
| --- | --- | --- | --- | --- |
| `custom` | `qcom-custom-bsp` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-core-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-vision-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-industrial-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-idp.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs8300-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs9100-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs9075-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs8300-ride-sx.conf</span></code></p></li><br></ul> | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-wayland</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-robotics-ros2-humble</span></code></p></li><br></ul> | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-minimal-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-console-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-multimedia-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-multimedia-test-image</span></code></p></li><br></ul> |
| `base` | `qcom-base-bsp` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-core-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-vision-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-industrial-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-idp.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs8300-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs9100-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs9075-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs8300-ride-sx.conf</span></code></p></li><br></ul> | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-wayland</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-robotics-ros2-humble</span></code></p></li><br></ul> | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-minimal-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-console-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-multimedia-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-multimedia-test-image</span></code></p></li><br></ul> |
|  |  |  |  |  |

To learn more about the supported combinations for building Qualcomm Linux, see
[Qualcomm Linux Release Notes](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-241225194606).

For detailed build instructions, see
[GitHub workflow for unregistered users](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/github_workflow_unregistered_users.html).

### meta-qcom-realtime

The `meta-qcom-realtime` metadata layer is available on
[GitHub](https://github.com/quic-yocto/meta-qcom-realtime). This layer provides
additional software support for building a real-time kernel for Qualcomm devices.

- **Kernel recipes**

    Qualcomm Linux supports the LTS Linux kernel v6.6.x and real-time extensions.
It is maintained through the `linux-qcom-custom-rt_6.6.bb` and `linux-qcom-base-rt_6.6.bb` Yocto recipes
at `recipes-kernel/linux` under the `meta-qcom-realtime` layer.
The pending pre-empt RT patches can be found at [realtime](https://wiki.linuxfoundation.org/realtime/start).
These patches are fetched and applied on top of the `linux-qcom-custom-rt_6.6.bb`,
which is publicly hosted at [Codelinaro](https://git.codelinaro.org/clo/la/kernel/qcom.git).

    To compile a real-time kernel for Qualcomm devices:

> 
> 
> - If you chose the `custom` OVERRIDE, `conf/layer.conf` selects `linux-qcom-custom-rt`.
>     - If you chose the `base` OVERRIDE, `conf/layer.conf` selects `linux-qcom-base-rt`.

    **Kernel configuration**

    Both recipes append the `qcom_rt.cfg` fragment as follows:

KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom_rt.cfg"
        Copy to clipboard
- **Enable** `meta-qcom-realtime` **in build**

    To include `meta-qcom-realtime` in the build, export the
`meta-qcom-realtime` layer to EXTRALAYERS in `bblayers.conf`, as
described in the following steps:

    1. Source the environment.

        The following is an example to source the environment for a QCS6490-based machine and the `qcom-wayland` distro:

MACHINE=qcs6490-rb3gen2-core-kit DISTRO=qcom-wayland source setup-environment
            Copy to clipboard
    2. Open the `build-qcom-wayland/conf/bblayers.conf` file and update
the EXTRALAYERS variable as follows.

EXTRALAYERS ?= " \
              ${WORKSPACE}/layers/meta-qcom-realtime \
             "
            Copy to clipboard
    3. Run the build command to rebuild with `meta-qcom-realtime` as
follows:

bitbake qcom-multimedia-image
            Copy to clipboard

### meta-qcom-extras

This layer is an optional metadata layer for registered users. This
layer enables source compilation of select components, which are
otherwise present as binaries in `meta-qcom-hwe`. If you are entitled to
receive this metadata layer, you can use the steps shared in the
[Qualcomm Linux Build
Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/build_addn_info.html).

- **Firmware recipes**

    The `meta-qcom-extras` layer provides recipe append files for the
firmware recipes defined in `meta-qcom-hwe` layer at `meta-qcom-hwe/recipes-firmware/firmware`.
These recipe append files, with extension `.bbapend` are shown in the following code snippet.
The firmware recipe append files have the `SRC_URI` set to zip files that you may want to use
instead of the default zip files distributed with this Qualcomm Linux release.

    Follow the [Qualcomm Linux Build Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/build_addn_info.html)
to build cDSP, aDSP, Boot firmware, and generate the zip file that you can integrate using the provided recipe append files.

    | recipes-firmware<br>        └── firmware<br>           ├── firmware-qcom-bootbins_1.0.bbappend<br>           ├── firmware-qcom-dspso_1.0.bbappend<br>           ├── firmware-qcom-hlosfw_1.0.bbappend<br>           └── firmware-qcom-partconf_1.0.bbappend<br>        Copy to clipboard | The recipes in `meta-qcom-extras` override the `SRC_URI` in recipes from `meta-qcom-hwe`.<br>The `meta-qcom-hwe` layer uses pre-built firmware binaries by default, while<br>the `meta-qcom-extras` layer builds the firmware zip provided by the user.<br><br><br>The `meta-qcom-extras` layer ignores the pre-built binaries from the default<br>.zip files. These recipes instead search for user-provided .zip files set<br>in FWZIP\_PATH as follows:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">firmware-qcom-bootbins_1.0.bbappend</span></code>: Searches for the zip archive under the path defined by the variable <code class="docutils literal notranslate"><span class="pre">FWZIP_PATH</span></code>.</p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">firmware-qcom-hlosfw_1.0.bbappend</span></code>: Searches for the zip archive under the path defined by the variable <code class="docutils literal notranslate"><span class="pre">FWZIP_PATH</span></code>.</p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">firmware-qcom-dspso_1.0.bbappend</span></code>: Searches for the zip archive under the path defined by the variable <code class="docutils literal notranslate"><span class="pre">FWZIP_PATH</span></code>.</p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">firmware-qcom-partconf_1.0.bbappend</span></code>: Searches for the zip archive under the path defined by the variable <code class="docutils literal notranslate"><span class="pre">FWZIP_PATH</span></code>.</p></li><br>> </ul> |
    | --- | --- |

### meta-qcom-qim-product-sdk

- **BitBake classes**

    The following table lists the BitBake classes defined in the
`meta-qcom-qim-product-sdk` metadata layer:

    | BitBake class | Description |
    | --- | --- |
    | `qim-prod-sdk-pkg.bbclass` | <ul class="simple"><br><li><p>Provides a packaging task to pack the Qualcomm Intelligent Multimedia Product (QIMP) SDK artifacts<br>into an archive. It is invoked by the <code class="docutils literal notranslate"><span class="pre">qim-product-sdk</span></code> recipe.</p></li><br><li><p>The easy-to-install artifact archives are available in the<br><code class="docutils literal notranslate"><span class="pre">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qim_prod_sdk_artifacts</span></code><br>directory after the recipe build is complete.</p></li><br></ul> |
    | `qimsdk-pkg.bbclass` | <ul class="simple"><br><li><p>Provides a task to package the Qualcomm Multimedia SDK packages into an<br>archive along with an easy-to-use install script. The archives are<br>generated with packages to develop, deploy, and debug separately.</p></li><br><li><p>The easy-to-install artifact archives are available in the<br><code class="docutils literal notranslate"><span class="pre">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qimsdk_artifacts</span></code> directory.</p></li><br><li><p>Invoked by the <code class="docutils literal notranslate"><span class="pre">qim-sdk</span></code> recipe during the build.</p></li><br></ul> |
    | `tflitesdk-pkg.bbclass` | <ul class="simple"><br><li><p>Provides a packaging task to pack the Lite Runtime SDK artifacts into several<br>archives to develop, deploy, and debug. It is invoked by the<br><code class="docutils literal notranslate"><span class="pre">tflite-sdk</span></code> recipe during the build.</p></li><br><li><p>The easy-to-install artifact archives are available in the<br><code class="docutils literal notranslate"><span class="pre">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qim_prod_sdk_artifacts</span></code><br>directory after the recipe build is complete.</p></li><br></ul> |
- **Distro configuration**

    | `layer.conf` | Configures the project layers with the following information:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>Recipe file path information</p></li><br>> <li><p>Supported Yocto version</p></li><br>> <li><p>Supported Qualcomm<sup>®</sup> Hexagon<sup>™</sup> Processor version</p></li><br>> <li><p>Supported Qualcomm<sup>®</sup> Neural Processing SDK version</p></li><br>> <li><p>Supported Qualcomm Neural Network (QNN) SDK version</p></li><br>> </ul> |
    | --- | --- |
- **Image recipes**

    | Recipe | Description |
    | --- | --- |
    | `recipes-gst` | Consists of the upstream GStreamer recipe changes (`.bbapend`) along with Qualcomm recipes:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-good_1.20%.bbappend</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-base.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-batch.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-metamux.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mldemux.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlmeta.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlmuxer.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlqnn.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlsnpe.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mltflite.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvclassification.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvconverter.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvdetection.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvpose.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvsegmentation.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-overlay.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-qmmfsrc.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-socket.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-tools.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vcomposer.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vsplit.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vtransform.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-qcom-oss-sample-apps.bb</span></code></p></li><br>> </ul> |
    | `recipes-qcom-ml` | Consists of two recipes:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">qnn.bb</span></code>: Used to package QNN SDK</p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">snpe.bb</span></code>: Used to package Qualcomm Neural Processing SDK</p></li><br>> </ul> |
    | `recipes-qim-product-sdk` | Recipe to install QIM product SDK that has QIM, Qualcomm Neural Processing, QNN, and Lite Runtime SDKs |
    | `recipes-tensorflow-lite` | Lite Runtime recipes build and install Lite Runtime for the following versions:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>2.12.1, 2.13.1, 2.14.1, and 2.15.0</p></li><br>> <li><p>Default version: 2.15.0</p></li><br>> </ul> |
- **Package groups**

    | Package group | Description |
    | --- | --- |
    | `packagegroup-qcom-gstrecipes-gst` | Package group to enable upstream basic GStreamer along with Qualcomm plug-ins:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-base</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-tools</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-batch</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-metamux</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mldemux</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlmeta</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvconverter</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvclassification</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvdetection</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvpose</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvsegmentation</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-overlay</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-qmmfsrc</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-socket</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vcomposer</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vsplit</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vtransform</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-qcom-oss-sample-apps</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlsnpe</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlqnn</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mltflite</span></code></p></li><br>> </ul><br><br><br><br>It also packs the upstream GStreamer packages:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">cairo</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gdk-pixbuf</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">liba52</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libdaemon</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libgudev</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">lame</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libpsl</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">librsvg</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libsoup-2.4</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libtheora</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libwebp</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">mpg123</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">orc</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">sbc</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">speex</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">taglib</span></code></p></li><br>> </ul> |
    | `packagegroup-qcom-gst-basic` | Package group to enable upstream GStreamer:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-base</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-good</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-bad</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-rtsp-server</span></code></p></li><br>> </ul> |
    | `packagegroup-qcom-qim-product` | Package group to pack the following packages along with an install script:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-gst</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-ml</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">install.sh</span></code></p></li><br>> </ul> |
    | `packagegroup-qcom-ml` | Package group to pack the Qualcomm ML framework:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">tensorflow-lite</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">qnn</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">snpe</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libgomp-dev</span></code></p></li><br>> </ul> |

## Qualcomm Linux software components

This section covers key software components like initialization scripts, debugging tools,
systemd-boot, partitioning tools, and support for containers and Kubernetes.
It also describes features, such as logging and secondary virtual machines.

## System initscripts

System initscripts added to the image by `meta-qcom-hwe` are as follows:

| System initscripts | Description |
| --- | --- |
| `var-persist.mount` | Mounts the `/dev/disk/by-partlabel/persist` disk partition<br>to `/var/persist`. |
| `android-tools-adbd.service` | Provides the adbd daemon on the device. |
| `logrotate.service` | Archives old logs.<br><br><br>The `rsyslog.logrotate` configuration file is modified in Qualcomm<br>Linux to manage on-device logs. The modified `rsyslog.logrotate` file is<br>in the `meta-qcom-hwe/dynamic-layers/openembedded-layer/recipes-devtools/rsyslog/rsyslog/rsyslog.logrotate`<br>directory. This file overrides the default configuration file provided by<br>`meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate`. |
| `pd-mapper.service` | Configures and manages protection domains.<br>The `pd-mapper.service.in` file is updated to run the service as a system user instead of<br>as the root user by `pd-mapper_git.bbappend` in the Qualcomm Linux BSP layer.<br><br><br>do_install:prepend() {<br>        # convert the service from root user to system user<br>        sed -i "/ExecStart=/i\User=system\nGroup=system" pd-mapper.service.in<br>    }<br>    Copy to clipboard |
| `property-vault.service` | Provides the `property_get` and `property_set` functionalities.<br>For more information on this service,<br>see [Properties](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#properties-section). |
| `persist-property-vault.service` | Runs `set-persist-prop.sh`, which sets the<br>`le.persistprop.enable` flag to true. This property enables use<br>of persist properties, which are stored in filesystem and persist<br>across reboots. |
| `resize-partition@.service` | Resizes the file system at bootup time according to<br>the size of the partition.<br><br><br>ExecStart=/bin/sh -c "/sbin/e2fsck -n /dev/disk/by-partlabel/%i; if [ $? -gt 1 ]; then /sbin/mkfs.ext4 /dev/disk/by-partlabel/%i; fi; /sbin/resize2fs /dev/disk/by-partlabel/%i"<br>    Copy to clipboard |
| `rsyslog.service` | Redirects logs according to a specified configuration. |
| `sys-kernel-debug.mount` | The `sys-kernel-debug.mount` unit is masked when `perf` variant is built.<br>This conditional masking of this systemd unit is done in `do_install:append:qcom` task<br>of `meta-qcom-hwe/recipes-core/systemd/systemd_%.bbappend`. |

## Debug tools

The `packagegroup-core-tools-debug` defined in the `<workspace>/layers/poky/meta`
directory adds debug tools as part of `rootfs`.
This package group recipe is appended in the
`<workspace>/layers/meta-qcom-hwe/recipes-devtools` directory as
`packagegroup-core-tools-debug.bbappend`. This append file adds
`ltrace`, `perf`, `sysstat`, and `valgrind` tools to this package group.
For more information, see [Debug Linux user
space issues](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-12/using_open_source_debug_tools.html).

## systemd-boot

The systemd-boot unified extensible firmware interface (UEFI) boot manager provides options to control the boot flow and loads the user-selected boot loader.
The configuration files, kernel images, initrd images, and other EFI images must reside on the EFI partition.

To execute the Linux kernel directly as EFI images, build them with `CONFIG_EFI_STUB`. The systemd-boot supports two configurations:

> 
> 
> - Type1:
> 
> 
>     The Type1 configuration uses boot loader specification (BLS) description files. You can find these files in the `/loader/entries/` directory on the EFI.
> - Type2:
> 
> 
>     The Type2 configuration uses unified kernel images (UKI). These images combine the kernel, initrd, and kernel command-line into a single EFI executable.
> Type2 offers better security because the UKI contains all the necessary information for the device to boot. Signing a UKI image secures all included entities.
> If UEFI secure boot is enabled, the system only loads signed images, making signing a requirement.

For more details, see [systemd-boot](https://www.freedesktop.org/software/systemd/man/latest/systemd-boot.html).

Note

Signing is required if a secure boot enabled device is used.

- **UKI**

    UKI is a combination of a UEFI boot stub program, a Linux kernel
image, an initrd, and other resources in a single UEFI portable
executable (PE) file. The UEFI boot stub looks for various resources
for the kernel invocation inside the UEFI PE binary. This allows
combining various resources inside a single UKI image,
which may then be signed using sbsign.
Qualcomm Linux uses sbsign to sign PE files, while OpenSSL is used for non-PE files like DTB.

    For more details on UKI, see
[unified_kernel_image](https://uapi-group.org/specifications/specs/unified_kernel_image/).
The `uki.efi` content is shown in the following table:

    | Components of uki.efi file | Contents |
    | --- | --- |
    | Initrd = Init ramdisk | `initramfs-ostree-image-qcs6490-rb3gen2-vision-kit.cpio.gz` |
    | Linux = Kernel Image | `Image` (as systemd-boot expects uncompressed kernel) |
    | Uname = Kernel Release | `6.6.52` |
    | Efi-arch = Architecture | `aa64` |
    | Stub = System-boot efi stub | `linuxx64.efi.stub` |
    | OS-release = OS-release | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">ID</span> <span class="pre">=</span> <span class="pre">qcom-wayland</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">Name</span> <span class="pre">=</span> <span class="pre">“QCOM</span> <span class="pre">Reference</span> <span class="pre">Distro</span> <span class="pre">with</span> <span class="pre">Wayland”</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">VERSION</span> <span class="pre">=</span> <span class="pre">“1.0”</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">VERSION_ID</span> <span class="pre">=</span> <span class="pre">1.0</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">PRETTY_NAME</span> <span class="pre">=</span> <span class="pre">“QCOM</span> <span class="pre">Reference</span> <span class="pre">Distro</span> <span class="pre">with</span> <span class="pre">Wayland</span> <span class="pre">1.0”</span></code></p></li><br></ul> |

    **Image recipes**

    `meta-qcom-hwe/recipes-kernel/images` contains the following recipes:

    - `linux-qcom-uki.bb` generates `uki.efi`.
    - `esp-qcom-image.bb` generates a VFAT image, `efi.bin`, which contains `uki.efi` and `systemd-boot`.

    The `meta-qcom-distro/classes/image-qcom-deploy.bbclass` invokes the `esp-qcom-image`.

- **EFI image**

    The EFI image, `efi.bin`, is a VFAT file system image stored in the EFI partition of the flash.
This VFAT file system contains the images necessary for the UEFI to load and transfer execution control to systemd-boot.
To transfer execution control to the systemd-boot manager, UEFI mounts `efi.bin`, loads `bootaa64.efi`,
and executes it. The systemd-boot manager parses the `loader.conf` and loads the kernel image, and transfers the control to it.

    For more information on the structure of EFI, see [EFI system
partition](https://wiki.archlinux.org/title/EFI_system_partition).

    Following is the sample structure of `efi.bin` from Qualcomm Linux.
It contains systemd-boot `bootaa64.efi` and Linux Kernel `vmlinuz-<version>`
under `/ostree/poky-<sha256-sum>` directory.

> 
> 
> ![../../_images/efi-bin-ostree.png](data:image/png;base64,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)
> 
> **efi.bin file generated with OSTree support**
- **Signing**

    Secure boot is a feature in the UEFI standard, but it is not enabled by default in Qualcomm Linux.
When enabled, secure boot adds a layer of protection to the preboot process by maintaining a cryptographically
signed list of binaries that are run at device boot-up if successfully authenticated. This ensures that the device’s
boot firmware and Linux OS boot components, such as the boot manager, kernel, and initramfs, have not been tampered with.

    UEFI secure boot uses a digital signature to validate the
authenticity and integrity of the binary code that it loads. All the keys
are stored in UEFI secure variables. UEFI secure boot is achieved by
using the platform key (PK), key exchange key (KEK), database (DB),
and forbidden signatures database (DBX).

    To use secure boot, the keys PK, KEK, and DB are required. While
multiple KEK, DB, and DBX are allowed, only one PK is allowed.

    UEFI secure boot is enabled only when the PK is registered in the system.
It is advised to provision PK at the last step of the secure boot
enabling process. For more information on how Qualcomm has implemented
the UEFI secure boot feature, see [Secure
boot](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-11/secure-boot.html).

    **Host tool signing\_tool.py to sign Linux OS images generated by Qualcomm Linux builds**

    When UEFI secure boot is enabled, the EFI and DTB images must be
signed. To streamline this process, a host signing tool `signing_tool.py` is used.
This command-line Python script runs on a Linux host machine (Ubuntu 20.04 or later versions).
It automates the signing of EFI and DTB images in two separate operations.
The tool also supports the feature to combines the DTB files.

    The host signing tool is available for download on [GitHub](https://github.com/quic/host-signing-tool).

    **Host signing tool overview**

    The host signing tool runs on a Linux machine with Python3 installed.
It can sign either the EFI image or the DTB image in a single
operation. To sign both the EFI and DTB images, you must invoke
the tool twice with different inputs.

![../../_images/host_tool_design_wbg.png](data:image/png;base64,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)

    **Linux machine with OpenSSL and sbsign**

    The host tool expects unsigned EFI or DTB files, along with
certificates and keys, as input. After invoking, the tool unpacks the
unsigned image, signs the available items using the provided key and
certificate, and then repacks the images, replacing the unsigned
version with the signed one.

    To combine DTB files, you must follow a different process
than the signing process. Use the tool to either combine a new DTB file
with a pre-existing `dtb.bin` or create a new concatenated `dtb.bin`
file  from a list of available DTB files.

    **Working of host signing tool**

    - **Prerequisites to run the tool**

        To run this tool, install the following on the Linux host machine:

        - OpenSSL, sbsign, and mtools utilities
        - Python3
        - pip, subprocess, shlex, socket, glob, and shutil Python modules
    - **Host signing tool configuration**

        You must configure the host signing tool before starting the
operation.

        - `config.ini` **file**

            The host tool requires the necessary information to be provided in
a `config.ini` configuration file. The tool reads this file and
signs the image accordingly. The following code snippet shows the variables in the configuration file:

[common]
                # Section - 1: Common Selection
                # Select operation: 1. sign_image or 2. combine_dtb
                operation = sign_image
                # This option is useful for both operations(sign_image & combine_dtb). Possible values for file_path are 1. remote or 2. local
                file_path = local
                # This option is required for both operations(sign_image & combine_dtb) if file_path == remote
                local_machine_private_key_path = /usr2/<user_name_for_machine>/.ssh/id_rsa
                
                # Section - 2: operation == sign_image related common selection
                # Possible values for image_type are 1. efi or 2. dtb
                image_type = efi
                # This option is required if operation == sign_image & image_type == efi
                loader_conf_timeout = 20
                
                # Section - 3: operation == combine_dtb related common selection
                # Possible values for combine_dtb_type are 1. combine_with_old_dtb, 2. combine_without_old_dtb
                combine_dtb_type = combine_with_old_dtb
                
                # Below options are required to fetch file from remote linux machine in the same network(i.e. if file_path == remote)
                
                # This option is useful if operation == sign_image & image_type == efi
                [efi_config]
                efi_remote_hostname = <remotemachine_ip_or_hostname_where_efi.bin_available>
                efi_remote_username = <username_on_remote_machine_where_efi.bin_available>
                efi_remote_filepath = <full_path_of_efi.bin_file_on_remotemachine>
                
                # This option is useful if operation == sign_image. Both image_type requires this option
                [keys_config]
                keys_remote_hostname = <remotemachine_ip_or_hostname_where_keys_available>
                keys_remote_username = <username_on_remote_machine_where_keys_available>
                keys_remote_filepath = <full_path_of_keys_directory_on_remotemachine>
                
                # This option is useful if operation == sign_image & image_type == dtb
                [dtb_config]
                dtb_remote_hostname = <remotemachine_ip_or_hostname_where_dtb_available>
                dtb_remote_username = <username_on_remote_machine_where_dtb_available>
                dtb_remote_filepath = <full_path_of_dtb_on_remotemachine>
                
                # This option is useful if operation == combine_dtb.
                [combine_dtb_config]
                combine_dtb_remote_hostname = <remotemachine_ip_or_hostname_where_combined-dtb.dtb_available>
                combine_dtb_remote_username = <username_on_remote_machine_where_combined-dtb.dtb_available>
                combine_dtb_remote_filepath = <full_path_of_combined-dtb.dtb_on_remotemachine>
                Copy to clipboard

Variables in config.ini file

            | Variable in config.ini | Values | Description |
            | --- | --- | --- |
            | `operation` | `sign_image/combine_dtb` | Use this configuration to select either signing the image or combining DTB files. |
            | `image_type` | `efi/dtb` | If `operation == sign_image`, use this configuration to select `efi` or `dtb` to sign separately. |
            | `combine_dtb_type` | `combine_with_old_dtb/combine_without_old_dtb` | If `operation == combine_dtb`, use this configuration to select the type of combine DTB operation you want to perform.<br><ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">combine_with_old_dtb</span></code>: combine with DTB from old <code class="docutils literal notranslate"><span class="pre">dtb.bin</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">combine_without_old_dtb</span></code>: combine a set of DTB files</p></li><br></ul> |
            | `file_path` | `local/remote` | <ul class="simple"><br><li><p>local: Keys and efi.bin/dtb.bin are present in the same path as the script.</p></li><br><li><p>remote: Copy efi.bin/dtb.bin and the keys from a remote Linux machine to the current path.</p></li><br></ul> |
            | `local_machine_private_key_path` | `<path of id_rsa file in local machine>` | This file establishes an SSH connection with a remote machine if `file_path = remote`. |
            | `loader_conf_timeout` | `<timeout in seconds>` | The systemd-boot wait time to let you choose to authenticate the binaries.<br>This option is required to sign `efi.bin`. |
            | `efi/keys/dtb/combine-dtb_remote_hostname` | `<ip or hostname of the remote Linux machine>` | If `file_path = remote`, then the host tool selects the host name of<br>the remote machine to copy the `efi/keys/dtb/combine-dtb` file from the remote machine using SCP. |
            | `efi/keys/dtb/combine-dtb_remote_username` | `<username_on_remote_machine>` | If `file_path = remote`, then the host tool selects the user<br>name of the remote machine to copy the `efi/keys/dtb/combine-dtb` file from<br>the remote machine using SCP, provided the username is created<br>on the remote machine. |
            | `efi/keys/dtb/combine-dtb_remote_filepath` | `<full_path_of_file_on_remote_machine>` | If `file_path = remote`, then the host tool selects the path of<br>a `efi/key/dtb/combine-dtb` file on the remote machine to copy that file from<br>the remote machine using SCP. |
        - **Configure using config.ini file**

            1. Operation selection: Specify which operation must be performed by setting the `operation` variable. The options are either `sign_image` or `combine_dtb`.
            2. Image selection: If you select `operation == sign_image`, specify which image to sign by setting the `image_type` variable. The options are either `efi` or `dtb`.
            3. File location: Indicate the location of the unsigned EFI/DTB image, keys, and certificates using the `file_path` variable.

                If you select `local` in the configuration file, copy the EFI/DTB image, keys, and certificate files manually to the local working directory.

                1. Create an `unsigned_binaries` directory in the same path as the script, and then copy the `efi.bin`/ `dtb.bin` image into that directory.
                2. Create a `keys` directory in the same path as the script and then copy the `db.auth`, `db.crt`, `db.key`, `KEK.auth`, and `PK.auth` files into that directory.

                If you want the script to copy the required files automatically from a remote Linux machine on the same network, select `remote` in the configuration file.

                In the configuration file, provide information for the following variables:

> 
> 
> - `local_machine_private_key_path` (mandatory)
>                 - `[efi_config]` section (if `operation` is `sign_image` and if `image_type` is `efi`)
>                 - `[keys_config]` section (if `operation` is `sign_image`)
>                 - `[dtb_config]` section (if `operation` is `sign_image` and if `image_type` is `dtb`)
>                 - `[combine_dtb_config]` section (if `operation` is `combine_dtb`)
> 
> 
> 
> Note
> 
> 
> The script supports copying from another Linux machine over SCP within the same network.
            4. Loader configuration timeout: If `image_type` is set to `efi` in the configuration file, update the `loader_conf_timeout` variable.
            5. Combining DTB selection: If you select `operation == combine_dtb`, specify which type of DTB combination operation must be done by setting the `combine_dtb_type` variable. The options are either `combine_with_old_dtb` or `combine_without_old_dtb`.

                1. If you select `combine_dtb_type == combine_with_old_dtb`, create an `unsigned_binaries` directory in the same path as the script and copy the `dtb.bin` image to that directory.
                2. For both options, create a `dtb_files` directory in the same path as the script and copy all the DTB files that must be combined into that directory (either with the old combined DTB from `dtb.bin` or with each other only).
            6. Handling missing configuration: If you missed any configuration information, the script runs and prompts you for the missing details through the command line.
        - **Run host signing tool**

            1. Launch the host tool: After completing the code build process and obtaining the unsigned `efi.bin` and `dtb.bin` images, launch the host signing tool.
            2. Prepare a host machine: Store the host signing tool files (`signing_tool.py` and `config.ini`) on a Linux machine. Ensure that both the files are in the same working directory.
            3. Configure the tool: Set up the host signing tool according to the configuration instructions.
            4. Run the tool: Run the following command to launch the host tool from the command line: `$python3 signing_tool.py`
            5. Interactive process: The host signing tool displays your selections and operational commands on the screen. It also displays errors in the command line.
            6. Signed images: After the tool completes its process, it creates a directory called `signed_binaries` in the same working directory. The signed `efi.bin` or `dtb.bin` image is stored in the directory. The tool deletes other user-created directories after signing.
            7. Repeat for both images: Follow this process twice, once for `efi.bin` and once for `dtb.bin`. After each signing operation, delete the `signed_binaries` directory before starting a new operation.
    - **Host signing tool workflow**

> 
> 
> The following figure shows the workflow of the host signing tool:
> 
> ![../../_images/host_tool_workflow.png](data:image/png;base64,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)
> 
> **Host signing tool workflow**
> 
>         - The host tool requires the `efi.bin` and `dtb.bin` paths (absolute path or network path).
> 
>             - `efi.bin` with OSTree support contains `vmlinuz-x.y.z` (Linux kernel image) and `bootaa64.efi` (boot loader image).
>             - `dtb.bin` contains `combined-dtb.dtb`.
>         - The host tool requires the path of `certificate` and `key` (absolute path or network path) to sign the images.
>         - The host tool mounts `efi.bin`/`dtb.bin` on the FAT partition, which provides the following directory structure and follows its separate signing process:
> 
> 
> 
> > 
> > 
> > ![../../_images/1_efi_bin.png](data:image/png;base64,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)
> > ![../../_images/efi-bin-ostree.png](data:image/png;base64,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)
> > 
> > **efi.bin with OSTree support**
> > ![../../_images/1_dtb_bin.png](data:image/png;base64,UklGRkAEAABXRUJQVlA4TDMEAAAvVkEoAAXdbNvq6NFbwlcCJRA6dEgJCh0qdKhwQ0qgBEpQSAmEG1ICHXBdv/gOGs942ONE9B+2JLlxm4Ffbu8C1AE5wQeMj7FRljH+1MAyxo9lxv2xgPHTxPexgNE+/vM/E0RQW1ICUJaUA9SW9eGP/3z85+M/f1WIiP88QEgyfQvloVSg3hBkMHiTDZvF028caOYKEB5KAcrDBOF2FgOCxdP7oBHSc5FAD4eQ3gZqPBcReDhA/KeHshNoKzPnRoA/2gyh9uhAe/uStwH+lIgO4GoJSZSJjZ8E9OgheRpMlIhN0IY5gmJQT9YGuDhTwaLM9J2uVL06GXPk6QyNiaDMXCaadfQ4C4qMwzO1fJEymW6WWSeqg6yuMRm7iCZIQzOoZncK7w1IqaqvTQF8HT2CvtiBo42eCagzQOx9Bwi+jOqBLuhpo3igMiSZIxPctPbdtFnVjZUvAGlcqmQUQcod3aCarDbaBpjugPLsvb80ntku/soFE12B/YKvTgf4Picrcz1cn0Zm5bg2/cQzGrANyVXzMoogBd2gUn+aHCUbVJmk/Mo0iKe6O9AFBTMHM4M+lLodPK/OJIfttD1PwbwJHlz8KaMIUtANSnRBjjchHHf2J+MhMbkXUmvqlRJQ5yxxhkYUXNrkzEAM2VWRUQQp2AzqwoOESdKLIq9/YWGJCfv1NBFvIbHD42+EJwmJ8bRUadGM8XbJQBHw8p326xkyd+68Kar8kg0kKHDjFuKhyt/BwcvsXPz5hVWQgm5QKUe8/5IOHC/9Y49jZ1/VTZtM4kWOd0Hmp2R3OOSySa4qXdwTlKYDjW7QlKwdDMKhflAEykuTgHC1IYRp0SHObYjrt0Hs4yRQv0MjUGxj1OTSXATKo6ttiE1QAfbRTpPBAM8WwNau/oYTriKejbchoycgvPhPk7vY2FbPRLg67iF0pjiHGbbsedcsyiDljlHQZD8YDUJO1nYwTrFpzphdtFf/xTcHgPY5jz2FK5GpD+WqdAKp13LafB2lqnIS11GlSzwIzNRo7NqLQ+X5tQq6TLmoGFS/I3vA55GxjfnmgXBtkXDT1uOOvqx/n/Dxn78y0PcFjG8WFjGWllWNj/98amHDppFAj5vVtzQEBI0IGAGiTAHCClGB+mAaIa0QBSiPQI1/ZLkx+U4Y8QIw6qSpM+7N6qsg9q/g/X1jnXxnIjNNnXFrVl8BMs0q3/jNOPnOdAf+HD0CG0ef1acAypPK/X3vym2T7yzwBb8BjWGe1SePcQlw7xvj5DsTnW9Imd3RZ/UpnPwIuwj3y523Gc45zGO6ZL3lX4Q0IN5/yQmcDH1W32pwa/JdBU71gwKoM/RZfYuCcfLdVcSeeRtSRttZ2SKo6bP6FgXj5LtDapoD0+TZTh9Fn9W3KFgn30UHuiQk7OO8NKXB6kzNPKtPvuxeQeP/7WIAAA==)
>         - After signing the images, the host tool copies the *Auth* files to the `/loader/keys/authkeys` directory for both `efi.bin` and `dtb.bin`.
>         - The host tool must configure the wait time in the `systemd-boot` loader configuration. This wait time stops the Kernel loading and allows you to review and select the `systemd-boot` menu options. The `loader.conf` file must be available in an updated `efi.bin` file.
> 
> 
> 
> > 
> > 
> > Note
> > 
> > 
> > The signing process is not followed for the `dtb.bin` file.
> 
> 
>             - The host tool configures `/loader/loader.conf`.
>             - The syntax for `loader.conf` is `timeout x`, where x = timeout in seconds.
>         - After the image is signed, the host tool must unmount the `efi.bin/dtb.bin` from the FAT partition. Store the signed `efi.bin/dtb.bin` on the host machine on the similar path as the host tool in the `signed_binaries` directory.
>         - Following is the directory structure for signed `efi.bin` and `dtb.bin`:
> 
> ![../../_images/efi-bin_and_dtb-bin.png](data:image/png;base64,UklGRs4zAABXRUJQVlA4IMIzAADQcwGdASpqA0MCPwF8tFWrJ6qjInGbSWAgCWlu/CPcEWyJk+Tov7Th//hQ+X3/b/7bJugHqNfwDp//X/yIjyV/hf776//jv7H/nv7540/j31L++/wH7te+F+AY//R/6jzQ/mn4E/pf3j/J+pH7ReNvyp/3vUL9weDzsr9w8wX3Oxy/n//P6N/oH+e9gThCaB/kq/7Hmi/QSAjylsSohR5S2F1fZi332egVhMTY0Pk0+AxV0GTbKkBGWYqaHyafAYq6+AxV0HsuAHQgCwg246zKwmJsaHyae/yBCD4UdvwKaF82K4DLng0ML4dV1jcbruJFpR2W/txf4CYmxofJp8BirrytXb62KDzPKYCzZ45NqyqLvPZrTdZBsSoeE8DE26Dn9Bq0W+7SK+nYYKbd6i6M9SGQcmzCABXpaVGaqP3R7bLuGabuiOPaLHyHfmE2jYgLpP6ZqHJtovnwsA+uhJDOC3Vi2e5MWaemeBbHy1FsE4NiU8XQBqIUQxe/740DCJmXnbtkNPBvu0ivp3qf5FGBQRySjv4ZDVvG4jMLl0SLo5p/FiDISOptpCG5u15h2obBfFV2AZjqqHlcCay3lVvdoRSFg4xW9kSx0vaFDbVVPMrwST1+lbmkbBVBRbq6HaakTgXbXYCNI7WBtDbclAnmHF9ld09HOqVHGd5TSvyCxpKjMn2nzptpSlW4UTXQdJTGjnGcZEGxKeLuWlnPaBC5yVh4Wka6iJfNbsmOxtEguGkeOIQiLy6CclpNouTWjuVQPZM5YbuCayUUBRRec5QnuPKWxKiFHecqLDm+l/1j9iPLo44Ei2TRxbyGw0w+/coHMbTyHbaw/kRkT3uHZfqeqa2M7qBKcdA+ZMjIu5UGOEiQdsGEZhX18MgsQiH1lfILDNUsYieiAkvPKXYLExjJD2fwEFHjOpxWyFFRgS5uMC9ZvF20bMBttXaIT15LaC4T3C94gQfpl6+VhygXld4sTXy/Rz5UomWynmB8TThxpXq/NmTYGWfFTCV+o7v3QtyaE0sOjHtntgiK8p4SS8CgUuHRaGVdyNzqu+T5Hn06XcTGo51gbNrpScKqU/BsSoeFA9zm7FIZkY3zmjnYUmMb1iatWm4YNfsq2fpZdF0DWJtkooFtdeLL8YqNygQX2Qwm29Inr1+8007Y7ZHt0wD5XlFvHw2AK7uaxnbg2Zh7RFiDPDpX3CGIGF3aHbSvyEXtIvmGXbFtgmXQeqMc5bjHXuZKKNxcXpVPKynQagsvaQa2TJEI7YNvO7w5yFJaF3aR5NbV3R/ZJ4GD4c9fNcQm5NDGI6ZsSohHbBNBLJoNZwjrKZjfbco4WtdAe6nau2LG9kDYZjNUd4UQSwnlY5e9zvMW2kW+7SK+nYRd/3RDaHLKUnQn7+Er0OR+/4Sj9qREHlPQu7SK+g0JVYR8LXOuAm3tmhw2EfUCvm7E/TnYUDWjY8Z4G5ouooc4uRPQYXdodsG3c8KGLC+A0BZHov3YWesT7AJTBR5S1PWijX0uV3EiGvjzlUJMsdfKC6YeT0GUzVtQMLuuJ4GESLJ9JUmDO2+7SK+n+KrufhpgI/78hFcDbZtZ2JVietOwiryIl4VczapgMcd6anf72ZtokeFdIhr0+hBaB4mtDSDY1vOLFzipBpxVJ4UAkHfIB1W6ZKma7ylEIbwlPF3LHC2DasLQVntQOfIX8gxKNgvuEhbh9xtA0dBrGQit7aESUCSLzTFS1Fm8ieXoeSzdEk4Lij7y+358iToiFXSHrP4IV8+2yUpH1EQ1V/jJdEvGPBBsSVgFBk+HeshNnQyadTz9UlV+skZSwojPYmF/Ov9YhV6wS5YBQGC31d0yBcTwMRCQbo/8sIvynUZo8buHvNNWdcKxKPc4WcGPrs3QxsSohR5S2JTxdAJg7RAcCdDgUvuoW+ERcZIZPhJ2I1YTVuMxtjFmR/hhf0Oxxa2mVe2PPlG4RKqb0q8pSPqIhJ+qlIsXIb5qNoRkrZB3bTD/O47LUtYfGc3U0FU+H9yKLHbd7cAWjqgaKw1+4B+2gHMvRXE8UjPt/qAcTJ/oFtDKg/wT7rReX+njgMkTMc1GZWPGL3e4o+79095C7HcFODtD60oCoXuVjMDKQow/1gWxMxxkBhUd1kaZ8k/yaNodsG7MQdPfA/bHSdN1rrvG4tHWEhhfmUF3iJ8USbc7MaXLqauYMgBeL+3vf7ksXogTj6+v5jlosDbTqxmZdrwhOv+N7FqZ5xnxEzF4/QGmvs3QxsSohR5S2JTxdAJgl8i/OsVXrXzrrlq6BS6ch+Io9ZF2GAY7HFdHdnLhodGMkkd5zWLdmEAhgb+Juu99kmtm1nVVyix5I6zvBKGXHaQ2EJ+245fe7khYKHlZjPIPcRco9ql2sX+vmGg3RzRErUWmUe34n1gwzGRmdD5yJfSrCCmjlxduLGbZ5MDWq/JkRCSbPudzl/G1Pqd5L0jcokc9T0q2AUQhamp4rEQFMJo8DECVzsv50iqKt7aESUEtR1JrSlw4chrfk58RGq1HLX6BDOyBa5S0TqRjK6AUXkFnNrNEa+POaxbvuSFOKyI3ojXp9CDdVFFRmd7uLq0uHwAn1i4JstU7TB18FDtxwx5GoTEiixdgi76tJJmJ6Qr48gv+27yOPLFqtPmb/Ub13rrzCwZji2OqnWS5rZsz7+Io4tc2z92JTxdyyUtiVEKPKWp6oUp5KZnZoCC2yTWzasDZX6VRHkjkVEKK+n+QS2o4lXpwnwaPDGnahmaCwSWUhEoCyAi55scIjK0+mNwvzVrTwnNcMhlU+Z56YNV18Birr4DFXXlLOiEJJCnO55xFGIQBDWextI8pbDMcDSJc/k5m+2a23DB8AzYuv6TjvYKHyeY/7SZTVQxvIJH1EQ18aPeOK2A48iAMg2Y2wJCK4G216nwC6CLfPAey/6lnQzAkuCXRpei33aHbSvyM8eUu0Mu0O2lfkIZx2IZrQ0buoK6Tr1xSq3NAA5TUM/PRmRRc49UFpFg6UuOUtT1rkELLRBBrvE5fYpR5YdWXsVjyRAq/pwIGgLKKI8eROJqXbx8dXyUu0QJbwbEqHhQgyDk/SPFbNWm1IJcXzOPsBgpiQhCLG2VBzI1CpzQcTQpcec4xKIHfzk1bJvfAEQryJGih+Ew5ESZMG+rhOnA951ZjDgYcjMbHmvO8SEJRgozoDGQl9uUR36TkSws4c32eMIpA8/aHbSvyEVwQbEqIUd5zeCataqn31cJsdT9hLOJYjwGKsbgIxYxqUq68zRl65Qz67aR5S2JUQo8panrXOF3NlUFINoXwqpvHHJqLYxxwVYbO0pXZGc0HrbwLp8GyooQLAZQjtBFq5GDsGUELgg2JUQo8pbEqIUeUtiVEKPKWwzHFoAglSQr0Bp3rRspH4bauKgaBhdc44eo090QWd0E2Pc3A8imWfHjU6OA9BcUYJtI8pbEqIUeUtiVEKK+o2YWPF3XfhfPMz3cAntL+IiS2BxJFzTcN0PMqhJUPnPIOvkl2i/MKyeuJ3s8eQJofvqZDF6tnwNN+qSWe5m6P1BrjNrUKg/vyEVwQbEqIUeUtiU8T1zWNaB0GGlGOQHe/5831TZcSNszu326F9AVEhoEoarG1U5Y3+SkJpXBB2oPKV8lLYlRCjylsSohR5SaGC8eqxdZqNqxt0bFjHLS2AnaQ18lLYlRCjylsSohR5S2JUQo8qM3jsDnXugKhM0F8Ba1bi4BxIoapcaY1SfshsmKbfyuj3z4oA8kOR6yUrT4yGvkpbEqIUeUtiVEKPKWxKiFHlLSPcbq3ryUCLRG1+mO/jFf7bHRpCIA1uGRENHKjmh+cJsmrok2DH4EC84WGMd/lM2rm54fZT8Zi2Deuox+5ACaGUzcEahO808X21ASJfqw0ntCYu5UJ0SBhaB1vZaBwyp/6YTuv5CK4INiVEKPKWxKiFHlLYlRCjylsUVbNeySRhdwnxCK4INiVEKPKWwgAAP7+EEbQLFjTTIZRtR92JWm/ZZRDWZCLchZxbzbkD1xjDsrR6UVaoVdbExlPux09sRG7HWxuBj0+3i4nfZ46DRDlEpbUhhbVz9cK9b28cgIvHxf15No8uNH/xpMBV+LeBK+TNa4QT2oTkwO/3CCXeXLepMPWPgfjUb+y79HdoXTEEzDGJVQY1RlOhO4EF20yooVIgdMdH4lWbMotM3AgCQk5tqkCeC3LuE4XwqfUWMFFzN6XZLDb2JUII1DqlSshJuVq9YXUYu8BljwMai66PEwIgWHWRDb4nQ5QlMsEmCEkFme6LfPDGP8eRQSdHCdx4YE7XGcNE+MKe868Oam7gCpZwt8unet//9T26wYJACmANflTZdhMK1JIr9Nt8RnyMFXyU8srrcDFQ17o2ZeUoxPn0Sszo+7HHzPG/oGmsODerI1U/6HNyVH7dFkKihpiq+UaKq4zYwqIf74BAmo2j9ArHlXG0YfTkIIlCHa6v7hVUcICDpZv2BR5oSDfDU3MzdSy36Jv81sx7WxqBT0Sau1Ifa0/NsWNV9z1H2zRhJB9m9z+BH5gtGM/HCmX72R9nbny+U80matHh4qz1nZp+xvj4NMRsYJ3NMhMvrX72Hcnyhtra7nmn+5O20Opo26tLNS0x5jvJk+dmvL1okh6XltrUZh6/TGYk2iCaucjtkyXr4dyeSSl/Vz/d73sPNO2Wjn7P6fUtde3hvsyNqya3ee/Rd2a2d+hAIKfKXbBrW6NtsQudZ9UuJrqYDl9XWPIULLjO6jRTpJlKgT00eF+TZ3TLbAerfbtvOysCw8YO7nAuAYVZeTBY4v1eFqXWeMBk+b+rq73sp7ShV3FKsbr0ldwoQQ0NsvfvQEcvoz7MDJi1dL/0euQvCYnUjej630ni9ka+asrA/UDSEtJoinc/Xlltt4QTBH0w7J5k2foriyzC44NHx6l8Hh4Ep43AGt/vWT/mBV9jZPgHkH/Y8B2SBvzVG+nhRheafjRLCjv41/kdeWfEouufh4KoMFN6SSvhSNPIjYV4xZb0TcmmWmAHwe94AvrP3fU4OkMQDOXbfR6KfQZt1cZJAbOqJGz5Zi60zk0kxOrnIDBn8XmXdgU3vQq611LcLtVZrCjSc8fmUjzuCG/tM5nBdB3mY9HeTVDNBNlXoIquffFnqWju0us60dg9hsnZhPJSnqb5BHR7gPOOP9F1iFheF5dHGO0C9PS2kDvloyUH+H868BXDPd38qXkCnku+05cDp+ZYGUdXJY806AnT6OKac1yfu4bB7jLvEetWzwmwpd1Zh3gq4wemj4OGxWTHApyksFsMP1ZcMc/ZE0k/HzqMtoy4UjZE0YQczw6jkPKZPPZjn2SWh8O55tnBjhaGTyXLlW93MVAlF6LEipY9KTPbPaXHT+ns6I1H1vaqFR4QXhUeiZffM/WzRRD7ng5/MZFxHfLWSTP7oykoYne8MhPJQGI0wlRVn/+GG9So71bDNAbJuLGdnRH6yL4dmPzm4KJeUYQjmhCA4DmM0Uev84F1WAw+Hnl8z93LflqTIsL852GlKZ0gOmLUQx2Yr8CJXygPR1+b6JFFmPuhTThqY0oV4NhfzmlVfVc3BCSmUzXenRBaVUuYHBYvyEb0w/SgO5oVK2c015Yy2K1scsjGbLetMMmFaSLiBZ0jqYPULU6EpT9jVLWNln7pvqUKpa6c/E+zb0c957ifhul6oHNnQpg6oWoabANXZRI68KAAeV3B4MdV6wc1rgK6SDJEPpiYchp0hJN0S28eATVpCoDf53Cb+KVtYTAMcA/Wlf5now28biHiUxqN7sjQWZhC9uOu0cY7AN2bbKG19aIYlCoQ0nW86FdMoxLBiowss88j3DYOQHeSTLbOJHG52TvHcMtrgaQ6LwFGuSoKbsau7R4Ls0uLkC1pxXb4YjUel3B4L73UNyIrxb6/j3phrXFpYzwFYBCSdPJg2YaT8swqKEAM19r6Nv1/QdT2WRM4oL5nHrt0W3CyQZ2kGMFeQse9MoaEdciki0kK0mWxS7tPVxgTEPJR8dqvJ11ZGPhF/ud5wyxJ0xmcDPim3yZ/ejjUT3ICS3YEBf7qNu+lVRQ0U1CScZ710GdTrC7AqYqjh6bk/bihtaYEAwz7x/Bm6zRVXBFL34e02X7jaNHnYRflnHXcKcGixaU/PteCAbxyCdwN+D/IdrvIq3gCby75dOWkycEtYtjcKGmi5kW/jIITcM9cWQspy3nrQTlxRzytBpccoMvRsZJwnrvOBJ/xzJpFHHroaRM2xy5FOkzFlQwTeZAs3vLdb1WV1X6NK+Lso5WTOR5HM3Vrxv89yjg2a2zqDmGfQvLTYOFbCFzJ8Ye4jCHODRb2+152M/NVuMCVoJw/jwwW6lp+SOtCOFWcQxNC0/NS20JIiYvOq7bMH24mYstpc8RWcvHYQQI6uJRuGaR9Z9VBF740hcLiS3ExtJ49TIMlhG09In8IS91Iz7D2lJ4MbtlF1Ju283TCBGB6xPlNRwqn8UazE2S3NvwIqb+ERj3nIk+AOzpTk3Ty2oKvmSfQvPYUKWysivLJ20f8w/EgmK6gRrbyKSZ4A1QqS0eSpp4Sc824Oepc92qjiyUBj+mVglPQogV5SNSgf98GtuXStGmTZUP5AGehC6rwwoCqwz9ADl4R0EDsj5CqtNzO19JPpsjecJBmKSd6BapYBeqYofW2to11e1d77QojTzF3JQakkFMxlq7QMmKAPpNvQLsYfJI35m/jJeTcK+WEsG1rUHDdH3tV4tSB86DRj/iIxbK3+xWmouZPzuWPXNllWEgYWP7ET51G/wbg8qFNJ08fpiZulGSDeUTOXNhHTAAvRvfBRD04KaNo/eDmHHEL7nSpmbRxDr10VwSytPdaZ2S5nqoZ5GdhTPlWE/LYraUOksX0ueRY7KkBl08HXKy/iqFBk4TCMK0lw28pcPxIWYaw3XsMR3ysT5Q9qWCpJ8p+vUn9UchpTDgpq3Pwzn29K/nAkr0QIiMkDuALJOZoBdcVztmmGy9fqpBsmw/X6QwEs5dRTqUZmeCxxUeeG+8cjIa1wWs2Bkm5mOakzyFvTVwK/6bOcTAlrZR+UMB5jNPNYWc1gcDQcBvREA0t+DyqPhlTVOLQSoOcTLh9b/7AUpXzuZ3BhH71SG6N8odBgKo3M6LAjMVR5h5udFbAn48nm2OD59oYiyxtZeLCYlkaXN4ETP4WwugbSVv8WM2qBnwXVzRZecySLc78tenUL2MbVF+ybsfwNquK4Kym5KJKwY9ENk4btnJ3aVpEb2WsV8qlO3DZgIbEYcyrUvbWLAiBYdZEEVwIOENkBzluPAD9pHw+eAmvYf9Y9wGDCFmKHg26YtzDs0sFtSDjA/74k3MpSNt9bptpVTX9Lku5tndzdcca2s8qh0bRQTnI7rnNcVnaXSSCCA4Yz3IGmhwpHAgtiwAzA4ZjeVmA0tcACwhSUVEgOR7PeGK4tXhEIEm146+uhPBmfdramkURYMKfE21dAHcXYz9MI2Q1OqkKfefV7s9zgN/PpI3qWc5DGcdrM2kEExf4YhTeyy6x0bqcHzh2XAZlK+OuUKmxkDwEHkOEeVsETKdkEeqxW1634GbZQQ/aRoSEzoRTR2ziQT8R2Et2h+N59f7CpEJ4P9itPfnI1lpE+TIjqjeuk9t4gLrIi0OlnVcUhglx7hS4LMN/79+QxLKPWHyScSqP7bxdl9B5Qlegm8UONZy2k8W5Wntx7l65ALoX5oAcbqMnpMiWcnHmQwyUcuhHWvZvw3TPNO2BAnLopUOTnHS3mh+OExt8EwpUbugIMoFEnIfT95AhR3TbHTmoZY3GJ6S/0JAwoi+QYOeNNt8ba63nVYfPWngKSPgPJtJvHaIRpPEtsE6a9Tlz6R5I+Pb1ZO8jOkVJY1Vx2PQ7B+IEXfUACdQuiapPT8eelW3N4Aq3NrZl69DJgGERozX0Mg0GujDBdHkpebvkZrCe0zhtxPSN9EN2OizU2Qnf1uIdh/iuZ+JHgPMugBt+dtgNfUT1F8wQ9wlAjz8Gw4Av4PMloY/ZXSuD1xiiJYZ0rXlxcPruCSJxhwhcXV0czZi9du5frvgahtVsMS/604UGx5Hs67Vyhdz4L9MYZkGXEAmCpOPYL+ia02S7QmBZAjEhpBN3FKfs8cOGQsmiXsINYw1nhvKxomsdDEcZC7TbeaWVZ6pqnZck1Yjy0fAmga425SLc6eo4RnDgGvwMfxjoLvCjbbT/dBqe2vGzwyLHJ8ZJv0y1BaYJbMKp6gKaGrDht4pc8mCxx1WBBRNeeUOONQw6KdEazN2f3Jy7tV3corQTEh7NfYpxxrDOL6HhioDYm0tsEFYrCHjhgyJQ2aHLGCtAHlcge6cghjASioMuY0fqWPn1QCKTjs2YgBX9BVxMpu8B840WI5U8g0oapEXcgmgtiJSxM87PIZe/MPwBWfafjLZfMVJ9vVE4nO6EC0Q5h11gdpXOsIc6HtSlorIn75MhZxv9HUxte2gUMmTXi5oPaTXDJX91+FRtr0CzADcvG4Gb2euJSp7vWP+D8KrkGdfShSbRiHaqwaiR2Vi9Y6rw3Ue0t9dnGh6HJu5BPePcjaszPxXtl29zzCOl9n44BFqqXXabMINHqejdTSIcCL5Ypjp3howWn8c4W+uEU5GFFDHji2+rGzPGt99jJQMCV83NmEUXt46HHZBR8LafqIJfzJt3hTkVyqhTTJWn6XYRLp0CDtBQT4kap5MlGjUMHY1DzKieS0QOVr7a5PAwOPPmwk47tuvap1Oi0BDFkbY3TkngfhGkt22ZgVAwqlyNhJM9CEAyICVFB07CGp1BegWsHwbfcLKW2esTGTvzEpj1Xkky2ziRxudk7x1nyYb8+txIiULN3IgZ7xLNQSuRa8Vehmdedz3Il7liynQXYgWHXNABEB5Wrjf5g70FXEzyNxQQjlHvtbUzen4VWzeCxAJpOZc89dGh7+FyO1MZDMmdASgzOyGSqnQ8BkxklmEMFVtX97yLy+6jjP2AoThiNacPB5BPE2aGreR/65B70eJpg/c8FkwCcbYPjtmAFV9xoBCQeasFOtQEpIEUlZVVnR/31ZdzoWpblTBR9PVjTedjPzVbGSYCl9YhYpDcE8W9ps5JvHCHww5Bv8NDWXfJPPdgAIMTsW2uClWupZnHVlk7tm4WmkjJRMSt8bwzjTrxveTBE7bkHh6rhmUh+VMHS2+DZOOr/4JhxZ6XowkRzQk02pQ2XVkeaOV93oNdWBWqXYAoxgbe/C92gEPa7iHc+XMpcsF/nkkw9ZW/pZ0Z6RfIDFRnJ5L1tG5Ay3avEYu77rOAW7/NgJ60SBrmZtShr7w/UzQOcEzasExwVGZtVMprnXXlrDB5F8DSxKwkDN6xNnvTG+QEhFdPR/Jv5QpKAix4qaOfJmz8mI2Md6uIWT6/skvtNycv4xduwsg+4wcLA/0hxL2/7WqsjuvTEYhOqFuXIG+cFqhUU+v/pswpFDkh1UU5a5Waws64Idp1NAcq/fmW4Qyc31ehqlSWR5DdULDohpP8aCuX5J+C8DYxt8kmsCTY1nu/VVt5C7dLvKJa4oKp3qDU+RmcDbtG7/sJEMpg4EpS54ZZ/6fAP0G9yYtg5gh6ljPVhm45nnZor6QrUpbBL5/MapQ43DPEUQHNn+o61eub4yWr4SDQvCDrjAe05eS/mig5ZXYdU3v64GGgrk5BhPMMo3BtYPcuyc1lBdoQpGV09FuPIt19TuD3KYOL3ak/UZpAAl6CA67OvdLAKGKr7hV4isRkAEpEHgrOpY2bmJQRIYW2qiATkB2MxWJWwivyOeHhEW21CkUiprOlLJXTmB7SuPru7G/s6MmTB+R9oyicKLyeL5OK29XrHm2bvg3+QqXzcozHjyLZTtB9aKevn2UMCPjHDQA6cb4iUbD4k7x9xeHKTIkTh3I9MIvb6sumi8cytTX2QhI6hgkefwB9vHCmtQuZCmw8zY0OfJEJS2SIwzXLsOYeoLSuWIqsh9Iw3QEbzzqZ1MPWPnQwiC+55YYhBMj3zFNYfHl8DQPml3HxY9ZiBJxMk7uNvPhpv61fJ9mrVdwSdFBU4TdWr5U8g2taRgAdPqJ5s1vTVCnXgs0KgZvylVRElmi+jCY3qWGrWtPcS+WwCOFtq3qHH4aVA7BUYqnDdzrrHu5eipszPFtPk3YX4eEhX8qUk1WgDxPqOb/mpXykZAJ3w63HtDGK3jYX5pqDdXnX3SPVWapVKJugKoD3gi/MaIfp+sLX4yyLqWBUQ659ivLRljZm/C8YEVu8SNJOVRmCGGajFImtB1tY+9cwJ28m7bXWUUDr1pUjWXtbVdycnF+v5C6IUVuzxcJdeRpsETL8+IN6qc2NojxAUn3G2qZ7rmHtn75AmOupapk52CLupJ+cqykMMzakSfsJRFDB7vX3jwoIAHuwpm+y+KrKVdowVY/+xiz2jSvXCGWAQZbpSoAcVpbtt95pF71NIA+vvky4Zs84y1+842z7Fgl7vNXeufoTKYkkN5rIUn627Lrll5ID+FWqHoCKDhsq3PmMRevSPufHYxdmMbYSkNVF+SH1FXTBk81MyKa5mkst+UnVSghgTG0dqsmKdMq1QvDLy8Hv0Hi271z+Oeu5H9xhO5IqMFM8ufMyTX/AMxl58HQVFun5guWg3dO54Ad7oTm52FEMLDbF1/pKZQko4ohwF+BmiwAF8ykQJi38Lcf4DN0j8MkpZNL7aOgF673tbyBnDh85S30OOo66dhDUtpVB89ZW6hbR0qi14t8KgyZuyxwdY9uY/66fzFaqH7o1rt91TMTNvvkfbjYkNy0xtYyGf0c9rrSIIO+GsSbkM/kxBAndz7A0iueXwPe31+V88DZk8u0ojkTgYf8nxpLQqFagoduMsZtmQX89qNJXT4HKCvhq38jTXsnkw22gnGss66nf6aLfb/v5fatxl7o2Yt3iAvahpIqKtGmCFUqivubNC3ZEkWhSHKzW4mCz05gpExFg6sW1qcZFaGtVMY2RbDnFgRwIi+kuWqgph3SJhojbWnK+3UDWNxIHk2kpvSFdzN/nK6OdTAfChjBY80+pkBdPgRHPfsz0GXI8cTiLXZVDVllwyNBoj9JURIR3GIxrdGHom1cIZiss+ZVykDAfvDy73IgZdSemny9L69aK2lGI312+VnzEqDAsqjBhL2Yik46aWPLKrsbI44IIpOBjw/32GrBQfj4FGy8cOPLmV8Zc/FHHDxNaX6WX3xx1oSmkIzWl9zHHanCB/yq4qrg9eOs71YuaSGA1B+1GoIUO6BWIT04He6dP2JXUk42LrgeLrr5xOSLAw6AdDWj1jUwA3b9DaC6JgDV0p3qpuOKzXVvP35NBsJgUqC8TybIF/P79B7CI0Nmga+nPakiNOikAoVT3z7EVzRSOxgiuT3HitmThH3Bz1Ui6IOPxDzvMTHqTs/sp4SApmd3vyGJ3+xCQSLTbil1RcMiP+UwQBVbEU3xwnYxnnd5t1ixtZ4o0gEUUrUelJJ8g7+RU0ceyBMytO0Sn9LF7JIqzMzYhh6oSeSlXz5jkDenmH1khZBHSO36zB743eeS3ZJvetcqeVotADuRwv8DgNQ9RSs/1Xz4xV91m+paUc55N8gy3Es5VpBLBKTQjq5TIYyIepgC2sWdl6RGHeGdJLmNo9HHG8kyCDkg4k+WydmF8Tyq3wit3tm70b14cHQmDyknSgHqU22f0VCfoWZUUHKfZc/ZGgXh0/oLzjozj5sh6CkthCQaA22FuxnRPNvJKd/vD5eU3ivZULo5L/Xd1e0/kp0h/wyWoO2QMx4rMXep3enZMOM5lBcXo3iFF7GXYsL8Jqg1KvQ80gNSxBX6zuS7lqIwqn3CUvM3YWMycuzFOOSyUKsUR57vPJHfl85dzc91j8LkGxcwo6p59Z2ChrLeibu01+2GLxKFPn3Y8Qzj9IHH1sLiffTCztpOGAQfE+LcsiMdxq2VZEGdnyQupCyxXobOiUw9qU2mFoFe6fYPaEuRaDKAKFkmy/xtmox8GDe/4DVm4L/A6PNodMpRHGU6jH+K+6u1q+ZddEYz3NaRjwkF/jfZEJ7lIliW9tCWfYlhB2Wb/Rcj/SxSsLf3Px2dairuWmO3rubSsGtidSaR+op+iaqLIFCkVrKECX+q9pIV1uTloybpx0NHdSTuHnYz5O+x8tzg5lR5wSj00UEuBgeyBRjgimpCvBLzDfEVuEKpAOUKvzjgC11fzrv//u5A0Xa8cIPf4zojoJflnAjildrQMMSGCLS3r2tUZt3mupLZj8PL9cUrWhs8DW9gJBlNYkJzb8d5N7QqG62QL3eRYNd5uTdSg12vL1pH4VNiB7w9a60p+WRxVDFnLAOhDtyxT48CMOPyEHZxwJZklzVbBCniqo6nNnnGpLTL3f6sUcdql5xl7J28Q1DE/01cWkBP9aXjC2jCGt9lcKSZS6mnif8CyvWZS4hKYRSFBp5xfYv19Z/dOAwZoH2ixCYLekLlONx/Pcm5Vsg/LW5usSOu20sp8RoC4wWYZe15ldkSSzBB+wKiKS9fPlt8lW0SR4T15LdswKXrzA6IFICJMA6NdVxkWbP+XZQxwvPgTwhAkqid9MWsxjWqZDPK8wL8X7kFnM3k2TzJWmVBKnYb41ogYSoQ1VhZ0cn1ikN6W7R3wGJ0Gzwlj1hTlWxQbCw1yF9Oj7/a/dQZrsdMii9I5EifaDzt+gf26Z4witsr/nSdLNyaPJ2UKtTn223LnBqOXHgbg94sk07CWVIgCdFo2H6Td6pDg1Zf30z5I9HlV73IZ0SdMtQ22U3g52cxnqUEk6ieR9N9L29ntqoAHw+St22SsH7a14pd772PJki5+k0PcuAVWpAmFEYAug+tcwLFFskXAaEvyIpTcVUq8959kIslieg3ZTtgl3h0nNHmOqTG9sttHvFWEcNmy45yjgTug53ydeRfNwlBm6RbEtWWBbtceuZ0YNNb8f6eK9Jb0HDLa2gLWKaZyTnPrLy8vsPJaweTssmTxYqffrPMDFO87BbOLtxu7/cppvJjdkHJyWDyd4BhRee/fGwxRnE7aj9K3j3vK7/RCKiDMcwFrxh621eKbvKAFgEeGPlFuzC7T41kYvPthuMYEJrbqW0ShA/5SphbOescyg4XBPOxoAupVLDzfmb2HupSPTP/fDMokkAFe9oTArVMtTaEWXrRNoLIg//bkI3E13Jns/shaNay4eR1q/CohaEY6/qKttjJmh0BFPKDHXT2uUktyD6W/wM/0uM/3w8VuHeoLFAPWd4JBrpdPfUpW8hFhmoujpQCvSmD4txfES715CnJBeuTC4VitOE/WjQZXywS7AXQWB6kYNknFoyJCLSB/jlid2fS2CXJSEwASNuZt82exul0vI+DeWvajIruEbDjv4AAAAAM+vgaSl8Eu5GUzRCcnBW5Uli7WEZoDgxqgx0T9pX8uQ3YuV0sQIAJbRoUd1UCECMvVnPxDoyBQ37++FZHhW0Hzs4BmgJ8QgdlMTuRArNMnCu1Nq8FU7NEXHPkfBy/3rqbC5mZZAmDQVAp8bQLXzSIiEDERYf18DdkUg+x+tmn8YjP/nzOYVjP2laNTLiyybgu8GxzhqZ/I/o3sDA8NWchmHH6Ruay0HUvVRkQlayPz3EKNz8o538w9maLwg+NJe2aiJ5k15GOd6FZzaolgtRcE/ruZdoisRh4gHiVDz7xC0gFGAOKVJ/NewP0adixkAZsg9+gcrIuf4i0D1tD2jSxe0YJkeYjy27EO1kpzH97nqo7mBG92XUh5B7XrahFoSS2QekIsklyPJGKEGOeEyubrUn92/vVf+5l4Hakw3Nqfrp1Q//6fYBC+YeTEjNOBhclcbRfHpH45L8bAQ7neUK8MYaMzqTFKbaCy9IDJMPSeoq4uOmn6IaecYDcTnacFRHsDoC6KZO3ek9gFFsupix47jHmFw/bY+aiguFb0ffovgh6JqUa2IkDrGvQAg+BQgtLcFQlfkDsDh2LRAFp1SudVGlJO40mWNVYczqpddu4BLM6am1FMeq1BQSYSWqCB24inRAnQNwG+fQEYGmyaQItcIOz2pkx9AkdYrEbp5qf+/Wonio/WNIm0eFzWAkglgbU4K/KnYVvuRbs4wAFlWRIOQyYG4LwQ2cEq5pR2M6ooy5sF3Zb6grq4r2p2mrA4z10sr8W/zzG87YPBVhexQYGcf95IEqZkDEcrnxYhk9kaypCJUxWrs1JmX+h2yp25o/qKAMqJMu5ayd0mPmqKxVQYZniXmb5Uw6nQnpOi+0i3YkIP/S35EaeuWPw5deAj9oyhK6PJOag3Oxl3RTB7gE/+Jsu0mO7Dw67KygjSY12BIJ5G92Q8oZ6nCTk7ugjj/99hxw7KJHPbz49cgkFmLvXeBVjyI4lZFJ1ALQzX2qwDMKZax6R2fg+ReSHyTCLPAc0esGC8wBivOLTkwS0zlJzli1dzU2BFF/7tCcUCv0BAu6bshcwKETQp55UzS002szkDiItnccZcmnrpqtOOb0BgkP3XtbKulOADqOuXeZDledjPtDFw4by7ZHVIN10u+VVDAzE5+7ykERoQa7/+CLboDtsRlw8gLBaoT6CbquO+7u8PJd84JXlyeXmPjZ5TZb6okKyPnAttP7aShH2RbX/JUBBBefxPs4r9EKiAv4Nq9gPY36q18lm4oJHGGcPPEDgcmqkkbC6JN8RIRk0JYPMSWTqkUvgNSCN+tyFQmTSs1OEbgHFIGyIBcDo/JfCzCHKWugPwaDUKhmH8eZ7nJcp/sDo1cnMpo9hOn3GO6HmFf/Xk0SADFXxoC+G2kMG85ebU6lQDrroNA47QvmgruW9eVjceiS0SDUHEtECeZ5+OwkeF/ZfFOYmwyGg7V6aykM7qS8jqLxFaCib6y9iH5i7hqcRNQVgzSTN6zjUJlvRjEKxj8W2/zEVpyaI1mqYLU2JV4ajMd5XEDLGPibtrSbBp2oljGSLzzC5FivbLXxNgrQ5rZWSNvdK23VXp2wOGXqegqDNuKR1q87kfBxKCNrtc9nippSYcsI1aBnAEuo3IxbAVrTwdK28rBnJkcGz+epT3ibnw1nEhJ5bFTGm757NUnU9qXw0s7iT5pNhRAtMvCuEdf/Y0YB05UijDpz+HehxORQCyj1MtR8wb6iDE2TmAWFwPS2eTeEf9ecQOaa+I4S7O5ZLsaghUs90JlpVA2hKbGpo3eLOsr/PbffpXLtW6AbHb3gDAaQmLtVRyFVC72tcONoaCJlaSBnAMmyIAdo7ChhUS8xqhR+5jWYhdndS0tJbHQouydrj1FI2ulPC0Ycsa3g+uKsfuWIuHoNiybXWInB8Ae3Xc50J1PQUpe+bxETBu98QBeGjQpiIrg8BItteBUd3h/vLxQk+jjAXnY0A9Mw1M0o0RSiMF+HA8jfpP+8Bv90E2YVSOW76c+ivD91FghVH9NxhHn75a+uBTe+KBpnkkK2X7iQedw07gQLb9v7y7XKLPOP9eiOZwUVGDeiKj8tu2DzuKXLEet9rh76dKTKNAFyo6XTyBeNRSvFhGh8GRYRuoVUGxwIvPxNCGzaWTzztI25MG1OfvyNATmC4TmTCUkVKH1fAnqRf/cAF+wyCsyt0uPY4LyTiohA0wLvYP29OgWEDZf+tnFwZ4Sn5ho5A0jlm4voL7SwgIi+PmEx7j8k1R07s7E1UD0NvFzIace1PSVYv/P33lxuG+bZRfvvjYG0Dwg/3FCFV3kFOM7LkiENXg8qdFdjPsqFoyUCjFwRUkz3Sq5n4ojpkwwDnIo4qMK0jI6EO0tKyRp9dPNKiMaTtTNTU4wqwFV5n3aQtv1AA8JjqU+JxHbmjlYJaaZIkWV2nt1r8rZXwn505tnQo3QIXOa6ImaAQFtXZCnWCfzIdC1WcBiE04J1LVSaoxt2QFBQrPH1fmWLhKLSbrRVoQxlNHXUBBHSTjjObgefeNe7xqeItInhNlZb7bwHPMuNEjZ4vaHRuqJricQlnhKJCDSsJ7iKvRNjmFz9CiqOWMxyn1IhOwzMeznFC0UBXxpoHGtwbaE8NVNBNNsPJhtt7ot8hqx5E4QMHRoy2k7jwoZxLnNmVzRAWzktuFN1UzqpbFjer39Vbn9yZzWBXzLduSFOwAhluHiNX23wE6JK8Xc6im5aE6d8dko+Gk8KbVLXKtSCJgKMP9y3+BGPF/7TZDUSg5x6nY9ViH3/mBkWnC8dslvAtn/wvl5WisAH6b/Gd+/eWZ2UgiaukrXoZIHpaRUpI73+PqQeLkTzElhHCkYmWG5t2s9krImZS/d/FXM8syb/g5viUOf4jTtcuFWdaE50d2dtg6QY0Uoox8QvnzciveeWDd7GylYm59ZyC0Bk98WqsR05voTRm7hFAYbrcLMW8RKy+WdjcOEtuse1LJxCNKSOCOuw3KzxAuSsNiXB9nHCeGEdhVyPrvhe107SqogRoIr3H9yMIEJgn0j2tcRCNwjoto3RXr4EzIBKmFXHMu6Bf8eXxeIZOsd4hPO0VUDLm5V29AMVqIrSyelVYo/sya0qk97/Fum4NAFvxMTyiXqpBq5IwIfAtL0AeQHHMpBrQWgQRnQoHMGUiOaxYwQxNlZFC1qpCPN/Qpjdd1tbs0oWhB9WJZXrvRgRkAYDEL9nQg4xKAGdGwofw6wk2eZRhtC2unCbt+lbS4jpJ3AAGaiHQP9v8EOoqSRVpm0VtQ6FBDFVxdFTil+pOamgt5B2eKfbhV8NqKAQ9WEkQIIxrt+5RR8Opf7v0K9B0C/ctxpapsJmDX+W9lrRcsFYh5/JW21LIjwo3WkVg6w6inhPQNIwPGCraXVgky+ZeHe8baoGyqs+GT8+Gg1JGJuntsxuHYF+J/k/bMn2NbOPjU/yUwre7yMX05+vSvX1FhszD64VAVVLkcpPDyoV+OjI/xg7KclyS+AFtMTnqVPlVRYgpcovlAOx/eC6QstL7UBAWo/gq3NJwJ9ZrPJyBKRXzYrk6RfGw/gGOzQDExa3FU5sujoyOV0HM/k070ZwL20BnDOYCeAfLFUiLU8k7v4K5pyUZPiJehSWzx8Q1da1jL7kXNZCqNpL7OKlBjt2HtEnVqLDC4eTem2+cxmUYtpkUOHrX8XXMjKrv/MzHwaJjssNGh6uqmlCe6LKXn/Sr+igwyHID/kLraqAKmzIldKpI7F1ESnbLo5Mjf4rUHBF4yWHcxJDJbK2ziolc0N5ZnIo5VPag+EqYcYD4zs8apWmUKvoNrUpRyUQtaS4mRncj957P6+42aY8LenDPs6HWN8MGzlnTyVZIH+RNBWhPp2nAOdeBrENobp91thOjL+WgR/dyw5JgWzhpjfAkRhOTigswdUUVRW8Me/2aTiok66khM2vB5CeqtwLu4yh4lMq/8NL9Yb3VfJNbRZipAOi7Q7nWopASkR1RduQ2xyvCFO7IG9lTrGNzz56NP/i9rDjgU9JZQfqv78xH5Ljg466yEO8w2V4FffHsqpkzWKTxrmlG9/mHTyD/yCbd+mVP3DJjbDXCC1u9yetQ0KawbXZFyL+/OnbahuGXHJQ06ufnAVaNWW7sowTF0zWi32DLqurCatCTZJ/v70xxPvviFi6A0E5GpdtPF3pX/Xn4OEJ69zh/SI77fdfZjuKbgWsnLpHHDQ+zb1h7HeLmrLZyq3JSKuUe5068viAl85UWXjnGGIWmVBeJq+C9wAAAAAAAAA==)
> 
>             **Directory structures of efi.bin and dtb.bin files**
> 
> 
> 
> `efi.bin` **signing process**
> 
> 
> 
> > 
> > 
> > - The host tool uses the `sbsign` utility to sign the `uki.efi` or vmlinuz.x.y.z  and `bootaa64.efi` images separately.
> >         - `sbsign` requires `certificate` and `key` for the signing process. Verify the following syntax where `dsk1.key` is key, `dsk1.crt` is certificate, and the output filename is the same as the input file:
> > 
> > 
> > sbsign --key <key file> --cert <cert file> <efi file> <output file name>
> >                 Copy to clipboard
> > 
> > 
> > 
> > - Examples:
> >     - - sbsign –key dsk1.key –cert dsk1.crt bootaa64.efi bootaa64.efi
> >                     Copy to clipboard
> >             - sbsign --key dsk1.key --cert dsk1.crt uki.efi uki.efi
> >                     Copy to clipboard
> >             - sbsign --key dsk1.key --cert dsk1.crt vmlinuz.x.y.z vmlinuz.x.y.z
> >                     Copy to clipboard
> 
> 
> 
> `dtb.bin` **signing process**
> 
> 
> 
> > 
> > 
> > - The host tool requires the path of the `dtb.bin` file.
> >         - The host tool requires the path of `key` and `certificate` (absolute path or network path) to sign the images.
> >         - UEFI secure boot requires PE format files for verification. Non-PE files, such as `dtb`, cannot be signed using `sbsign` as this signing tool requires PE format files as input.
> >         - The host tool uses the `openssl` utility to sign the `dtb` file. Verify the following syntax, where `dsk1.key` is key and `dsk1.crt` is certificate:
> > 
> > 
> > 
> > > 
> > > 
> > > openssl cms -sign -inkey <.key file> -signer <.crt file> -binary -in <dtb file> --out <output .dtb.sig file> -outform DER
> > >                 Copy to clipboard
> > 
> > 
> > 
> > 
> > - Example:
> >     - openssl cms -sign -inkey dsk1.key -signer dsk1.crt -binary -in <foo.dtb file> --out <foo.dtb.sig file > -outform DER
> >                 Copy to clipboard
> > 
> > 
> > 
> > 
> >             This command adds the signature for the DTB file in a separate
> > file (`foo.dtb.sig`) and does not modify the original file
> > (`foo.dtb`). Hence, the host tool must keep both the files
> > where the `*.dtb.sig` file is used during the UEFI secure boot
> > verification.
    - **Host signing tool workflow to combine DTB**

> 
> 
> To combine DTB files using the host tool, do the following:
> 
>         1. Prepare DTB files: Place the new DTB files to be combined in the `dtb_files` directory.
>         2. Select operation: Set `operation=combine_dtb` in `config.ini`.
>         3. Combine with the old DTB:
> 
>             1. To combine the new DTB files with the existing `combined-dtb.dtb` in `dtb.bin`, set `combine_dtb_type=combine_with_old_dtb`.
>             2. Ensure that the old `dtb.bin` is in the `unsigned_binaries/` directory.
>             3. The host tool takes `combined-dtb.dtb` from the old `dtb.bin` and appends all DTB files from the `dtb_files` directory.
>             4. The host tool then creates a `dtb.bin` (vfat), copies all old files/directories from the old `dtb.bin`, and includes the newly created `combined-dtb.dtb` with the appended DTB files.
>             5. The host tool places the updated `dtb.bin` in the `unsigned_combined_dtb_bi` directory.
>         4. Combine without old DTB:
> 
>             1. To combine only the new DTB files in the `dtb_files` directory, set `combine_dtb_type=combine_without_old_dtb`.
>             2. The host tool takes all DTB files from the `dtb_files` directory and creates a `combined-dtb.dtb` file.
>             3. The host tool then creates a `dtb.bin` (vfat) and includes the newly created `combined-dtb.dtb`.
>             4. The host tool places the updated `dtb.bin` in the `unsigned_combined_dtb_bin` directory.

> 
> 
> ![../../_images/Create_sign_DTB.png](data:image/png;base64,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)
> 
> **Create/sign DTB**
- **Multi-DTB support**

    Qualcomm supports multiple Qualcomm development kits based on the same hardware SoC. For
example, the QCS6490 development kit variants include the RB3 Gen 2 Core kit and RB3
Gen 2 Vision kit.

    Each Qualcomm development kit variant has its own DTB in the kernel.
During bootup, UEFI selects the appropriate DTB based on the specific
Qualcomm development kit variant. To facilitate this, all DTBs for Qualcomm development kits sharing
the same hardware SoC are combined and stored in the DTB partition.

    **Generate combined DTB**

    To enable multi-DTB support, all supported DTBs are appended one
after the other and a combined DTB is generated.

![../../_images/combined_dtb.png](data:image/png;base64,UklGRhIEAABXRUJQVlA4TAYEAAAvz0IPAI/iqrZtVVlHnmsEf2gS+kISlxAMPr2Gq9q2VWUdea4RFCcBNCXQS4BDCAaf7qq2bVVZR55rAncgwYtAer69AgUYzH8A//+/NE1FUURViQhVZWZEhJlxd2VZUlVmRkSIiCAIiAhVJSJEhIiI49jz2WAEnKxZsAHcscbrdROGdyzBFEvABHDBDXCid/X9/jweX03TqetaXdfMjIhwd3Vdc/9gwABgdgfcJwPghjvgihtPHAGTDYI94MAIuNj9wR1wwoARbLcLmLF+OC6vmGJ/BUewB+sDO0CibdtpGz11sMzMTZkhndB4HCgFZ+b//yZ+evLTulpLg4novwO3kRQpfYyV6cWDDxi5bi4DrKvLEOv6MsiK2Zaa/HXxaTnA+jAZoOr02HKA9X48Yls6cZqf8x0TYI1fBqh6/dEEWEtnEdvSs7OR/4z8Z+Q/v6156BOvuc6XjGKfxFovCcEaqzWB+z2iZlkNlmvx+EdKRKs1NViuj0eWqxa4lpqXNAtVjji+kVCbpSyHTLMsB1kvcQ5T8gKU62sqxNQC5doSh1sHVEulma0ZidBaOcfCyxGszW4dEPkByrVFQiVKUF3bOnBaalGgGGQjW6vvpzRMYC+chCUVoz2MckBWlh7RW9cLUK6v9WxL4YkvpHVAubYamet9n7mqgGopXwM2diMQu4XUqObFytIsZ6xVTM8LSK529TyA6PqaqkFT7Q2TFCIQaRW7oUKaoDwB5CpQ8ACQq4MNowJMtZUFiEGkCOsl3co4MV4BcnWcbBgdeK7FZ7ZE14GjagdJTCQirG5zYVXjq/ELmqv9PokSGFdHkLWq0YGlWsiCRiSmp4W2Kn7BcXWeK8FxFWlsV5RAqb6mw3AxTdbe8BD9CixECDA9R5B2APBUPaYYxVfaxvrEbMPrFTjXArEtaC1442vuBkxXdQVJtWUliuKHSLF8PgTJVTyqQRtfOxq1VQ9BUi24vraMQApsismJtGzz+UJgri1+1IM0vt72FpbOkFQdNKrR+D0O0AmWaytlRw94HV+cEyTVVlyePB5pvww2j13vNwO5CtOhD5Bci/3VWmmYYo+UH04uncG1FOJmQbCRsJatVdhP1zZL3Lptv5L1Br4AUwXH8ducfDhXvj3xB0I6gFwdqtTWgeRa7BMvdl0FUEtRcH+hWmCtKva52WuaOVmvZMfwBJpqKGyWjJJG1bjY0AHk6mJDB6jrZkkHUEuRSUIkCRbxt+ydkjEOnMHYet/rCZRrwd8J1vg+730f8jP7IkkHjqqDdbArZYgrYKq/n//nNfKfkf+M/Oe3OCuXAdbn0wBVT95dBlhTOxHb0h0Ft8sh1sx8gKqLs0EO70yIrtMLIbZ0ajnEujR/U5cB)

    For example, for the RB3 Gen 2 Vision kit, the following DTBs are combined to generate
the `combined-dtb.dtb`. The following code snippet is from
the `meta-qcom-hwe/conf/machine/qcs6490-rb3gen2-vision-kit.conf` file:

KERNEL_DEVICETREE:pn-linux-qcom-custom = " \
                        qcom/qcs6490-addons-rb3gen2-video-mezz.dtb \
                        qcom/qcs6490-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs6490-addons-rb3gen2-vision-mezz-hsp.dtb \
                        qcom/qcs6490-addons-rb3gen2-ptz-mezz.dtb \
                        qcom/qcs6490-addons-rb3gen2-ia-mezz.dtb \
                        qcom/qcs5430-fp1-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs5430-fp1-addons-rb3gen2-vision-mezz-hsp.dtb \
                        qcom/qcs5430-fp2-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs5430-fp2-addons-rb3gen2-vision-mezz-hsp.dtb \
                        qcom/qcs5430-fp2p5-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs5430-fp2p5-addons-rb3gen2-vision-mezz-hsp.dtb \
                        qcom/qcs5430-fp3-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs5430-fp2p5-addons-rb3gen2-vision-mezz-hsp.dtb \
                        "
        Copy to clipboard

    **DTB partition**

    - A `vfat` image named `dtb.bin` is generated, which contains the
combined DTB image. A dedicated partition named `dtb` is present
on the Qualcomm development kits. The `dtb.bin` is flashed on this partition.
    - UEFI parses the combined DTB present in the `dtb` partition
and selects a matching DTB for the hardware.

## Partitioning

This section describes how you can add, delete, modify, and rename partitions.

Qualcomm Linux provides a pre-generated `partition.xml` file, which
is used by default. The pre-generated file is delivered as part of the
`QCM6490_bootbinaries.zip` file. When a build is initiated,
the `partition.xml` file from `QCM6490_bootbinaries.zip` is used and steps
3 to 5 are run from [Ptool workflow](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#ptool-workflow) figure.

To add, delete, modify, or rename partitions, Qualcomm Linux provides configuration files,
which define partitions for the UFS device.
The configuration files are in the `meta-qcom-hwe/recipes-devtools/partition-utils/qcom-partition-confs/` directory.

By modifying these configuration files and integrating these in the build,
you can generate a custom partition layout. When a configuration file from
`meta-qcom-hwe/recipes-devtools/partition-utils/qcom-partition-confs/` is used in
Qualcomm Linux builds, the workflow spans all the steps from the [Ptool workflow](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#ptool-workflow) figure.

The following table lists the files and tools used for partitioning:

| File or tool | Description |
| --- | --- |
| Partition XML (mandatory) | Defines the Qualcomm internal XML format. |
| Ptool (mandatory) | Qualcomm Ptool that converts information in partition XML to GUID Partition Table (GPT) binaries. |
| Partition layout file (optional) | Defines all partitions for storage in JSON format. |
| gen\_partition tool (optional) | Reads the partition layout file and generates an internal XML format handled by the Qualcomm Ptool. |

The partition definitions in JSON format (used by the .conf files),
existing partitions, and the tool that generates the GUID partition
table for Qualcomm development kits are as follows:

Note

The following partition layout and examples are specific to the UFS.

- **Partition layout file**

    The UFS on the device is partitioned to store various images of
the bootchain and the Linux operating system. The configuration file contains details about the
partitions that are configured for a specific Qualcomm development kit. For the
RB3 Gen 2 development kit, the UFS partitions
are defined in the following configuration file in the workspace:
`meta-qcom-hwe/recipes-devtools/partition-utils/qcom-partition-confs/qcm6490-partitions.conf`.

    - **Partition layout file syntax**

        The following examples from the `qcm6490-partitions.conf` file show the syntax of the partition layout file.

        The first entry in the configuration file defines the disk type, disk size, logical block addressing (LBA) size (sector size),
and whether the last partition should grow till the last usable LBA.

# select disk type emmc | nand | ufs mandatory
            # disk size in bytes is mandatory
            
            --disk --type=ufs --size=137438953472 --write-protect-boundary=0 --sector-size-in-bytes=4096 --grow-last-partition
            Copy to clipboard

        The following examples of partitions are specified in the `qcm6490-partitions.conf` file.
A few partitions are defined in LUN0, with each line representing an individual partition.

Note

In the following examples, the `firmware-qcom-bootbins_1.0.bb` recipe downloads
the `partition.xml` file from [Qualcomm software center](https://softwarecenter.qualcomm.com/) and takes the GUIDs from it.

        - Example 1: The `ssd` partition of 8 KB is defined for LUN0. This
partition does not require a file to be flashed, hence –filename= parameter is not used.

--partition --lun=0 --name=ssd --size=8KB --type-guid=2C86E742-745E-4FDD-BFD8-B6A7AC638772
                Copy to clipboard

        A couple of partitions are defined in LUN1. Each line defines an
individual partition:

        - Example 2: The `xbl_a` partition of 3604 KB is defined for LUN1.
The `xbl.elf` file is flashed to this partition.

#This is LUN 1 - Boot LUN A
                --partition --lun=1 --name=xbl_a --size=3604KB --type-guid=DEA0BA2C-CBDD-4805-B4F9-F428251C3E98 --filename=xbl.elf
                Copy to clipboard
        - Example 3: The `xbl_config_a` partition of 512 KB is defined for
LUN1. The `xbl_config.elf` file is flashed to this partition.

#This is LUN 1 - Boot LUN A
                --partition --lun=1 --name=xbl_config_a --size=512KB --type-guid=5A325AE4-4276-B66D-0ADD-3494DF27706A --filename=xbl_config.elf
                Copy to clipboard

        A partition defined in LUN4:

        - Example 4: The `aop_a` partition of 512 KB is defined for LUN4.
The `aop.mbn` file is flashed to this partition.

--partition --lun=4 --name=aop_a --size=512KB --type-guid=D69E90A5-4CAB-0071-F6DF-AB977F141A7F --filename=aop.mbn
                Copy to clipboard

        The options used for each partition entry are as follows:

        - Mandatory options:

--lun (mandatory for UFS, optional for emmc. Expressed as number)
                --name (name for the partition, a string)
                --size (size of the partition, generally expressed in KB)
                --type-guid (GUID for the partition)
                Copy to clipboard
        - Optional options:

--attributes  (Optional 64 bit attribute, e.g., 1000000000000004)
                --filename    (Name of the file that is flashed to the partition)
                --readonly    (whether the partition should be read-only, values true or false)
                --sparse      (whether the partition is for a sparsed image, values true or false)
                Copy to clipboard
- **Linux operating system partitions**

    | Partitions | Description |
    | --- | --- |
    | EFI partition | The EFI system partition (ESP) contains `Esp.bin` and a `vfat` file. It contains all the<br>details necessary for the UEFI to enable systemd-boot. For more information on this image, see<br>[EFI image](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#efi-image-section). |
    | Rootfs partition | This partition contains the `system.img` image file. This image consists of all the<br>user space libraries and binaries. |
- **Partition tool (Ptool)**

    Ptool generates a GUID partition table binary that the QDL tool uses to partition the storage.

    The Ptool workflow is shown in the following figure.

![../../_images/ptool.png](data:image/png;base64,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)

    **Ptool workflow**

    The `qcm6490-partitions.conf` file present in the `meta-qcom-hwe/recipes-devtools/partition-utils/qcom-partition-confs` directory
defines all the partitions. The `gen_partition.py` tool processes and generates `partition.xml`, which is a mandatory input for
`ptool.py`. As a final step, Ptool generates the `rawprogram.xml`, `patch.xml`, `gpt_main*.bin`, and
`gpt_backup*.bin` files, which are required by the QDL tool to flash the device.

    To add a partition, make a partition entry in the configuration file; for example `qcm6490-partitions.conf` with a universal unique
identifier (UUID).

    After updating the conf file, to switch the preferred provider of virtual/partconf
to `qcom-partition-confs_1.0.bb`, add the following line to `local.conf`.

PREFERRED_PROVIDER_virtual/partconf = "qcom-partition-confs"
        Copy to clipboard

    After adding the entry, run the BitBake command to generate all necessary files:

bitbake <image-name>
        Copy to clipboard

    After the image build completes, if MACHINE selected is qcs6490-rb3gen2-core-kit and the image recipe selected is qcom-console-image, run the following command to flash the image.

cd <workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-core-kit/qcom-console-image
        ./qdl prog_firehose_ddr.elf rawprogram*.xml patch*.xml
        Copy to clipboard

## Docker containers

Docker containers are enabled in Qualcomm Linux. To use Docker containers, ensure
that the virtualization features are enabled in Qualcomm BSP. To use containers on
Qualcomm Linux devices, ensure that the `meta-virtualization` layer is enabled as
part of the workspace.

- **Docker**

    Docker is enabled in the `qcom-multimedia-image`:

    1. For the `qcom-multimedia-image` image recipe,
`packagegroup-container` is included using
`meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-multimedia.bb`.
    2. After the image is built and flashed, Docker is available on the
device.
    3. To verify kernel compatibility, run the `check-config.sh` script
on the device. To verify the configuration, enable the required kernel
configurations and rebuild the image. For more
information, see [Kernel
compatibility](https://docs.docker.com/engine/install/troubleshoot/#:~:text=Kernel%20compatibility,check%2Dconfig.sh%20script.&amp;text=The%20script%20only%20works%20on%20Linux).
    4. To verify the status of the Docker daemon, run the following command and verify the output:

        | Command | Description | Output |
        | --- | --- | --- |
        | `systemctl status docker` | If Docker commands have been run at least once after boot-up | Active (running) |
        | `systemctl status docker` | If the device has not run any Docker commands after boot-up | Inactive (dead) |
        |  |  |  |

    The images pulled from the Docker repository for the `linux/arm64` platform and tested to run successfully on the device are as follows:

> 
> 
> - `busybox`
>     - `python`
>     - `alpine`
>     - `ubuntu`
>     - `postgres`
>     - `mongo`
>     - `nginx`
>     - `redis`

    The following use cases are verified with Docker enabled:

    - Load Docker images from tar files using the Docker load utility.
    - Build a Docker image from the Docker file.
    - Save Docker images that were pulled/built into a `.tar` file.
    - Load Docker images, which are saved as `.tar` files.
    - Run multiple container instances of multiple images pulled/built.
    - Verify the list of Docker images loaded on the device.
    - Verify the list of active and total containers on the device.
    - Inspect Docker images using the Docker inspect utility.
    - Obtain logs from a container using the Docker logs utility.
    - Stop and kill the container using the Docker stop and Docker kill utilities.
    - Remove containers and Docker images from the device.
- **Hardware node access from Docker**

    The applications running inside a Docker container may need access to device nodes and
files on the device (that is, device is the host for the Docker container). This is performed
by passing the respective device nodes as an option with the run command for Docker:

docker run -it --rm --device=<device-1> --device=<device-2> <docker-image-name>
        Copy to clipboard

    The device nodes to be passed are in the `/dev`
directory on the device. Depending on the use case, for example, in a
graphics scenario, `/dev/kgsl-3d0` is one of the nodes to be passed
to Docker using `--device=/dev/kgsl-3d0`.

    Applications running inside a Docker container may also need access to storage on the device (target-host).
To expose files/directories as bind mounts, run the following command:

docker run -it --rm --mount type=bind,source=<source-path-on-device>,target=<destination-path-inside-container> <docker-image-name>
        Copy to clipboard

    Run a docker container exposing multiple directories, files, and
device nodes to the container using the following command:

docker run -it --rm --device=<device-1> --device=<device-2> --mount type=bind,source=<source-path-on-device-1>,target=<destination-path-inside-container-1>  --mount type=bind,source=<source-path-on-device-2>,target=<destination-path-inside-container-2> <docker-image-name>
        Copy to clipboard
- **Docker Compose**

    Docker Compose is a tool for defining and running multicontainer applications.
It streamlines managing the application stack by defining services, networks,
and volumes in a single, comprehensible YAML configuration file. By default,
the Qualcomm Linux release includes Docker Compose in the `qcom-multimedia-image`.

    The `python3-docker-compose` package is added to the
`packagegroup-qcom-multimedia` package group in
the `meta-qcom-distro` metadata layer.

    **To run Docker Compose on the device:**

    1. Create or copy the Docker Compose YAML files under the writable path on a
device such as `/var` (for example `/var/docker-compose-yaml`)
to be used with Docker Compose on the device.
    2. Ensure that the Docker images listed in your Docker Compose YAML
files are available on the device. If not, the device should be
connected to a valid internet connection to pull the docker images.
    3. To run Docker Compose for multiple YAML files, run the following
command:

docker-compose -f <docker-compose-file-1>.yml -f <docker-compose\u0002file-2>.yml up
            Copy to clipboard

    Docker Compose runs and initiates the Docker containers as configured
in the Docker Compose YAML file. After the Docker Compose command
returns, run `docker ps -a` and `docker logs <conatiner-id>` to
verify if the docker containers are running as expected.

    To know more about Docker Compose, see [Docker Compose overview](https://docs.docker.com/compose).

## Kubernetes setup with Qualcomm Linux

Kubernetes is an open-source platform used to automate the deployment, scaling, and management of applications running in a container. It helps
organize containers across multiple devices, ensuring efficient resource utilization, high availability, and scalability of applications.
Kubernetes is useful not only for large-scale servers and cloud systems but also for small-scale Linux embedded devices.
It helps manage and orchestrate containers and applications across IoT devices efficiently.
For more information on Kubernetes, see the offical website of [Kubernetes](https://kubernetes.io/).

- **Enable Kubernetes**

    - The Qualcomm Linux release enables Kubernetes by default in
`qcom-multimedia-image`, through the following changes:

        - The `packagegroup-qcom-k8s` is defined in the `meta-qcom-hwe` layer at `dynamic-layers/virtualization-layer/recipes-containers/packagegroups/packagegroup-qcom-k8s.bb`.
        - The `packagegroup-qcom-k8s` is included in the `recipes-products/packagegroups/packagegroup-qcom-multimedia.bb` image recipe in the `meta-qcom-distro` layer.
    - To verify the status of kubelet after bootup, run the following command and verify the output:

        | Command | Description | Output |
        | --- | --- | --- |
        | `systemctl status kubelet` | If the device has been set up at least once as a Kubernetes node using kubeadm after bootup | Active (running) |
        | `systemctl status kubelet` | If the device has not been set up as a Kubernetes node using kubeadm after bootup | Inactive (dead) |
        |  |  |  |

**Changes made in Docker and Kubernetes in contrast to the** `meta-virtualization` **solution**

- The `meta-qcom-hwe/dynamic-layers/virtualization-layer/recipes-containers/docker/docker-moby_git.bbappend` file
modifies `/${systemd_unitdir}/system/docker.service` to add option
`--exec-opt native.cgroupdriver=systemd` to the `dockerd`
command that runs as part of `ExecStart` of the service. This is done to maintain parity with
the `cgroupdriver` between Docker and Kubernetes.
- The `meta-qcom-hwe`/`recipes-containers`/`kubernetes`/`kubernetes_git.bbappend` file
modifies `/lib/systemd/system/kubelet.service.d/10-kubeadm.conf`
to add `--fail-swap-on=false` as part of `KUBELET_EXTRA_ARGS`.
By default, Kubernetes expects swap to be **OFF**, but Qualcomm Linux has swap set to **ON** with the zram feature enabled.
Setting `--fail-swap-on=false` allows the kubelet to run even if swap memory is enabled.
- The upstream `kubelet.service` attempts to start automatically upon
device bootup, even if the device is not configured as a Kubernetes
node. However, this behavior consumes resources and impacts power.
To address this, `kubelet.service` is modified by
removing `WantedBy=multi-user.target` in the
`meta-qcom-hwe/recipes-containers/kubernetes/kubernetes_git.bbappend`
file. With `WantedBy=multi-user.target` deleted, the upstream `kubelet.service`
starts when the device is set up as a Kubernetes node
using `kubeadm`, rather than automatically at bootup as part of `multi-user.target`.

## Properties

Properties (`property-vault`) provide functionality to store and share
key-value pairs stored as strings across the system. Any software
component can share any value for a particular key and any other process
can access the value by using the same key. `property-vault` allows you
to define persistent properties across reboots. Components can use
`property-vault` to share specific information, which might be
relevant to any other modules on the device. These key-value pairs can be
accessed using the command-line interface (CLI).

Note

property-vault is supported only in `custom` variant.

- **Configure properties using CLI on Qualcomm device**

    To set a property using the CLI on the Qualcomm device, use the following command:

setprop "my-key" "my-value"
        Copy to clipboard

    To access a property using the CLI, use the following command:

getprop "my-key"
        Copy to clipboard

    Result of the previous command:

my-value
        Copy to clipboard

    To set a property using the CLI and make it persistent across reboots on the device, use
the following command:

setprop "persist.my-key" "my-value"
        Copy to clipboard

Note

For a property to persist across reboots, the property key must start with `persist`.
- **Use Properties in C/C++ source files of Qualcomm Linux**

    To use the properties in C/C++ source code modules, do the following:

    1. To use properties in a program,
for example, in `example-recipe.bb`, add a dependency on
`property-vault`:

DEPENDS += "glib-2.0 property-vault"
            RDEPENDS:${PN} += "property-vault"
            Copy to clipboard
    2. Change build configuration files:

        1. If you are using `autotools`:

            `configure.ac`

...
                
                PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes, AC_MSG_ERROR(GLib >= 2.16 is required))
                GLIB_CFLAGS="$GLIB_CFLAGS"
                GLIB_LIBS="$GLIB_LIBS"
                AC_SUBST(GLIB_CFLAGS)
                AC_SUBST(GLIB_LIBS)
                
                AC_CONFIG_FILES([Makefile])
                ...
                Copy to clipboard

            `Makefile.am`

root_sbindir       = "/sbin"
                root_sbin_PROGRAMS = property-test
                
                property_test_SOURCES  = source.c
                property_test_CFLAGS = @GLIB_CFLAGS@
                property_test_LDFLAGS = @GLIB_LIBS@ -lpropertyvault
                Copy to clipboard
        2. If you are using `cmake`:

            `CMakeList.txt`

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -lpthread -lrt -lm -lglib-2.0 -ldl -latomic")
                target_link_libraries (your-lib-name propertyvault)
                Copy to clipboard
    3. Modify the source code files to `get` and `set` properties:

        `source.c`

#include "properties.h"
            
            int main() {
                // set a property
                property_set("my-key", "my-value");
            
                // get a property
                char paramstr[PROP_VALUE_MAX];
                // value gets stored in paramstr
                property_get("my-key", paramstr, "default-val");

                // set a property which has to persist across reboots
                property_set("persist.my-key", "my-value");
            
                // get a persisted property
                property_get("my-key", paramstr, "default-val");
            
                return 0;
            }
            Copy to clipboard

Note

The property key name can be up to 64 characters long, and the property value can be up to 92 characters long, as defined by `PROP_NAME_MAX` and `PROP_VALUE_MAX` in `properties.h`.
    4. Build the recipe on the host machine and include it as part of the image to be flashed on the device.

## Persist partition

The persist partition defined for the UFS is used to store persistent
data that the BSP software components require across reboots.

Note

The files under persist partition are supposed to remain intact, including reboots and OTA updates.
Therefore, erasing or wiping the entire partition to delete files is not recommended.

- **Persist mount point**

    The `/var/persist` directory is a mount point for a file system created on the persist partition.
The `var-persist-mount_1.0.bb` recipe is responsible for installing the
`var-persist.mount` systemd unit to `local-fs.target`.

    At boot up, the `var-persist.mount` systemd unit creates `/var/persist`
path and mounts `/dev/disk/by-partlabel/persist` on `/var/persist`.
To display the persist mount point, run the mount command as follows:

sh-5.1# mount | grep persist
        /dev/sda4 on /var/persist type ext4 (rw,relatime,rootcontext=system_u:object_r:qcom_persist_t:s0,seclabel,stripe=128)
        Copy to clipboard
- **Resize persist partition**

    Persist partition is auto-resized by `resize-partition@persist.service` ,
which is installed by the `qcom-resize-partitions.bb` recipe. The `resize-partition`
service runs at device boot to expand the filesystemd to the maximum
available size in the partition.

## Secondary virtual machine

This section provides the steps for creating virtual machine (VM)
images using Qualcomm Linux build system.

To use a virtual machine with Qualcomm Linux, ensure that the virtual machine manager (VMM) tools are included in the image recipes,
and that the Guest VM kernel and root file system images are generated.

The following procedure provides a step-by-step guide for the following:

> 
> 
> - Include essential VMM tools such as `crosvm` and `qemu`
> in the image recipes already defined in Qualcomm Linux.
> - Use commands to build Guest VM kernel and root file system images.
> - Use commands to launch the Guest VM.

1. **Set up the development machine.**

    - **Install clang on the host development machine**

> 
> 
> To install clang on the host development machine, run the following command:
> 
> 
> sudo apt install clang-11
>             Copy to clipboard
    - **Enable the meta-rust layer in Qualcomm Linux environment.**

> 
> 
> The meta-rust layer provides Rust compiler (rustc) and package
> manager (cargo) to compile crosvm, which is implemented in the Rust
> language.
> 
> 
> Add the meta-rust layer to EXTRALAYERS in the
> `meta-qcom-distro/conf/bblayers.conf` file.
> 
> 
> Open the `conf/bblayers.conf` file and add the layer path to `EXTRALAYERS` variable as follows:
> 
> 
> EXTRALAYERS ?= " \
>             ${WORKSPACE}/layers/meta-rust \
>             "
>             Copy to clipboard
    - **Include Rust from meta-rust in build.**

> 
> 
> Create the `meta-qcom-distro/conf/distro/include/rust_version.inc` file with the following content:
> 
> 
> # include this in your distribution to easily switch between versions
>             # just by changing RUST_VERSION variable
>             
>             RUST_VERSION ?= "1.73.0"
>             
>             PREFERRED_VERSION_cargo ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_cargo-native ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_libstd-rs ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust-cross-${TARGET_ARCH} ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust-llvm ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust-llvm-native ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust-native ?= "${RUST_VERSION}"
>             Copy to clipboard
> 
> 
> Include the `rust_version.inc` file in the
> `meta-qcom-distro/conf/distro/qcom-wayland.conf` file
> as follows:
> 
> 
> require conf/distro/include/rust_version.inc
>             Copy to clipboard
2. **Add crosvm tool to Qualcomm Linux images.**

    To add crosvm tool to the images built by Qualcomm Linux, edit the `meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-vm-host.bb` package group recipe file and add the following code block:

RDEPENDS:packagegroup-qcom-vm-host:append:qcom-custom-bsp = "\
           crosvm \
           "
        Copy to clipboard
3. **Build the image recipe and the Guest VM images.**

    - To build an existing Qualcomm Linux image recipe, run the `bitbake <image>` command. This includes the crosvm tool in the image generated.
    - For example, for `qcom-console-image` run the following command:

bitbake qcom-console-image
            Copy to clipboard
    - To build a Guest VM image, run the following command:

bitbake multiconfig:qcom-guestvm:qcom-guestvm-image
            Copy to clipboard

        **Guest VM artifacts**

> 
> 
> After the Guest VM image is successfully created, you can find the following artifacts:
> 
> 
> 
> > 
> > 
> > 1. The Guest VM build command creates a folder named `tmp-qcom-guestvm-glibc` for the Guest VM image.
> >         2. The Guest VM kernel and rootfs images are generated in the `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>` directory.
> >         3. The `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>/Image` file is the Guest VM kernel image.
> >         4. The `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>/qcom-guestvm-image-<machine-name>.ext4` file is the Guest VM root file system image.
> >         5. After flashing the images created by the `bitbake <image>` command and booting up the device, copy the Guest VM kernel and root file system images to the device, for example, under the `/var/gunyah` directory.
4. **Launch Guest VM.**

    To launch Guest VM, use the crosvm VMM tool.

    In the following command, the Guest VM kernel and the root file system images are from the `/var/gunyah` directory on the device.

crosvm --log-level=debug --no-syslog run --disable-sandbox --hypervisor gunyah --protected-vm-without-firmware \
        --serial=type=stdout,hardware=virtio-console,console,stdin,num=1 --serial=type=stdout,hardware=serial,earlycon,num=1 \
        --root /var/gunyah/qcom-guestvm-image-qcs9100-ride-sx.ext4 --no-balloon --no-rng --params \
        "earlyprintk=serial panic=0" /var/gunyah/Image
        Copy to clipboard

    - The `--root /var/gunyah/qcom-guestvm-image-qcs9100-ride-sx.ext4` option specifies the path to the root file system for the Guest VM.
    - The last parameter `/var/gunyah/Image` is passed to `crosvm` tool specifies the path to the kernel image.

    For more information, see [Virtualization](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-3/features.html#virtualization).

## OTA update for Qualcomm Linux

OTA updates are essential for keeping devices, especially embedded systems and IoT devices,
functioning properly. These updates allow devices to receive and install updates.

Qualcomm Linux uses capsule update mechanism for updating firmware images,
and OSTree update mechanism for updating Linux OS.

> 
> 
> ![../../_images/OTA_Introduction.png](data:image/png;base64,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)
> 
> **OTA update for Qualcomm Linux**

- **Firmware update using capsule**

    Capsule update is a method for updating firmware on Qualcomm Linux-enabled devices.
The firmware is packaged into a binary format called a UEFI capsule.
The capsule is downloaded and deployed to EFI partiton when the device is booted up and functioning in normal mission mode.
On reboot, during the next bootup cycle, the UEFI processes this capsule and applies the update to the device firmware.
- **OSTree for Linux operating system updates**

    OSTree is a tool for managing version-controlled, atomic updates of Linux-based operating systems. It works like a
git repository for the entire Linux filesystem. OSTree stores snapshots of filesystem trees in repositories, which
devices pull over the network. With OSTree, updates are atomic and support rollback, so an interrupted update will not
break the system. This is useful for IoT or edge devices that need secure, consistent updates that can
be easily rolled back if something goes wrong.
- **Use capsule and OSTree for complete OTA software updates**

    To manage firmware and OS updates in a single OTA system, use capsule and OSTree update mechanism together.
Capsule update mechanism handles the firmware updates first, updating the low-level
firmware. After the capsule update, the system reboots and reaches Linux OS,
where the OSTree updates are checked and applied.

    Qualcomm Linux uses capsule to update low-level firmware through UEFI.

    Following are the steps to update firmware using capsule:

    1. Create capsule: The firmware update is encapsulated into a binary
known as a UEFI capsule.
    2. Delivery: The capsule binary is delivered to the UEFI by storing in the mounted `/EFI` path.
    3. Processing: The UEFI firmware processes the capsule during the bootup
cycle, and applies the update to the device firmware.

    Qualcomm Linux uses OSTree to manage the Linux OS. The Qualcomm Linux build generated update package is copied to
the device and staged for activation using commands. The update package is applied after the device reboots.

    The following figure shows the storage view for the Linux OS with OSTree.
The **Runtime** view indicates which directories from the **Storage at default deployment** are
mapped to the mount-points at runtime.

    The **Storage after creation of new deployment** view shows how the flash storage is updated when a new OSTree deployment
is successfully created on the device. This deployment is newly created and attempts as the new Linux OS on the next reboot.

![../../_images/OTAupdate.png](data:image/png;base64,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)

    **Overview of the storage during OTA update**

Following is the list of Linux OS and firmware images updated as part of OTA:

> 
> 
> - **Linux OS images**
> 
> 
> 
> > 
> > 
> > - The `efi.bin` file contains the UKI, initrd, and boot loader configuration files. When a new deployment is created, OSTree generates a new configuration file and the path to the new kernel and initramfs image which are copied to EFI partiton are listed as entries in the new configuration file.
> >     - The `system.img` file contains the rootfs, including key components like `/ostree`, `/ostree/repo`, and `/ostree/deploy`. When a new deployment is created, OSTree updates the filesystem tree to reflect the new version of the operating system.
> - **Firmware images**
> 
> 
> 
> > 
> > 
> > For information related to the list of firmware images, see [GitHub](https://github.com/quic/cbsp-boot-utilities/blob/main/uefi_capsule_generation/FvUpdate_UFS.xml).

- **Capsule update flow**

    Following table shows the capsule and HLOS update flow with the description:

    | Workflow steps | Description |
    | --- | --- |
    | ![../../_images/OTA_flow.png](data:image/png;base64,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) | <ol class="arabic simple"><br><li><p>Copy the <code class="docutils literal notranslate"><span class="pre">&lt;capsule&gt;.cap</span></code> capsule file to EFI partition, which is mounted at <code class="docutils literal notranslate"><span class="pre">/boot/EFI/UpdateCapsule</span></code> on the booted-up device.</p></li><br><li><p>Set the EFI variable (efivar) OsIndications flags with <code class="docutils literal notranslate"><span class="pre">EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED</span></code> and reboot the device. UEFI identifies that there is a capsule available for update from OsIndications flag. UEFI authenticates the capsule and updates the firmware images from the capsule. The status of capsule update is updated in the ESRT table. If there is a failure during capsule update, UEFI rollbacks the firmware to previous version.</p></li><br><li><p>Firmware is updated successfully from the capsule by UEFI, and the device boots up with new firmware.</p></li><br><li><p>Copy the OSTree repo to the device. Create a new deployment for HLOS update using OSTree commands, a new configuration file with count tag gets created, reboot the device.</p></li><br><li><p>Systemd-boot picks the new config file and boots up the kernel and user space from this. Device boots up with updated firmware and HLOS software. <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> marks the new config as good.</p></li><br><li><p>Reset the TrialBootEnabled flag in OtaStatus efivar to indicate firmware is good. UEFI checks this efivar to commit the new firmware.</p></li><br></ol> |

    The following figure shows the firmware update flow:

![../../_images/OTA_firmware.png](data:image/png;base64,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)

    **Firmware update using capsule**

    To update the firmware using capsule, do the following:

    1. Copy the capsule to the device :

> 
> 
> scp -r <firmware_capsule.cap> <user>@<IP_address>:/boot/EFI/UpdateCapsule
>         Copy to clipboard
> 
> 
> For more information on `firmware_capsule.cap` capsule generation, see [Capsule generation in UEFI](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-4/tools.html#capsule-generation-in-uefi).

    2. Create the `data1.hex` file on the device containing the specified hexadecimal data:

> 
> 
> echo -e -n "\x4\x0\x0\x0\x0\x0\x0\x0" >data1.hex
>         Copy to clipboard

    3. Write the contents of `data1.hex` on the device to the UEFI variable OsIndications using efivar tool:

> 
> 
> efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -f data1.hex -w
>         Copy to clipboard
> 
> 
> For more information on UEFI variables, see [Update and recovery](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-4/architecture.html#update-and-recovery).

    4. Print the value of the OsIndications UEFI variable using efivar tool:

> 
> 
> efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -p
>         Copy to clipboard

    5. To save the efivars to RPMB, run the `uefi_sec` app on the device:

> 
> 
> /usr/bin/uefi_sec 1
>         Copy to clipboard

    6. Reboot the device:

> 
> 
> reboot
>         Copy to clipboard

    7. Check the ESRT table entries:

> 
> 
> cd /sys/firmware/efi/esrt/entries/entry0
>         Copy to clipboard
> 
> 
> Check the output of `last_attempt_status` command. If it is 0, then the update is successful:
> 
> 
> cat last_attempt_status
>         Copy to clipboard
> 
> 
> Check the output of `last_attempt_version` command:
> 
> 
> cat last_attempt_version
>         Copy to clipboard
> 
> 
> Check the output of `fw_version` command. If `last_attempt_version` and `fw_version` are the same, then the update is successful:
> 
> 
> cat fw_version
>         Copy to clipboard
- **Linux OS update flow using OSTree**

    The following figure shows the Linux OS update flow:

![../../_images/OTA_hlos.png](data:image/png;base64,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)

    **Linux OS update using OSTree**

    To update Linux OS using OSTree, do the following:

    1. To check the current deployment in the Qualcomm device, run the following command:

ostree admin status
            Copy to clipboard

        Output:

\* poky 643b332dd72b345b5040a1decbe7e04bd2d208a04ba59417aa667c901c485504.0

Version: 1.0

origin refspec: poky:qcs6490-rb3gen2-vision-kit

        The \* shows the current deployment that the device has booted with.
    2. The `ostree_repo` package is in the `<workspace>/build-<DISTRO>/tmp-glibc/deploy/images/<MACHINE>/` path on the host development machine. For example, `<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/`. Copy the `ostree_repo` package from the host machine to the Qualcomm device using the following scp command:

scp -r <ostree_repo> <user>@<IP_address>:/tmp
            Copy to clipboard
    3. Pull a local OSTree repository on the Qualcomm device.

        Following is the general syntax of the command:

ostree pull-local /tmp/<ostree_repo> <branch_name>
            Copy to clipboard

        To find the `branch_name` for the command, run the following command:

ostree refs
            Copy to clipboard

        Output:

poky:qcs6490-rb3gen2-vision-kit

        Here, `qcs6490-rb3gen2-vision-kit` is an example branch name.
    4. Create the deployment on the Qualcomm device:

ostree admin deploy <branch_name>
            Copy to clipboard

        This creates the `ostree-2-poky.conf` configuration file in the `/boot/loader/entries/` directory.
For more information, see [Systemd boot counting - Successful boot](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#systemd-boot-successful-boot).
    5. Reboot the device:

reboot
            Copy to clipboard
    6. Check if the device booted with the newly created deployment:

ostree admin status
            Copy to clipboard

        Output:

\* poky 1e8a01bcc5cd9b3b34043db494ddcd01ec5c1c84312479a55253358a92250fa3.0

Version: 1.0

origin refspec: qcs6490-rb3gen2-vision-kit

poky 643b332dd72b345b5040a1decbe7e04bd2d208a04ba59417aa667c901c485504.0 (rollback)

Version: 1.0

origin refspec: poky:qcs6490-rb3gen2-vision-kit

        To verify the newly created deployment on the build host machine, check the deployment in the `<workspace>/build-<DISTRO>/tmp-glibc/work/<MACHINE>/<IMAGE>/ota-sysroot/ostree/deploy/poky/deploy` path. For example, `<workspace>/build-qcom-wayland/tmp-glibc/work/qcs6490-rb3gen2-vision-kit/qcom-multimedia-image/ota-sysroot/ostree/deploy/poky/deploy`.

- **Systemd-boot counting - Successful boot**

    Following table shows the systemd-boot counting on successful boot with description:

    | Workflow steps | Description |
    | --- | --- |
    | ![../../_images/OTA_systemd_boot.png](data:image/png;base64,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) | <ol class="arabic simple"><br><li><p>When OSTree deploys a new configuration, it creates a configuration file with a <code class="docutils literal notranslate"><span class="pre">+3</span></code> tag in the name, indicating the maximum retry count. This enables boot counting.</p></li><br><li><p>systemd-boot detects the <code class="docutils literal notranslate"><span class="pre">+3</span></code> tag in the entry file name and renames it to <code class="docutils literal notranslate"><span class="pre">ostree-conf+2-1.conf</span></code>, indicating that one boot attempt has started. After renaming the file, the boot process continues.</p></li><br><li><p>The <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot-generator</span></code> creates the <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code>, which is set to start when <code class="docutils literal notranslate"><span class="pre">boot-complete.target</span></code> is reached.</p></li><br><li><p>The <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> marks the new configuration as successful by removing the counter tags <code class="docutils literal notranslate"><span class="pre">+2-1</span></code> and renaming the file to <code class="docutils literal notranslate"><span class="pre">ostree-conf.conf</span></code>.</p></li><br></ol> |
- **Systemd boot counting - Unsuccessful boot and roll back**

    Following table shows the systemd-boot counting on unsuccessful boot and roll back with description:

    | Workflow steps | Description |
    | --- | --- |
    | ![../../_images/OTA_boot_counting.png](data:image/png;base64,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) | <ol class="arabic simple"><br><li><p>When OSTree deploys a new configuration, it creates a systemd configuration file with a <code class="docutils literal notranslate"><span class="pre">+3</span></code> tag in the name, indicating the maximum retry count, such as <code class="docutils literal notranslate"><span class="pre">ostree-boot+3.conf</span></code>. This enables boot counting.</p></li><br><li><p>systemd-boot detects the <code class="docutils literal notranslate"><span class="pre">+3</span></code> tag in the configuration file name and renames it to <code class="docutils literal notranslate"><span class="pre">ostree-boot+2-1.conf</span></code>, indicating that one boot attempt has started. After renaming the file, the boot process continues.</p></li><br><li><p>The <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot-generator</span></code> creates the <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code>, which starts when <code class="docutils literal notranslate"><span class="pre">boot-complete.target</span></code> is reached. If there are any failures during the Linux boot-up, the <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> does not remove the <code class="docutils literal notranslate"><span class="pre">+2-1</span></code> counter tags from the configuration file.</p></li><br><li><p>On the subsequent boot, systemd-boot detects the <code class="docutils literal notranslate"><span class="pre">+2-1</span></code> tag in the configuration file name, renames the file to <code class="docutils literal notranslate"><span class="pre">ostree-boot+1-2.conf</span></code>, and tries to boot with it.</p></li><br><li><p>If the Linux bootup fails on the second attempt, the <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> does not remove the counter tags <code class="docutils literal notranslate"><span class="pre">+1-2</span></code> from the configuration file.</p></li><br><li><p>On the next boot, systemd-boot detects the <code class="docutils literal notranslate"><span class="pre">+1-2</span></code> tag in the configuration file name, renames the file to <code class="docutils literal notranslate"><span class="pre">ostree-boot+0-3.conf</span></code>, and tries to boot with it. This is the last attempt to boot Linux deployment.</p></li><br><li><p>If the device fails to bootup Linux during the third attempt, the <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> does not remove the counter tags <code class="docutils literal notranslate"><span class="pre">+0-3</span></code> from the configuration file.</p></li><br><li><p>On the subsequent boot, systemd-boot finds the <code class="docutils literal notranslate"><span class="pre">+0-3</span></code> tag in the configuration file name. As the counter has reached zero, the entry (configuration file) is considered bad. The systemd-boot reverts to an earlier version by trying the valid configuration file entry.</p></li><br></ol> |
- **Usrmerge**

    The usrmerge feature in Linux simplifies the filesystem layout by merging certain directories under `/usr` path.
It combines `/bin`, `/sbin`, and `/lib` with `/usr/bin`, `/usr/sbin`, and `/usr/lib`, respectively.

    With usrmerge, executables and libraries usually found in `/bin`, `/sbin`, and `/lib` are placed in `/usr/bin`, `/usr/sbin`, and `/usr/lib`.
The original directories become symbolic links to their /usr counterparts. This unified structure makes maintenance easier and reduces
redundancy, as there is only one location for binaries and libraries instead of separate location for root-level and `/usr` directories.
Symbolic links ensure compatibility, so scripts and software that reference paths like `/bin` will still work.

    Linux distributions are adopting usrmerge to align with the filesystem hierarchy standard (FHS) recommendations and simplify root
filesystems, especially in containerized and embedded systems.

    Distributions like Debian, Ubuntu, and Fedora have adopted usrmerge as part of their system layout, making it a standard in recent versions.
The transition generally involves creating symbolic links and moving any remaining files from the original directories to their `/usr` equivalents.

    In summary, the usrmerge feature consolidates the Linux filesystem, making it more manageable, modernized, and aligned with the evolving
needs of system management and containerization.
- **Management of** `/var`, `/home`, `/media`, `/mnt`, `/opt`, `/srv`, **and** `/usr` **in Qualcomm Linux**

> 
> 
> OSTree considers `/var` as a persistent directory. This means user/run-time
> created contents under `/var` remian untouched by OSTree and persist across OTA updates.
> For more information, see [OSTree Overview](https://ostreedev.github.io/ostree/introduction/).
> 
> 
> Other directories that remain untouched by OSTree during an
> OTA update are /home, /media, /mnt, /opt and /srv. These directories are mapped by
> OSTree as symbolic links as follows:
> 
>     - `/home` is a symbolic link to `/var/rootdirs/home`
>     - `/media` is a symbolic link to `/var/rootdirs/media`
>     - `/mnt` is a symbolic link to `/var/rootdirs/mnt`
>     - `/opt` is a symbolic link to `/var/rootdirs/opt`
>     - `/srv` is a symbolic link to `/var/rootdirs/srv`
> 
> 
> 
> Any run-time data stored under /home, /media, /mnt, /opt, /srv, and /var stays persistent
> across OTA updates.
> 
> 
> To maintain a clean and consistent filesystem, OSTree recommends not to install any artifacts under
> the above directories at build-time. Any artifacts installed in these directories during build-time are
> not packaged into the rootfs image generated by the Qualcomm Linux build command, that is, `bitbake <image recipe>`.
> 
> 
> 
> - Run time creation of files and directories under persistent paths may be handled as follows:
>     - 1. The files or directories can be created by the process at runtime when it is required.
>     2. Paths under `/run/`, `/var/lib/`, `/var/cache/` and `/var/log/` can be created
> from respective systemd unit files. Here is a [reference](https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#RuntimeDirectory=).
>     3. Files, symbolic links and directories can be created at bootup using [systemd-tmpfiles](https://www.freedesktop.org/software/systemd/man/latest/systemd-tmpfiles-setup.service.html).
> 
> 
> 
> 
> OSTree creates a read-only bind mount at `/usr`, ensuring that the core operating system files remain immutable by
> users. This approach helps to maintain system integrity and security. The /usr mount-point is used by OSTree to deploy next update.
> 
> 
> 
> > 
> > 
> > Note
> > 
> >     - OSTree allows files and directories to be installed under the `/var/local` path at build time.
> >     - Although OSTree preserves the contents installed under `/usr` during build time, it does not package the contents installed under the `/usr/local` subdirectory into the rootfs image.
> 
> 
> 
> In Qualcomm Linux with OSTree enabled, the `/etc` directory is managed in a way that allows for both system updates and local customizations.
> 
> 
> 
> > 
> > 
> > - The `/etc` directory is mutable, it can be modified at runtime for maintaining system configurations that need to persist across updates.
> >     - OSTree supports merging configuration files from the `/usr/etc` directory to `/etc`. This allows OSTree to update default configurations while preserving any local changes made.
> >     - When an update is applied, OSTree performs a three-way merge for configuration files in `/etc` using the original version of the file, version of the file in new update and locally modified version of the file.
> >     - If there are conflicts during the merge process, OSTree retains the modifications that are made at run-time. This helps maintain system stability and ensures that critical configurations are not overwritten.
- **SOTA distro feature**

    The software over-the-air (SOTA) distro feature enables remote updates for embedded systems and IoT devices. It integrates tools like OSTree for system updates,
allowing devices to receive and install updates without physical access. This feature is included in the Qualcomm Linux reference distribution configuration as follows:

> 
> 
> DISTRO_FEATURES:append = " pam overlayfs acl xattr selinux ptest security virtualization tpm usrmerge sota"
>         Copy to clipboard

    The SOTA distro feature is found in the `meta-qcom-distro/conf/distro/include/qcom-base.inc` file.

## Handle out-of-tree kernel modules and device tree using recipes

To build an out-of-tree kernel module, see [Add kernel
module](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-3/customize.html#add-kernel-module).

Note

Qualcomm Linux supports out-of-kernel device tree overlays only for the `custom` variant.

For device-tree/device-tree blob management, see [Platform
support](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-3/customize.html#platform-support_0).

## Boot Linux operating system from SD card

Qualcomm development kits can be booted up from the SD Card.

Prepare the SD card by flashing it with `EFI.bin` and `system.img`. Insert the prepared SD card into the SD card slot of the development kit. The development kit boots up from the SD card, which contains a backup or redundant operating system to ensure continuous operation.

To boot Qualcomm development kits from an SD card, follow these steps:

1. Insert the SD card into the Qualcomm development kit. Verify the device node for the inserted SD card, for example, `/dev/mmcblk1` or `/dev/mmcblk2`.
2. To format the SD card, run the `mkfs.ext4 <sdcard slot>` command on the UART shell.

    In the following example, the dev node for the SD card is `/dev/mmcblk1`.

mkfs.ext4 /dev/mmcblk1
        Copy to clipboard

    Output:

mke2fs 1.46.5 (30-Dec-2021)
Found a dos partition table in /dev/mmcblk1
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 3889536 4k blocks and 972944 inodes
Filesystem UUID: 069e04f8-0b72-4a94-aa93-f5ec03bea38d
Superblock backups stored on blocks:

> 
> 
> 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
3. Use the `fdisk` command to create two partitions on the SD card to copy `efi.bin` and `system.img`.

    1. Create the first partition as `vfat` type to copy `efi.bin`.

        To create the partition, run the following command (for example, the dev node is `/dev/mmcblk1`):

fdisk /dev/mmcblk1
            Copy to clipboard

        Output:

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

The device contains ‘ext4’ signature and it will be removed by a write command.
See fdisk(8) man page and –wipe option for more details.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xa5fa6b03.

Command (m for help): n
Partition type

> 
> 
> p   primary (0 primary, 0 extended, 4 free)
> e   extended (container for logical partitions)

Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-31116287, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31116287, default 31116287): +512M

Created a new partition 1 of type ‘Linux’ and of size 512 MiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

        To convert the partiton to `vfat` type, run the following command:

mkfs.vfat /dev/mmcblk1p1
            Copy to clipboard

        Output:

mkfs.fat 4.2 (2021-01-31)

> 
> 
> Note
> 
> 
> In this example, leave the `First sector` field empty and ensure that the `Last sector`
> is large enough to copy `efi.bin`.

    2. Create the second partition as `ext4` type to copy `system.img` as follows:

        To create the partition, run the following command (for example, the dev node is `/dev/mmcblk1`):

fdisk /dev/mmcblk1
            Copy to clipboard

        Output:

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type

> 
> 
> p   primary (1 primary, 0 extended, 3 free)
> e   extended (container for logical partitions)

Select (default p): p
Partition number (2-4, default 2): 2
First sector (1050624-31116287, default 1050624):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-31116287, default 31116287): +10G

Created a new partition 2 of type ‘Linux’ and of size 10 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

        To convert the partiton to `ext4` type, run the following command:

mkfs.ext4 /dev/mmcblk1p2
            Copy to clipboard

        Output:

mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 9e470d01-77fe-4382-a273-ab8b022bdd8b
Superblock backups stored on blocks:

> 
> 
> 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

> 
> 
> Note
> 
> 
> In this example, leave the `First sector` field empty and ensure that the `Last sector` is large enough to copy `system.img`.
4. Verify the partitions created as follows:

lsblk -f /dev/mmcblk1
        Copy to clipboard

    Output:

NAME FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
mmcblk1
|
[|](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#id5)-mmcblk1p1
|    vfat               1EAC-8FF8
[`](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html#id7)-mmcblk1p2

> 
> 
> ext4               9e470d01-77fe-4382-a273-ab8b022bdd8b
5. Copy `efi.bin` and `system.img` from the successfully built Qualcomm Linux image on the host machine
to the device using scp command.

scp -r <efi.bin> <IP_address>:<path>
        scp -r <system.img> <IP_address>:<path>
        Copy to clipboard
6. To copy `efi.bin` and `system.img` from the device to the partitions on the SD card, run the following commands on the device:

    - `dd if=<path>/efi.bin of=<sdcard slot> bs=4M status=progress`
    - `dd if=<path>/system.img of=<sdcard slot> bs=4M status=progress`

    To copy both images from the `/tmp` path on the device, following is an example of how to copy them to the SD card:

dd if=/tmp/efi.bin of=/dev/mmcblk1p1 bs=4M status=progress
        
        dd if=/tmp/system.img of=/dev/mmcblk1p2 bs=4M status=progress
        Copy to clipboard

Note

In this command, the dev node for the SD card is `/dev/mmcblk1`.
7. The SD card is ready to boot the images. If the EFI partition on UFS is corrupted or systemd-boot fails, the device boots from the SD card to ensure continuous operation.

Note

SELinux is disabled on the Qualcomm Linux image, which is flashed on the SD card.

## Use of efivar tool

The efivar tool manages UEFI environment variables stored in the non-volatile firmware storage. Use these variables to configure the UEFI firmware and its environment.

The efivars are key-value pairs stored in the UEFI firmware. They hold settings for boot configuration, system state, and other essential parameters. The efivars manage boot entries and firmware settings, ensuring the system boots correctly and maintains its configuration.

To interact with the UEFI environment variables, use the following command:

> 
> 
> efivar [-n name] [-f file] [-p] [-w]
>     Copy to clipboard
> 
> 
> Command options:
> 
> 
> -n name: Specify the name of the UEFI variable.
>     -f file: Load or save variable contents from a file.
>     -p: Print the value of the specified UEFI variable.
>     -w: Write to the specified UEFI variable.
>     Copy to clipboard

- **Update the OsIndications variable**

    Following are the steps to update the OsIndications variable and verify the value of the EFI variable:

    1. Create a `data1.hex` file containing a specific byte sequence `04 00 00 00 00 00 00 00`.

echo -e -n "\x4\x0\x0\x0\x0\x0\x0\x0" > data1.hex
            Copy to clipboard
    2. Write the contents of `data1.hex` to the EFI variable `8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications`.

efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -f data1.hex -w
            Copy to clipboard
    3. To verify the value of the EFI variable `8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications`, run the following command:

efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -p
            Copy to clipboard

        Output of the previous command:

> 
> 
> GUID: 8be4df61-93ca-11d2-aa0d-00e098032b8c
> Name: “OsIndications”
> Attributes:
> 
> 
> 
> > 
> > 
> > Non-Volatile
> > Boot Service Access
> > Runtime Service Access
> 
> 
> 
> Value:
> 00000000  04 00 00 00 00 00 00 00

For more information, see [efivars Manual](https://man.freebsd.org/cgi/man.cgi?query=efivar&amp;sektion=8).

Last Published: Dec 30, 2024

[Previous Topic
Overview](https://docs.qualcomm.com/bundle/publicresource/80-70017-27/topics/intro_yocto_linux_qualcomm.md) [Next Topic
User customizations](https://docs.qualcomm.com/bundle/publicresource/80-70017-27/topics/user_customizations.md)

Source: [https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70017-27/topic/platform_software_features.html)