QEMUは、U-ブートのLinuxカーネルによって開始されたARM vexpress開発環境(2)を----構築します
タグ(スペースで区切っ):QEMU ARM Linuxの
上記「QEMU(a)はARM vexpress開発環境の構築」では、簡単な方法の物語は、LinuxカーネルQEMUの直接シミュレーションによって開始された、とSDカードのルート・ファイル・システムにぶら下がって、このメソッドは直接実用的なアプリケーションで、カーネルをブートで伝えます起動方法のARMボード:U-ブート、カーネル、多少異なるrootfsの。QEMUによって物語を伝えるために、今の下に取り付けられたU-bootブートのLinuxカーネルとルートファイルシステムによる方法を構築します。
開発環境の1.説明
正常に機能するようにシステムを組み込み、含まれている必要がありますU-ブート、カーネル、rootfsの、appfsを。ARM Flash開発ボード上のこれらの部品の位置関係は、図のようになります。
ブートローダ | BootParameters | カーネル | rootfsの | Appfs |
---|
rootfsのは、あなたがにrootfsをマウントするとき、それはセットにNFSネットワークを介して良いPCを取り付けることができ、また、開発ボードに追加しましたが、PCに展開することができない、開発ボードは、カーネルを使い果たし、開発ボードのフラッシュに追加することができますルート・ファイル・システム上にrootfs(記事「QEMUはARM vexpress開発環境(3)---- NFSネットワークファイルシステムのルートを構築する」の下には、NFSネットワークは、ルートファイルシステムを詳細に説明する実装方法を見せて)。
2. U-ブートを準備します
U-bootブートローダーLinuxカーネルを使用するには
2.1のダウンロードU-ブーツ
本明細書で使用される、それはU-ブート2017.05バージョンであり、Webサイトhttp://ftp.denx.de/pub/u-bootからダウンロードしたソースコードのU-ブートバージョンを選択します。
2.2解凍U-ブーツ
解凍U-ブーツ:
# tar -xvf u-boot-2018.09.tar.bz2
2.3 U-ブートをコンパイル
直接コンパイルされた
あなたはMakefileとconfig.mkファイルを変更しない場合は、コンパイル時にARCHとCROSS_COMPILE設定を追加する必要があります。
# make vexpress_ca9x4_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
このコンパイルは比較的簡単な方法ですが、デバッグ時、あなたはU-bootの複数のコンパイルを必要とし、あまりにも不便なパラメータは、以下の方法を通じてので、とMakefileのARCH config.mkファイルとCROSS_COMPILEオプションを変更、コンパイルそれは、コンパイルコマンドセットでコンパイラを追加するために設定を保存しますとき。
Makefileを変更
# vim Makefile
CROSS_COMPILE = arm-linux-gnueabi-
config.mkを変更
# vim config.mk
ARCH = arm
U-ブートをコンパイルします。
# make vexpress_ca9x4_defconfig
# make -j4
scripts/kconfig/conf --syncconfig Kconfig
CHK include/config.h
GEN include/autoconf.mk.dep
CFG u-boot.cfg
GEN include/autoconf.mk
*** Your GCC is older than 6.0 and is not supported
arch/arm/config.mk:66: recipe for target 'checkgcc6' failed
make: *** [checkgcc6] Error 1
限り、あなたは個別にコンパイルし、問題を解決することができるように、上に示した質問は、該当するファイルを変更することで解決することができ、U-ブート時間をコンパイルするいくつかの問題があるかもしれません。
# vim arch/arm/config.mk
ifeq ($(CONFIG_$(SPL_)SYS_THUMB_BUILD),y)
#archprepare: checkthumb checkgcc6
archprepare: checkthumb
checkthumb:
@if test "$(call cc-name)" = "gcc" -a \
"$(call cc-version)" -lt "0404"; then \
echo -n '*** Your GCC does not produce working '; \
echo 'binaries in THUMB mode.'; \
echo '*** Your board is configured for THUMB mode.'; \
false; \
fi
#else
#archprepare: checkgcc6
endif
#checkgcc6:
# @if test "$(call cc-name)" = "gcc" -a \
# "$(call cc-version)" -lt "0600"; then \
# echo '*** Your GCC is older than 6.0 and is not supported'; \
# false; \
# fi
2.4 U-ブートを開始
U-ブートを開始QEMUを経由してコマンドを起動します。
# qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel tools/u-boot
U-Boot 2018.09 (Sep 24 2018 - 21:50:42 +0800)
DRAM: 512 MiB
WARNING: Caches not enabled
Flash: 128 MiB
MMC: MMC: 0
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: smc911x-0
Hit any key to stop autoboot: 0
=>
これまでのところ、U-bootブートに成功し、次はカーネルのブートパラメータのu-ブートの設定を開始し、Linuxカーネルを起動し、ルートファイルシステム上にハングアップします。
プリントU-ブート環境変数:
=> print
arch=arm
baudrate=38400
board=vexpress
board_name=vexpress
......
scriptaddr=0x88000000
stderr=serial
stdin=serial
stdout=serial
vendor=armltd
Environment size: 4201/262140 bytes
3.カーネルを準備
カーネルをブートするために、U-ブートイメージを使用してください:
カーネルはuImage形式をコンパイルする必要があります
メモリにuImageのロードアドレスを指定する必要がある
カーネルコンパイル指定:LOADADDR = uImage -j4作るの?
カーネルディレクトリに直接コンパイルされました:
# make LOADADDR=0x60003000 uImage -j4
またはMakefileのロードアドレスの設定を追加します。
# vim linux/arch/arm/boot/Makefile
LOADADDR ?= 0x60003000
そして、uImageファイルをコンパイル:
# make uImage -j4
提供4. QEMUネットワーク機能
U-bootブートでQEMUの仮想マシンがメモリuImage、uImageにロードしてから来ることが必要ですか?UImageは、TFTPサーバによって指定されたメモリアドレスにダウンロードすることができます。しかし、その前に、私たちは、Xubuntuのシステムを橋渡しすることで、ネットワークにリンクする必要があります。
4.1 QEMUはホストへのネットワーク接続を設定します
ブリッジネットワークホストホスト通信
ホストカーネルがTUN / TAPモジュールをサポートする必要があります
4.2 Xubuntuのホスト構成
ネットワークに依存するブリッジの2つのツールをインストールします。
# sudo apt install uml-utilities bridge-utils
tunデバイスファイルを作成します:は/ dev /ネット/ TUN(通常は自動的に作成)
ネットワークを設定するために/ etc / network / interfacesファイルを修正
# sudo vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto enp0s3
auto br0
iface br0 inet dhcp
bridge_ports enp0s3
設定は/ etc / QEMU-ifupのは、/ etc / QEMU-ifdownをスクリプト(高いバージョンが自動的に設定され、無手動設定)
4.3を有効にするシステム構成を再起動します。
# reboot
または:
# init 6
4.4ビューQEMUネットワーク環境
# ifconfig
br0 Link encap:Ethernet HWaddr 08:00:27:63:e5:46
inet addr:192.168.0.105 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe63:e546/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:39 errors:0 dropped:0 overruns:0 frame:0
TX packets:64 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10471 (10.4 KB) TX bytes:7534 (7.5 KB)
仮想ネットワーク・インタフェース・BR0 QEMUの仮想マシンとホスト通信ネットワークポートのLinux
5. TFTPサーバ
QEMUはuImageを起動したときに、開発ボードをシミュレートするために使用TFTPサーバを作成し、uImageはメモリにダウンロード。
Linuxホストホストの1)TFTPサーバーツールのインストール:
# sudo apt install tftp-hpa tftpd-hpa xinetd
2)、設定ファイルを変更するTFTPサーバのディレクトリを設定します。
# sudo vim /etc/default/tftpd-hpa
......
TFTP_DIRECTORY="/home/mcy/tftpboot"
......
3)Linuxホスト上でtftpディレクトリを作成します。
# mkdir /home/mcy/tftpboot
# chmod 777 /home/mcy/tftpboot
4)TFTPサービスを再起動します。
# sudo /etc/init.d/tftpd-hpa restart
6. U-bootにカーネルのブートパラメータを設定します
QEMUの検証を開始します
# cat boot.sh
#! /bin/sh
qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-kernel u-boot \
#-dtb kernel/linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-nographic \
-net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
#-append "root=/dev/mmcblk0 rw console=ttyAMA0" \
-sd rootfs.ext3
このように、簡単なrootfsのディレクトリがルートファイルシステムで、プログラミングボードを開発するために、画像ファイル、画像ファイルにすることができる、またはu-ブーツでQEMUは、イメージファイルをマウントするLinuxカーネルの後に開始しました。また、「QEMUは、ARMのvexpress開発環境(3)---- NFSネットワークルートファイルシステムを構築する。」参照記事の下に、NFSネットワーク・ファイル・システムのブートを経由して設定することができます