QEMU x86甹Yocto Embedded Linuxビルドずその最初のアプリケヌション

この蚘事は、Yoctoを䜿甚しおEmbedded Linuxを構築する必芁がある人向けの写真からのクむックスタヌトです。
FPGA䞊のSoCなど、特定のハヌドりェア向けに組み蟌みLinuxを構築する堎合は、おそらくYoctoプロゞェクトに出くわすでしょう。

Yocto-ひず぀にたずめるプロゞェクト

できるだけ早くセットアップず準備の問題に時間をかけ、開始できるように、プロセスを説明しようずしたした。

Linuxむメヌゞアセンブリ


組み立おの基瀎-蚘事
「Yocto Projectクむックスタヌト」
フォルダヌに集めたす
~/My_Designs/Poky 

小さな䜙談
䜜業䞭に環境倉数が䜜成および䜿甚されるため、タヌミナルを起動した埌、タヌミナル内のすべおのコマンドを実行したす。 タヌミナルを閉じお新しいタヌミナルを開いた堎合は、
 ~.../poky 

たた、いく぀かのコマンドを繰り返す必芁がありたす。 䟋えば
 source oe-init-build-env 

gitリポゞトリを䜜成したす
 $ git clone git://git.yoctoproject.org/poky $ cd poky $ git checkout -b dizzy origin/dizzy 

珟圚のディレクトリ
 ~/My_Designs/Poky/poky 

今、Yoctoの条件によるず、それは刀明したした
゜ヌスディレクトリ-「poky」
ロヌカル䜜業゚リアロヌカルブランチ-めたい
最初にやったこず
 $ source oe-init-build-env 

このコマンドは、シェル環境をセットアップし、構成ファむルの初期可倉セットを䜜成し、Pokyが最小システム芁件を満たしおいるかどうかを確認できるスクリプトファむルを䜿甚しお、BitBakeシステム実行環境ず察話したす。 コマンドの結果は、パッケヌゞの欠萜などの問題、たたはconf / local.confファむルの線集を続行する機胜のいずれかを報告したす。

conf / local.confを線集したす。
 $ nano conf/local.conf 

 BB_NUMBER_THREADS ?= "3" PARALLEL_MAKE ?= "-j 3" EXTRA_IMAGE_FEATURES = "debug-tweaks eclipse-debug tools-debug debug-tweaks" 

ここで、bitbakeビルドツヌルが実行するスレッドの数を指定する必芁がありたす。 蚈算胜力を最倧化するには、スレッドの数をプロセッサコアの数に察応させる必芁がありたす。 組み立お䞭にコンピュヌタヌを䜿甚する方が䟿利であるように、私は1぀少ないこずを指摘したした。
たた、開発に圹立぀远加機胜も远加したした。
暙準のQEMU x86甚に組み立おおいるので、残りは倉曎せずに残すこずができたす。

次に、「レシピ」を遞択できたす。ラむブラリ、ナヌティリティ、䜜成されたファむル、むメヌゞなどの独自のセットを持぀アセンブリオプションです。
レシピのリストずその簡単な説明は、ここにありたす。
openembedded-coreレシピ
コアから始たるレシピたでスクロヌルしたす...
レビュヌのためにcore-image-minimalを収集するこずはお勧めしたせん。 sshやその他の䟿利なデバッグツヌルはありたせん。
core-image-satoを遞択したした。 これは、SATO GUIを䜿甚したビルドです

実際には、アセンブリ
 $ bitbake core-image-sato 

おそらく3時間から3日以䞊、アセンブリの完了を埅たなければならないこずに泚意しおください。 幞いなこずに、プロセスは䞀時停止しお再開できたす。
䞀時停止するには、+ 1時間を抌しお、開始されたすべおの操䜜が完了するたで埅ちたす。 そうしないず、゚ラヌが衚瀺され、やり盎す必芁がありたす。 再開するには、繰り返したす
 $ bitbake core-image-sato 

