diff options
| -rw-r--r-- | bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.rst | 127 |
1 files changed, 60 insertions, 67 deletions
diff --git a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.rst b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.rst index 722dc5a2cc..c8251d2a04 100644 --- a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.rst +++ b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.rst | |||
| @@ -18,28 +18,32 @@ it. | |||
| 18 | Obtaining BitBake | 18 | Obtaining BitBake |
| 19 | ================= | 19 | ================= |
| 20 | 20 | ||
| 21 | See the :ref:`bitbake-user-manual/bitbake-user-manual-hello:obtaining bitbake` section for | 21 | See the :ref:`bitbake-user-manual/bitbake-user-manual-intro:obtaining bitbake` section for |
| 22 | information on how to obtain BitBake. Once you have the source code on | 22 | information on how to obtain BitBake. Once you have the source code on |
| 23 | your machine, the BitBake directory appears as follows:: | 23 | your machine, the BitBake directory appears as follows:: |
| 24 | 24 | ||
| 25 | $ ls -al | 25 | $ ls -al |
| 26 | total 100 | 26 | total 108 |
| 27 | drwxrwxr-x. 9 wmat wmat 4096 Jan 31 13:44 . | 27 | drwxr-xr-x 9 fawkh 10000 4096 feb 24 12:10 . |
| 28 | drwxrwxr-x. 3 wmat wmat 4096 Feb 4 10:45 .. | 28 | drwx------ 36 fawkh 10000 4096 mar 2 17:00 .. |
| 29 | -rw-rw-r--. 1 wmat wmat 365 Nov 26 04:55 AUTHORS | 29 | -rw-r--r-- 1 fawkh 10000 365 feb 24 12:10 AUTHORS |
| 30 | drwxrwxr-x. 2 wmat wmat 4096 Nov 26 04:55 bin | 30 | drwxr-xr-x 2 fawkh 10000 4096 feb 24 12:10 bin |
| 31 | drwxrwxr-x. 4 wmat wmat 4096 Jan 31 13:44 build | 31 | -rw-r--r-- 1 fawkh 10000 16501 feb 24 12:10 ChangeLog |
| 32 | -rw-rw-r--. 1 wmat wmat 16501 Nov 26 04:55 ChangeLog | 32 | drwxr-xr-x 2 fawkh 10000 4096 feb 24 12:10 classes |
| 33 | drwxrwxr-x. 2 wmat wmat 4096 Nov 26 04:55 classes | 33 | drwxr-xr-x 2 fawkh 10000 4096 feb 24 12:10 conf |
| 34 | drwxrwxr-x. 2 wmat wmat 4096 Nov 26 04:55 conf | 34 | drwxr-xr-x 5 fawkh 10000 4096 feb 24 12:10 contrib |
| 35 | drwxrwxr-x. 3 wmat wmat 4096 Nov 26 04:55 contrib | 35 | drwxr-xr-x 6 fawkh 10000 4096 feb 24 12:10 doc |
| 36 | -rw-rw-r--. 1 wmat wmat 17987 Nov 26 04:55 COPYING | 36 | drwxr-xr-x 8 fawkh 10000 4096 mar 2 16:26 .git |
| 37 | drwxrwxr-x. 3 wmat wmat 4096 Nov 26 04:55 doc | 37 | -rw-r--r-- 1 fawkh 10000 31 feb 24 12:10 .gitattributes |
| 38 | -rw-rw-r--. 1 wmat wmat 69 Nov 26 04:55 .gitignore | 38 | -rw-r--r-- 1 fawkh 10000 392 feb 24 12:10 .gitignore |
| 39 | -rw-rw-r--. 1 wmat wmat 849 Nov 26 04:55 HEADER | 39 | drwxr-xr-x 13 fawkh 10000 4096 feb 24 12:11 lib |
| 40 | drwxrwxr-x. 5 wmat wmat 4096 Jan 31 13:44 lib | 40 | -rw-r--r-- 1 fawkh 10000 1224 feb 24 12:10 LICENSE |
| 41 | -rw-rw-r--. 1 wmat wmat 195 Nov 26 04:55 MANIFEST.in | 41 | -rw-r--r-- 1 fawkh 10000 15394 feb 24 12:10 LICENSE.GPL-2.0-only |
| 42 | -rw-rw-r--. 1 wmat wmat 2887 Nov 26 04:55 TODO | 42 | -rw-r--r-- 1 fawkh 10000 1286 feb 24 12:10 LICENSE.MIT |
| 43 | -rw-r--r-- 1 fawkh 10000 229 feb 24 12:10 MANIFEST.in | ||
| 44 | -rw-r--r-- 1 fawkh 10000 2413 feb 24 12:10 README | ||
| 45 | -rw-r--r-- 1 fawkh 10000 43 feb 24 12:10 toaster-requirements.txt | ||
| 46 | -rw-r--r-- 1 fawkh 10000 2887 feb 24 12:10 TODO | ||
| 43 | 47 | ||
| 44 | At this point, you should have BitBake cloned to a directory that | 48 | At this point, you should have BitBake cloned to a directory that |
| 45 | matches the previous listing except for dates and user names. | 49 | matches the previous listing except for dates and user names. |
| @@ -52,7 +56,7 @@ directory to where your local BitBake files are and run the following | |||
| 52 | command:: | 56 | command:: |
| 53 | 57 | ||
| 54 | $ ./bin/bitbake --version | 58 | $ ./bin/bitbake --version |
| 55 | BitBake Build Tool Core version 1.23.0, bitbake version 1.23.0 | 59 | BitBake Build Tool Core version 2.3.1 |
| 56 | 60 | ||
| 57 | The console output tells you what version | 61 | The console output tells you what version |
| 58 | you are running. | 62 | you are running. |
| @@ -130,23 +134,8 @@ Following is the complete "Hello World" example. | |||
| 130 | directory. Run the ``bitbake`` command and see what it does:: | 134 | directory. Run the ``bitbake`` command and see what it does:: |
| 131 | 135 | ||
| 132 | $ bitbake | 136 | $ bitbake |
| 133 | The BBPATH variable is not set and bitbake did not | 137 | ERROR: The BBPATH variable is not set and bitbake did not find a conf/bblayers.conf file in the expected location. |
| 134 | find a conf/bblayers.conf file in the expected location. | ||
| 135 | Maybe you accidentally invoked bitbake from the wrong directory? | 138 | Maybe you accidentally invoked bitbake from the wrong directory? |
| 136 | DEBUG: Removed the following variables from the environment: | ||
| 137 | GNOME_DESKTOP_SESSION_ID, XDG_CURRENT_DESKTOP, | ||
| 138 | GNOME_KEYRING_CONTROL, DISPLAY, SSH_AGENT_PID, LANG, no_proxy, | ||
| 139 | XDG_SESSION_PATH, XAUTHORITY, SESSION_MANAGER, SHLVL, | ||
| 140 | MANDATORY_PATH, COMPIZ_CONFIG_PROFILE, WINDOWID, EDITOR, | ||
| 141 | GPG_AGENT_INFO, SSH_AUTH_SOCK, GDMSESSION, GNOME_KEYRING_PID, | ||
| 142 | XDG_SEAT_PATH, XDG_CONFIG_DIRS, LESSOPEN, DBUS_SESSION_BUS_ADDRESS, | ||
| 143 | _, XDG_SESSION_COOKIE, DESKTOP_SESSION, LESSCLOSE, DEFAULTS_PATH, | ||
| 144 | UBUNTU_MENUPROXY, OLDPWD, XDG_DATA_DIRS, COLORTERM, LS_COLORS | ||
| 145 | |||
| 146 | The majority of this output is specific to environment variables that | ||
| 147 | are not directly relevant to BitBake. However, the very first | ||
| 148 | message regarding the :term:`BBPATH` variable and the | ||
| 149 | ``conf/bblayers.conf`` file is relevant. | ||
| 150 | 139 | ||
| 151 | When you run BitBake, it begins looking for metadata files. The | 140 | When you run BitBake, it begins looking for metadata files. The |
| 152 | :term:`BBPATH` variable is what tells BitBake where | 141 | :term:`BBPATH` variable is what tells BitBake where |
| @@ -179,20 +168,14 @@ Following is the complete "Hello World" example. | |||
| 179 | ``bitbake`` command again:: | 168 | ``bitbake`` command again:: |
| 180 | 169 | ||
| 181 | $ bitbake | 170 | $ bitbake |
| 182 | ERROR: Traceback (most recent call last): | 171 | ERROR: Unable to parse /home/scott-lenovo/bitbake/lib/bb/parse/__init__.py |
| 183 | File "/home/scott-lenovo/bitbake/lib/bb/cookerdata.py", line 163, in wrapped | 172 | Traceback (most recent call last): |
| 184 | return func(fn, *args) | 173 | File "/home/scott-lenovo/bitbake/lib/bb/parse/__init__.py", line 127, in resolve_file(fn='conf/bitbake.conf', d=<bb.data_smart.DataSmart object at 0x7f22919a3df0>): |
| 185 | File "/home/scott-lenovo/bitbake/lib/bb/cookerdata.py", line 173, in parse_config_file | 174 | if not newfn: |
| 186 | return bb.parse.handle(fn, data, include) | 175 | > raise IOError(errno.ENOENT, "file %s not found in %s" % (fn, bbpath)) |
| 187 | File "/home/scott-lenovo/bitbake/lib/bb/parse/__init__.py", line 99, in handle | 176 | fn = newfn |
| 188 | return h['handle'](fn, data, include) | 177 | FileNotFoundError: [Errno 2] file conf/bitbake.conf not found in <projectdirectory> |
| 189 | File "/home/scott-lenovo/bitbake/lib/bb/parse/parse_py/ConfHandler.py", line 120, in handle | 178 | |
| 190 | abs_fn = resolve_file(fn, data) | ||
| 191 | File "/home/scott-lenovo/bitbake/lib/bb/parse/__init__.py", line 117, in resolve_file | ||
| 192 | raise IOError("file %s not found in %s" % (fn, bbpath)) | ||
| 193 | IOError: file conf/bitbake.conf not found in /home/scott-lenovo/hello | ||
| 194 | |||
| 195 | ERROR: Unable to parse conf/bitbake.conf: file conf/bitbake.conf not found in /home/scott-lenovo/hello | ||
| 196 | 179 | ||
| 197 | This sample output shows that BitBake could not find the | 180 | This sample output shows that BitBake could not find the |
| 198 | ``conf/bitbake.conf`` file in the project directory. This file is | 181 | ``conf/bitbake.conf`` file in the project directory. This file is |
| @@ -254,18 +237,14 @@ Following is the complete "Hello World" example. | |||
| 254 | exists, you can run the ``bitbake`` command again:: | 237 | exists, you can run the ``bitbake`` command again:: |
| 255 | 238 | ||
| 256 | $ bitbake | 239 | $ bitbake |
| 257 | ERROR: Traceback (most recent call last): | 240 | ERROR: Unable to parse /home/scott-lenovo/bitbake/lib/bb/parse/parse_py/BBHandler.py |
| 258 | File "/home/scott-lenovo/bitbake/lib/bb/cookerdata.py", line 163, in wrapped | 241 | Traceback (most recent call last): |
| 259 | return func(fn, *args) | 242 | File "/home/scott-lenovo/bitbake/lib/bb/parse/parse_py/BBHandler.py", line 67, in inherit(files=['base'], fn='configuration INHERITs', lineno=0, d=<bb.data_smart.DataSmart object at 0x7fab6815edf0>): |
| 260 | File "/home/scott-lenovo/bitbake/lib/bb/cookerdata.py", line 177, in _inherit | 243 | if not os.path.exists(file): |
| 261 | bb.parse.BBHandler.inherit(bbclass, "configuration INHERITs", 0, data) | 244 | > raise ParseError("Could not inherit file %s" % (file), fn, lineno) |
| 262 | File "/home/scott-lenovo/bitbake/lib/bb/parse/parse_py/BBHandler.py", line 92, in inherit | 245 | |
| 263 | include(fn, file, lineno, d, "inherit") | 246 | bb.parse.ParseError: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass |
| 264 | File "/home/scott-lenovo/bitbake/lib/bb/parse/parse_py/ConfHandler.py", line 100, in include | 247 | |
| 265 | raise ParseError("Could not %(error_out)s file %(fn)s" % vars(), oldfn, lineno) | ||
| 266 | ParseError: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass | ||
| 267 | |||
| 268 | ERROR: Unable to parse base: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass | ||
| 269 | 248 | ||
| 270 | In the sample output, | 249 | In the sample output, |
| 271 | BitBake could not find the ``classes/base.bbclass`` file. You need | 250 | BitBake could not find the ``classes/base.bbclass`` file. You need |
| @@ -284,7 +263,10 @@ Following is the complete "Hello World" example. | |||
| 284 | $ mkdir classes | 263 | $ mkdir classes |
| 285 | 264 | ||
| 286 | Move to the ``classes`` directory and then create the | 265 | Move to the ``classes`` directory and then create the |
| 287 | ``base.bbclass`` file by inserting this single line: addtask build | 266 | ``base.bbclass`` file by inserting this single line:: |
| 267 | |||
| 268 | addtask build | ||
| 269 | |||
| 288 | The minimal task that BitBake runs is the ``do_build`` task. This is | 270 | The minimal task that BitBake runs is the ``do_build`` task. This is |
| 289 | all the example needs in order to build the project. Of course, the | 271 | all the example needs in order to build the project. Of course, the |
| 290 | ``base.bbclass`` can have much more depending on which build | 272 | ``base.bbclass`` can have much more depending on which build |
| @@ -328,10 +310,19 @@ Following is the complete "Hello World" example. | |||
| 328 | BBFILES += "${LAYERDIR}/*.bb" | 310 | BBFILES += "${LAYERDIR}/*.bb" |
| 329 | BBFILE_COLLECTIONS += "mylayer" | 311 | BBFILE_COLLECTIONS += "mylayer" |
| 330 | BBFILE_PATTERN_mylayer := "^${LAYERDIR_RE}/" | 312 | BBFILE_PATTERN_mylayer := "^${LAYERDIR_RE}/" |
| 313 | LAYERSERIES_CORENAMES = "hello_world_example" | ||
| 314 | LAYERSERIES_COMPAT_mylayer = "hello_world_example" | ||
| 331 | 315 | ||
| 332 | For information on these variables, click on :term:`BBFILES`, | 316 | For information on these variables, click on :term:`BBFILES`, |
| 333 | :term:`LAYERDIR`, :term:`BBFILE_COLLECTIONS` or :term:`BBFILE_PATTERN_mylayer <BBFILE_PATTERN>` | 317 | :term:`LAYERDIR`, :term:`BBFILE_COLLECTIONS`, :term:`BBFILE_PATTERN_mylayer <BBFILE_PATTERN>` |
| 334 | to go to the definitions in the glossary. | 318 | or :term:`LAYERSERIES_COMPAT` to go to the definitions in the glossary. |
| 319 | |||
| 320 | .. note:: | ||
| 321 | |||
| 322 | We are setting both LAYERSERIES_CORENAMES and LAYERSERIES_COMPAT in this particular case, because we | ||
| 323 | are using bitbake without OpenEmbedded. | ||
| 324 | You should usually just use LAYERSERIES_COMPAT to specify the OE-Core versions for which your layer | ||
| 325 | is compatible, and add the meta-openembedded layer to your project. | ||
| 335 | 326 | ||
| 336 | You need to create the recipe file next. Inside your layer at the | 327 | You need to create the recipe file next. Inside your layer at the |
| 337 | top-level, use an editor and create a recipe file named | 328 | top-level, use an editor and create a recipe file named |
| @@ -389,12 +380,14 @@ Following is the complete "Hello World" example. | |||
| 389 | target:: | 380 | target:: |
| 390 | 381 | ||
| 391 | $ bitbake printhello | 382 | $ bitbake printhello |
| 383 | Loading cache: 100% | | ||
| 384 | Loaded 0 entries from dependency cache. | ||
| 392 | Parsing recipes: 100% |##################################################################################| | 385 | Parsing recipes: 100% |##################################################################################| |
| 393 | Time: 00:00:00 | ||
| 394 | Parsing of 1 .bb files complete (0 cached, 1 parsed). 1 targets, 0 skipped, 0 masked, 0 errors. | 386 | Parsing of 1 .bb files complete (0 cached, 1 parsed). 1 targets, 0 skipped, 0 masked, 0 errors. |
| 395 | NOTE: Resolving any missing task queue dependencies | 387 | NOTE: Resolving any missing task queue dependencies |
| 396 | NOTE: Preparing RunQueue | 388 | Initialising tasks: 100% |###############################################################################| |
| 397 | NOTE: Executing RunQueue Tasks | 389 | NOTE: No setscene tasks |
| 390 | NOTE: Executing Tasks | ||
| 398 | ******************** | 391 | ******************** |
| 399 | * * | 392 | * * |
| 400 | * Hello, World! * | 393 | * Hello, World! * |
