Ubuntuでアーム仮想オペレーティング環境を構築する

開発ボードなしで、armプログラムをデバッグして実行する方法は?
この記事では主に、Ubuntuでアームクロスコンパイルおよび実行環境を構築する方法について説明します。

1つは、クロスコンパイルツールチェーンをインストールする##

クロスコンパイルツールチェーンarm-linux-gnueabihf-gccをインストールします。

sudo apt-get install gcc-arm-linux-gnueabihf

インストール後、非常に多くのクロスコンパイルツールがシステムに追加されていることがわかります。

helloworld@ubuntu:~$ arm-linux-gnueabihf-
arm-linux-gnueabihf-addr2line     arm-linux-gnueabihf-gcov-7
arm-linux-gnueabihf-ar            arm-linux-gnueabihf-gcov-dump
arm-linux-gnueabihf-as            arm-linux-gnueabihf-gcov-dump-7
arm-linux-gnueabihf-c++filt       arm-linux-gnueabihf-gcov-tool
arm-linux-gnueabihf-cpp           arm-linux-gnueabihf-gcov-tool-7
arm-linux-gnueabihf-cpp-7         arm-linux-gnueabihf-gprof
arm-linux-gnueabihf-dwp           arm-linux-gnueabihf-ld
arm-linux-gnueabihf-elfedit       arm-linux-gnueabihf-ld.bfd
arm-linux-gnueabihf-gcc           arm-linux-gnueabihf-ld.gold
arm-linux-gnueabihf-gcc-7         arm-linux-gnueabihf-nm
arm-linux-gnueabihf-gcc-ar        arm-linux-gnueabihf-objcopy
arm-linux-gnueabihf-gcc-ar-7      arm-linux-gnueabihf-objdump
arm-linux-gnueabihf-gcc-nm        arm-linux-gnueabihf-ranlib
arm-linux-gnueabihf-gcc-nm-7      arm-linux-gnueabihf-readelf
arm-linux-gnueabihf-gcc-ranlib    arm-linux-gnueabihf-size
arm-linux-gnueabihf-gcc-ranlib-7  arm-linux-gnueabihf-strings
arm-linux-gnueabihf-gcov          arm-linux-gnueabihf-strip

次のコードを実行してソフトリンクを確立します。そうしないと、後で実行したときに動的ライブラリが見つからないというエラーが報告されます。

sudo ln -s /usr/arm-linux-gnueabihf/lib/libc.so.6/lib/libc.so.6
sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3/lib/ld-linux-armhf.so.3

テストコード main.cを書く:

# include <stdio.h>	
int main(){printf("helloworld\n");return0;}

次のコマンドは、最初に main.cをコンパイルして、armプラットフォームの下に実行可能ファイル a.outを生成します。次に、 fileコマンドを使用すると、 a.outがarmプラットフォームの下にあるelf実行可能ファイルであることがわかります。

helloworld@ubuntu:~$ arm-linux-gnueabihf-gcc main.c 
helloworld@ubuntu:~$ file a.out 
a.out: ELF 32-bit LSB shared object, ARM, EABI5 version 1(SYSV), dynamically linked, interpreter /lib/ld-,for GNU/Linux 3.2.0, BuildID[sha1]=7592a0494955ca8bb953948ea4cfbefc90b2e2e9, not stripped

2つ目は、armエミュレーターqemu ##をインストールすることです。

アームエミュレータqemuをインストールします。

sudo apt-get install qemu

armプラットフォームの実行可能ファイル a.outを実行します。ご覧のとおり、プログラムは正しい結果 helloworldを出力します。

helloworld@ubuntu:~$ qemu-arm a.out 
helloworld

3、gdb ##を介してarmプログラムをデバッグします。