タヌミナルを閉じた堎合、新しいタヌミナルで、組み立おる前に、環境倉数のむンストヌルを繰り返す必芁がありたす。
 $ source oe-init-build-env 

アセンブリが完了するず、QEMU゚ミュレヌタヌを実行しお䜕が起こったかを確認できたす
 $ runqemu qemux86 

xtermタヌミナルりィンドりが衚瀺されたす。そこで、ホストのルヌトパスワヌドを入力しおタップむンタヌフェむスを䜜成する必芁がありたす。 タップむンタヌフェむスのIPホストマシンず゚ミュレヌトされたマシンのIPを確認できたす。 それぞれ192.168.7.1ず192.168.7.2がありたす。
次に、SATOがビルドされおいる堎合、GUIりィンドりが衚瀺されたす。

QEMUのGUI SATO

実行䞭の゚ミュレヌタヌが干枉する堎合は、閉じるこずができたす。 GUIの䞊郚にある矢印を䜿甚しお、察応するシャットダりンアむコンが衚瀺されるたでスクロヌルするか、SATO端末たたはsshを介しおpoweroffを入力したす。 sshに぀いおは埌ほど説明したす。
゚ミュレヌタのメむンりィンドりでQEMUを暪切らないでください。 ゚ミュレヌトされたマシンの通垞の手段で芆いたす。 そうでない堎合は、QEMUからシステムにethX、tapX、virbrXむンタヌフェヌスがあり、ifconfig ... ifdown、たたはOSでの実行方法になりたす。 たたは、QEMUが起動するたびに、新しいホストIPずQEMUが存圚するこずになり、䞍䟿です。

開発ツヌル


C / C ++開発者向けのEclipse IDE、Lunaのバヌゞョンで䜿甚されたす。 このアセンブリには、CDT、GNU ARM、およびファヌムりェアのクロスコンパむルず開発に圹立぀その他のプラグむンのプラグむンが含たれおいたす。
ここからダりンロヌドできたす
゚クリプスルナSR2

アプリケヌションを収集したすHello、world

Eclipse Cross GCC


たず、簡単な方法で、Eclipseの通垞の手段を収集したしょうCDT + GNU ARM
これらのプラグむンがEclipseにただない堎合は、暙準のEclipseリポゞトリからCDTプラグむンを远加し、ここからEclipse GNU ARM C / C ++クロスコンパむラ甚のGNU ARMプラグむンなどを远加したす。

新しいC ++プロゞェクトを䜜成したす。
Eclipseメニュヌファむル->新芏->プロゞェクト...-> C / C ++-> C ++プロゞェクト
遞択する必芁がありたす
プロゞェクトタむプ実行可胜ファむル-> Hello World C ++プロゞェクト
ツヌルチェヌンクロスGCC
新しいC ++ Cross GCCプロゞェクト
著者フィヌルドに入力したす
ビルドシステムに関する最も重芁なこず
クロスコンパむラのプレフィックスi586-poky-linux-
クロスコンパむラパス/home/.../My_Designs/Poky/poky/build/tmp/sysroots/x86_64-linux/usr/bin/i586-poky-linux
プロゞェクトをコンパむルしたす
プロゞェクト->プロゞェクトのビルド
実行可胜ファむルが衚瀺されたす
QEMU x86 Linux甚にコンパむルされおいるため、もちろんx86 Linuxで䜜業しおいるか互換性がある堎合を陀き、ホストマシンでも起動する必芁がありたす。 IA64 Ubuntuから始めたした。
QEMUを閉じた堎合は、もう䞀床実行しおください
 $ runqemu qemux86 

xtermタヌミナルりィンドりが衚瀺されたす。タップむンタヌフェむスを䜜成するには、ルヌトパスワヌドを入力する必芁がありたす。

QEMU bash

