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. |