1

QEMU で Android JellyBean をビルドして実行しようとしています。
ターゲット マシン タイプ (ARM Versatile Express - Cortex A15) 用にビルドされたカーネルがあります。

Android ビルドの出力を使用して QEMU イメージをビルドしようとしていますが、常に次のようなエラーが発生します。
qemu-system-arm -serial stdio -M vexpress-a15 -m 128m -kernel zImage -append "root=/dev/sda1 earlyprintk" android_jb.img

<3>VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "/" or unknown-block(2,0)
Please append a correct "root=" boot option; here are the available partitions:
<0>Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

-initrdこれは、qemu にオプションを指定しない場合に発生します。

initrd オプション
qemu-system-arm -serial stdio -M vexpress-a15 -m 128m -kernel zImage -append "root=/dev/sda1 earlyprintk" -initrd ramdisk.img android_jb.img(Android ビルド プロセスによって生成される) を指定すると、次のエラーが発生します。

<3>init: cannot find '/system/bin/servicemanager', disabling 'servicemanager'
<3>init: cannot find '/system/bin/vold', disabling 'vold'
<3>init: cannot find '/system/bin/sh', disabling 'setconsole'
<3>init: cannot find '/system/bin/netd', disabling 'netd'
<3>init: cannot find '/system/bin/debuggerd', disabling 'debuggerd'
<3>init: cannot find '/system/bin/rild', disabling 'ril-daemon'
<3>init: cannot find '/system/bin/surfaceflinger', disabling 'surfaceflinger'
<3>init: cannot find '/system/bin/app_process', disabling 'zygote'
<3>init: cannot find '/system/bin/drmserver', disabling 'drm'
<3>init: cannot find '/system/bin/mediaserver', disabling 'media'
<3>init: cannot find '/system/bin/installd', disabling 'installd'
<3>init: cannot find '/system/bin/keystore', disabling 'keystore'
<3>init: cannot find '/system/bin/sh', disabling 'console'

Myandroid_jb.imgにはコンテンツが含まれており、Android ビルドの出力は どこにandroid_out/root/*あります (android_out = out/platform/target/project/armboard_v7a)android_out/systemandroid_out

4

2 に答える 2

1

数週間前にこれを行う方法を見つけました。

アンドロイド

VExpress 用の Android のビルドは少し複雑です。ありがたいことに、手順はここで明確に説明されています。

これらの指示に従って、make PRODUCT-armboard_v7a-eng完了したら、出力ディレクトリに移動します。

VExpress ボードに SD カードとしてマウントするイメージを作成する必要があります。

たとえば、android を含む 2GB の SD イメージを作成します。
dd if=/dev/zero of=android.img bs=512 count=$((2 * 1024 * 1024 * 1024 / 512))

次に、このイメージにファイル システムとパーティション テーブルを作成する必要があります。

sudo /sbin/losetup /dev/loop0 android.img
# cylinders = size / (16 * 63 * 512)
sudo /sbin/sfdisk --no-reread -D -C 4161 -H 16 -S 63 /dev/loop0 << EOF
0,
;
EOF
sudo /sbin/losetup -d /dev/loop0

# Create the partition
sudo /sbin/losetup -o $((63*512)) /dev/loop0 android.img
sudo /sbin/mkfs.ext2 /dev/loop0
sudo /sbin/losetup -d /dev/loop0

イメージの準備ができたので、Android ファイルをコピーします。

sudo mount -o loop,offset=$((63*512)) android.img /mnt
sudo cp -R <android_out>/target/product/armboard_v7a/root/* /mnt/
sudo cp -R <android_out>/target/product/armboard_v7a/system/* /mnt/system
sudo umount /mnt

カーネル

ここでは特別なことは何もありません。使用するvexpress_defconfig

QEMU

qemuこれで、すべてのピースで実行できます。

qemu-system-arm -kernel zImage -machine vexpress-a9 -cpu cortex-a9 -serial stdio -m 1024 -append 'noinitrd root=/dev/mmcblk0p1 rw mem=1024M console=ttyAMA0,38400n8 rootwait earlyprintk loglevel=8 init=/init' -sd android.img

参考文献:

https://wiki.linaro.org/PeterMaydell/QemuVersatileExpress
http://linux-arm.org/LinuxKernel/LinuxAndroidPlatform
http://www.m5sim.org/BBench-gem5

于 2015-07-29T17:59:28.160 に答える