gdbを使用してUbuntuでarmプログラムをデバッグする原理:qemu側は実行可能プログラムを開始するgdbサーバーとして機能し、もう一方の端はローカルおよびリモートデバッグのためにgdbサーバーに接続するgdbクライアントとして機能します。

  1. まず、マルチプラットフォームgdbツールをインストールします。
    sudo apt-get install gdb-multiarch

  2. サンプルコード main.cを再コンパイルします。今回は、パラメーター --staticが追加されていることに注意してください。このパラメーターを追加すると、生成された実行可能ファイルが静的にリンクされます。 **このパラメータを追加しないと、gdbのデバッグ時にシングルステップ機能が異常になり、シンボルテーブルが見つかりません。 ** arm-linux-gnueabihf-gcc --static -g main.c

  3. 次のコマンドを使用して実行可能プログラム a.outを起動します。オプション -gはgdbのリスニングポートを指定します。ここでは1234です。このコマンドが実行されると、現在のウィンドウがブロックされます。 qemu-arm -g 1234 a.out

  4. 新しいコマンドラインウィンドウを開き、gdbクライアントを起動し、gdbインタラクティブインターフェイスに入ります。gdb-multiarcha.out

  5. サーバー側に接続するには、gdbインタラクティブインターフェイスに次のように入力します。targetremotelocalhost:1234

  6. 次に、gdbの関連機能を使用して、プログラムを正常にデバッグできます。(gdb)b main Breakpoint 1 at 0x102e8:file main.c、line 5(gdb)cContinuing。Breakpoint1、main()at main.c: 5 5 printf( "helloworld \ n");

4、参照文書##

  1. [ LinuxでARMプログラムをコンパイル、実行、デバッグする](https://www.jianshu.com/p/dc8e263d6466)
  2. [ qemu関連のドキュメント](https://people.debian.org/~aurel32/qemu/armhf/README.txt)
  3. CREATE DEBUG ENVIRONMENT FOR ARM ARCHITECTURE ON INTEL PROCESSOR

Recommended Posts

Ubuntuでアーム仮想オペレーティング環境を構築する
Ubuntu18.04にPython仮想環境をインストールします
Ubuntu16.04ビルドLAMP開発環境
Vmware仮想マシン上にUbuntuLinux開発環境を構築します
Python仮想環境:Ubuntu16.04
仮想マシンにubuntuをインストールします
ubuntuビルドpython開発環境
Ubuntu18.04.1ビルドJava環境とHelloWorld
ubuntuでNginx-RTMPライブサーバーを構築する
JobConverter + Ibreoffice環境をUbuntuにデプロイする
Ubuntu16.04ビルドphp5.6Webサーバー環境
docker ubuntu:14.04にpython-PIL-image環境をインストールします
LinuxでNginx環境を構築する(CentOS)
ubuntuでファイルサーバーを構築する
ubuntuに基づいてDiscuzフォーラムを構築する
SparkUbuntu18にSparkスタンドアロン環境をインストールします
Ubuntu18.04にHadoopシステム環境をインストールします
ubuntu16.04でnfsサービスを構築する方法
ubuntuでC ++コンパイル環境を構築する
[PHP] CentOSでPHPオペレーティング環境を構築する
VagrantはUbuntu仮想マシン環境をすばやく構築します
Ubuntuでpython開発環境を構築する
UBUNTU仮想マシンにRパッケージをインストールします
Ubuntu20.04インストールPython3仮想環境チュートリアル詳細な説明
Centos 7(仮想ホストを含む)に基づいてNginxを構築する
Ubuntu 16.04にJDKをインストールし、環境変数を構成します
ubuntuのランプ
Ubuntuビルドetcd
Jenkinsを使用してUbuntuで自動的にビルドする方法
centos7.2でLAMP環境を構築する方法
クラウドノートを作成するには、Ubuntu18にLeanoteをインストールします
UbuntuビルドSeafile
Ubuntuを構築および構成するための組み込みLinux開発環境
VMware仮想マシンにUbuntuをインストールし、UltraISOを使用してインストールします
Ubuntu14.04でPython仮想環境を作成する方法
UbuntuサーバーにMono本番環境をインストールして構成します
ubuntu18にvscodeをインストールします
UbuntuにRedisをインストールする
ubuntu16.04はGPU環境を展開します
centos7でk8s1.9.9をビルドする
ubuntu20にR4をインストールします
Ubuntu18.04にpostgresql-10をインストールします
Ubuntuにdockerをインストールする
CentOS6.7ビルドLNMP環境
Ubuntu構成開発環境
Centos7.6ビルドLNMP環境
ubuntu18.04にDockerをインストールします
Ubuntu16にnodejs10をインストールします
Ubuntu 18.04 LTSLAMPビルド
Ubuntu14.04にmysqlをインストールします
UbuntuにDjangoをインストールします
Ubuntu開発環境の構成
Ubuntu14.04にPython3をインストールします
ジェンキンスはセントスに基づいて構築されています
Ubuntu18にrJavaをインストールします
UbuntuTouch環境のセットアップ
UbuntuにJDK10 +をインストールする
Ubuntu16.04にPython3をインストールします
Ubuntu18.10はJava環境を構成します
ROS学習--- UbuntuにROSをインストールする
Ubuntu16.04.2にKDEをインストールします