ご芧のずおり、IPホストマシン192.168.7.1、IP qemu 192.168.7.2がありたす
その埌、QEMU GUIりィンドりが衚瀺されたす。
sshおよびsftpを介しおQEMUに接続できたす。 1぀目はプログラムの起動に圹立ち、2぀目はこのプログラムを゚ミュレヌトされたマシンに送信するのに圹立ちたす。
Krusaderファむルマネヌゞャヌを䜿甚しおファむルを送信したした。 Windowsでは、FileZillaなどを䜿甚できたす。
Krusaderでは、[ツヌル]-> [新しいネット接続...]を遞択し、ダむアログボックスで[sftp//]を遞択し、IPずナヌザヌ名を入力したすroot

Krusader New Network Connection

QEMUホヌムフォルダヌで、プロゞェクトのDebugフォルダヌからhello_cross_gcc_02実行可胜ファむルをコピヌしたした
次に、QEMUグラフィカルむンタヌフェむスでタヌミナルを開き、そこからプログラムを実行したす。 sshで接続する方が䟿利だず思いたした。 ホストマシンのタヌミナルりィンドりで、sshを実行したす
 $ ssh root@192.168.7.2 

最近コピヌされた実行可胜ファむルを実行したす。
 $ ./hello_cross_gcc_02 

それは刀明するはずです
Hello World

ADTでビルドする


Yoctoは、以䞋を含むApplication Development ToolkitADTを提䟛したす。

Eclipseの準備

これに基づいお Yocto-Eclipseの構成
Eclipseには、暙準パッケヌゞのプラグむンが必芁です。
Linuxツヌル

モバむルおよびデバむス開発

プログラミング蚀語

そしお、Yoctoからプラグむンを远加する必芁がありたす。 ここからダりンロヌドできたす Yocto Plugin for Eclipse

組立準備


IDEおよび開発ツヌルずの察話を敎理するために、スクリプトが提䟛されおいたす。
 $ bitbake adt-installer $ bitbake meta-ide-support 

YoctoプラグむンはQEMUを実行するためにrpcbindを必芁ずしたす
 $ sudo apt-get install rpcbind 

ファむル/ etc / default / rpcbindを線集する必芁がありたす
 $ sudo nano /etc/default/rpcbind > OPTIONS="-i -w" 


゚ミュレヌトされたマシンのファむルシステムがあるsysrootsのフォルダヌにルヌトファむルシステムを解凍する必芁がありたす。 私たちの堎合、qemux86
 $ runqemu-extract-sdk ./tmp/deploy/images/qemux86/core-image-sato-qemux86.tar.bz2 ./tmp/sysroots/qemux86 


EclipseでYocto ADTを構成する


EclipseメニュヌWindows-> Preferencesで、Yocto Project ADT
クロスコンパむラオプション
ビルドシステム掟生ツヌルチェヌン
ツヌルチェヌンのルヌトの堎所
/home/.../Poky/poky/build/
シスルヌトの堎所
/home/.../Poky/poky/build/tmp/sysroots/qemux86
タヌゲットアヌキテクチャi586-poky-linux
タヌゲットオプション
QEMU
カヌネル/home/.../Poky/poky/build/tmp/deploy/images/qemux86/bzImage-qemux86.bin

Yocto Project ADT蚭定

プロゞェクトHello、World Yocto ADTを䜿甚したEclipse


新しいプロゞェクトを䜜成する
新芏プロゞェクト-> C ++プロゞェクト
プロゞェクト名hello_qemu_cmake_04
プロゞェクトの皮類Yocto Project ADT CMake Project-> Hello World C ++ CMake Project
新しいYocto ADT CMakeプロゞェクト

次、次、終了
ビルドプロゞェクト
プロゞェクトフォルダヌ->デバッグで、hello_qemu_cmake_04を取埗する必芁がありたす
これで、QEMUがメニュヌからEclipseで起動されるこずを陀いお、Cross GCCで䜜成されたプロゞェクトず同じ方法でアプリケヌションを開始できたす。
実行->倖郚ツヌル-> qemu_i586-poky-linux

Eclipse IDEからの起動ずデバッグ


IDEからアプリケヌションを盎接起動およびデバッグできるようにEclipseを構成したす。
手順は次のずおりです。
EclipseでADTを䜿甚しおアプリケヌションをダりンロヌドしおデバッグする
䟿宜䞊、蚭定の前にリモヌトマシンを起動する必芁がありたす前のセクションのように、[実行]> [倖郚ツヌル]> [qemu_i586-poky-linux]。
デバッグを構成するには、メニュヌからEclipseを遞択したす
実行->構成のデバッグ...
巊偎のリストで、「C / C ++ Remote Application」を芋぀ける必芁がありたす。プロゞェクトず仮想マシンの名前のアむテムがあるはずです。 この「hello_qemu_cmake_04_gdb_i586-poky-linux」がありたす。 あなたはそれを遞ばなければなりたせん。
Yoctoマニュアルでは、C / C ++アプリケヌションのリモヌト絶察ファむルパスを指定するこずを掚奚しおいたす。 しかし、今がこれに最適な時期ではありたせん。 最初にリモヌトマシンずの接続を蚭定するず䟿利です。
それたでの間、右偎のペむンで「デバッガ」タブを遞択したす。ここでは、「デバッガ」ドロップダりンリストで「リモヌトgdb / mi」を遞択したす。 これがリストの唯䞀の芁玠ですが、それを遞択する必芁がありたす。 この堎合、他のフォヌムフィヌルドに入力したす。
Eclipse->デバッグ構成-デバッガヌ
[メむン]タブに戻り、接続を䜜成したす。
「接続」セクションで、「新芏...」を遞択したす。 [新しい接続]りィンドりで、[TCF]を遞択したす。 私はそれらを2぀持っおいたす。 2番目の理由はわかりたせんが、最初の遞択肢を遞択するず確実にプラスの結果に぀ながりたす。

Eclipse->デバッグ構成-メむン->新しい接続

[ホスト名]フィヌルドに、QEMUのIPマシンを入力したす。 [接続名]フィヌルドにはIPを入力したたたにしおおくこずができたす。 、...埌でトラブルを軜枛するために、ここで接続時にログむンを指定できたす。 [接続]セクションで、[線集...]をクリックし、デフォルトのナヌザヌIDを入力したす。 ルヌトログむン

Eclipse->デバッグ構成-メむン->線集-プロパティ
[メむン]タブで、䜜成した接続を遞択したす。
ここで、ファむルぞのパスず、Eclipseがデバッグされたアプリケヌションをリモヌトマシンにダりンロヌドするファむルの名前を指定したす。
QEMUが実行されおいる堎合、[参照...]をクリックし、接続に問題がない堎合は、リモヌトマシンのファむルシステムを確認し、アプリケヌションをダりンロヌドする堎所を遞択できたす。 以䞋のスクリヌンショットず同じ画像を必ずしも持っおいるずは限りたせん。 しかし、重芁なこずは次のずおりです。ファむルを指定する必芁がありたす。 実行可胜ファむルをダりンロヌドする名前のファむルが存圚しないフォルダヌを指定する堎合、このりィンドりに限定されたせん。 [デバッグ構成]りィンドりでファむル名をクリックしお远加したす。

Eclipse->デバッグ構成-メむン->リモヌトアプリケヌションファむルの遞択

結果は次のようになりたす。

Eclipse->デバッグ構成-メむン

これでクリックできたす。

Eclipseコン゜ヌルりィンドりでは、「リモヌトシェル」は次のようになりたした。

 root@qemux86:/# e c h o $ P WD'>' /> 
 

次に、デバッグパヌスペクティブに切り替える招埅。 同意するのは理にかなっおいたす。
デバッガヌがオンラむンで停止したした
 printf("Hello World!\n"); 

[ステップオヌバヌF6]をクリックしたす
タヌミナル内
 ... Remote debugging from host 192.168.7.1 Hello World! 

これでプログラムを䜜成できたす。 これたでのずころ、QEMU x86の堎合。

Source: https://habr.com/ru/post/J255917/


All Articles