Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| software:linux:yocto:getting_started_cpp [2020-03-25 14:44] – angelegt mlammerich | software:linux:yocto:getting_started_cpp [2024-04-23 13:08] (aktuell) – Moritz Lammerich | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ======= Getting | + | ======= Getting |
| - | This guide will go through setting up a build environment and building an x86_64 image, and adding a small "hello world" application to it. First the application will be compiled using the [[ .:sdk | SDK ]], then it will be added to the image directly by creating a [[ .:recipes | recipe | + | This guide will go through setting up a build environment and building an x86_64 image, and adding a small "hello world" application to it. This page is a summary of the information from [[software:linux: |
| - | ===== Setting up the build environment | + | ===== Setting up the Build Environment |
| Create a directory in a suitable place to store everything related to this build. | Create a directory in a suitable place to store everything related to this build. | ||
| This guide will assume everything is in a directory called '' | This guide will assume everything is in a directory called '' | ||
| - | Next, clone '' | + | Next, clone '' |
| < | < | ||
| - | git clone -b yocto-3.0.2 | + | git clone -b kirkstone |
| </ | </ | ||
| Zeile 18: | Zeile 18: | ||
| </ | </ | ||
| - | Now we can initialize | + | Now we can initialize yocto using: |
| < | < | ||
| . poky/ | . poky/ | ||
| </ | </ | ||
| - | This will populate the build directory with all necessary files and give you access to '' | + | This will populate the build directory with all necessary files and give you access to '' |
| - | ==== Setting the machine | + | ==== Setting the Machine |
| - | Setting the machine tells bitbake what hardware to build for. This build will be a generic x86_64 | + | Setting the machine tells bitbake what hardware to build for. This build will be a 64bit qemu image, so we can set the machine to '' |
| Open '' | Open '' | ||
| Zeile 33: | Zeile 33: | ||
| </ | </ | ||
| - | and add this line to set the machhine: | + | and add this line to set the machine: |
| < | < | ||
| - | MACHINE = "genericx86-64" | + | MACHINE = "qemux86-64" |
| </ | </ | ||
| The build environment is now set up. | The build environment is now set up. | ||
| - | ===== Building an image ===== | + | ===== Building an Image ===== |
| You can now build an image. This command will build a minimal image provided by '' | You can now build an image. This command will build a minimal image provided by '' | ||
| Zeile 47: | Zeile 47: | ||
| bitbake core-image-minimal | bitbake core-image-minimal | ||
| </ | </ | ||
| + | |||
| + | Once the image is built, it can be run in qemu using | ||
| + | |||
| + | < | ||
| + | runqemu qemux86-64 nographic | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | |||
| + | The default login is '' | ||
| + | |||
| + | ===== Creating a Hello World C++ Application ===== | ||
| + | |||
| + | This section will show you how to create a hello world application in C++ with Cmake. | ||
| + | |||
| + | First, create a directory in your yocto folder. This will contain the application itself. | ||
| + | The location is arbitrary, and was chosen merely for convenience. It could be anywhere. | ||
| + | Assuming you are still in the '' | ||
| + | |||
| + | < | ||
| + | mkdir ../ | ||
| + | </ | ||
| + | |||
| + | Next, create a '' | ||
| + | |||
| + | < | ||
| + | cd ../ | ||
| + | nano helloworld.cpp | ||
| + | </ | ||
| + | |||
| + | with the following content: | ||
| + | |||
| + | < | ||
| + | # | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | std::cout << "Hello World!\n"; | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Now create a '' | ||
| + | |||
| + | < | ||
| + | nano CMakeLists.txt | ||
| + | </ | ||
| + | |||
| + | CMakeLists.txt | ||
| + | < | ||
| + | cmake_minimum_required(VERSION 3.5) | ||
| + | |||
| + | project(yocto-test LANGUAGES CXX) | ||
| + | |||
| + | add_executable(hello helloworld.cpp) | ||
| + | |||
| + | install(TARGETS hello DESTINATION bin) | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Optional: Verifying that the Application Works ==== | ||
| + | |||
| + | This is an optional step to verify the application itself is built correctly before adding it to the image. | ||
| + | Create a '' | ||
| + | Then execute '' | ||
| + | application by running '' | ||
| + | Now there should be a '' | ||
| + | After confirming it works, change back to '' | ||
| + | |||
| + | < | ||
| + | mkdir build | ||
| + | cd build | ||
| + | cmake .. | ||
| + | make | ||
| + | ./hello | ||
| + | cd ../../build | ||
| + | </ | ||
| + | |||
| + | ===== Creating a Recipe for the application ===== | ||
| + | |||
| + | We use [[software: | ||
| + | < | ||
| + | devtool add ../ | ||
| + | </ | ||
| + | |||
| + | This should finish with a message similar to this one: | ||
| + | < | ||
| + | INFO: Recipe / | ||
| + | </ | ||
| + | |||
| + | This means devtool ran successfully and created a recipe at the specified location. | ||
| + | |||
| + | To test whether this recipe works, build it by running bitbake: | ||
| + | |||
| + | < | ||
| + | bitbake helloworld | ||
| + | </ | ||
| + | |||
| + | This should run without errors and print something like this when it's finished: | ||
| + | |||
| + | < | ||
| + | NOTE: Tasks Summary: Attempted 506 tasks of which 497 didn't need to be rerun and all succeeded. | ||
| + | </ | ||
| + | |||
| + | This means the package provided by the recipe was built successfully. | ||
| + | |||
| + | ===== Adding the Recipe to the Image ===== | ||
| + | |||
| + | Now that we have a recipe, we need to add it to the image to test it out. | ||
| + | Adding packages to recipes is done in '' | ||
| + | |||
| + | Edit '' | ||
| + | < | ||
| + | nano conf/ | ||
| + | </ | ||
| + | |||
| + | and add the following: | ||
| + | < | ||
| + | CORE_IMAGE_EXTRA_INSTALL += " | ||
| + | </ | ||
| + | |||
| + | Rebuild the image | ||
| + | < | ||
| + | bitbake core-image-minimal | ||
| + | </ | ||
| + | |||
| + | And run qemu | ||
| + | |||
| + | < | ||
| + | runqemu qemux86-64 nographic | ||
| + | </ | ||
| + | |||
| + | Log in as '' | ||
| + | < | ||
| + | root@qemux86-64: | ||
| + | Hello World! | ||
| + | </ | ||
| + | |||
| + | Congratulations! You have now developed your own C++ application and added it to a yocto image. | ||