[OE-core] [oe-core] QEMU with ARM Cortex A9 with hard float configuration - Kernel panic
Bruce Ashfield
bruce.ashfield at windriver.com
Tue Aug 27 20:03:46 UTC 2013
On 13-08-26 03:35 PM, Elvis Dowson wrote:
> Hi Bruce,
>
> On Aug 26, 2013, at 11:08 PM, Bruce Ashfield
> <bruce.ashfield at windriver.com <mailto:bruce.ashfield at windriver.com>> wrote:
>
>> Are you interested in something from scratch, versus something that
>> isn't already partially in the tree (like qemuarma9) ?
>>
>> We've got a few docs and tutorials, but I can also help step you through
>> the process to assist the existing material.
>
> I'd like to adapt the existing linux-yocto standard/base branch, and
> build up on existing qemuarma9 support. I've included detailed patch
> fragments below, so that you can replicate the current state of my work
> at your end.
Not ignoring this, I've just been tied up with 3.10 kernel work. I'll
get back to this shortly.
Cheers,
Bruce
>
> I've performed the following steps till date, but unfortunately get a
> qemu ram / rom out of memory address error after doing all this. Must be
> because of an incorrectly mapped KMACHINE. The vexpress device doesn't
> support PCI, IDE or SCSI, only microsd card or ram devices, so the boot
> method should use an initrd file, for the root filesystem, as described
> here.
>
> https://wiki.linaro.org/PeterMaydell/QemuVersatileExpress
>
> *_Step 01.00: Clone linux-yocto-3.8 locally, create local meta branch,
> create local standard/qemuarma9 branch, tracking the master branch._*
>
> Make the following modification to the qemuarma9-standard.scc file.
>
> From 8e9b465f242941b70d7b61045c073e82700fcd91 Mon Sep 17 00:00:00 2001
> From: Elvis Dowson <elvis.dowson at gmail.com <mailto:elvis.dowson at gmail.com>>
> Date: Mon, 26 Aug 2013 22:18:24 +0400
> Subject: [PATCH] qemuarma9: Update branch to qemuarma9.
>
> Signed-off-by: Elvis Dowson <elvis.dowson at gmail.com
> <mailto:elvis.dowson at gmail.com>>
> ---
> meta/cfg/kernel-cache/bsp/qemuarma9/qemuarma9-standard.scc | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/cfg/kernel-cache/bsp/qemuarma9/qemuarma9-standard.scc
> b/meta/cfg/kernel-cache/bsp/qemuarma9/qemuarma9-standard.scc
> index c71fe1c..729125d 100644
> --- a/meta/cfg/kernel-cache/bsp/qemuarma9/qemuarma9-standard.scc
> +++ b/meta/cfg/kernel-cache/bsp/qemuarma9/qemuarma9-standard.scc
> @@ -3,7 +3,7 @@ define KTYPE standard
> define KARCH arm
>
> include ktypes/standard/standard.scc
> -branch arm-versatile-926ejs
> +branch qemuarma9
>
> include qemuarma9.scc
>
> --
> 1.7.10.4
>
>
> *_Step 02.00: Create a new qemuarma9.conf machine definition._*
>
> There is a dts file in arch/arm/boot/dts called vexpress-v2p-ca9.dts.
>
> Q01: I guess the KMACHINE_qemuarma9 should be set to "vex press" ?
> instead of qemuarma9 below?
>
> #@TYPE: Machine
> #@NAME: qemuarma9
> #@DESCRIPTION: Machine configuration for QEMU ARM Cortex A9.
>
> # Specify the default tune.
> DEFAULTTUNE = "armv7a-neon"
>
> require conf/machine/include/qemu.inc
> require conf/machine/include/tune-cortexa9.inc
>
> # Specify the preferred kernel recipe version.
> PREFERRED_VERSION_linux-yocto ?= "3.8%"
>
> # Specify the machine name used by the kernel.
> KMACHINE_qemuarma9 = "qemuarma9" # Error?!!
>
> # Specify the kernel image type.
> KERNEL_IMAGETYPE = "uImage"
>
> MACHINE_DEVICETREE := "qemuarma9.dts"
>
> # Specify the serial console parameters.
> SERIAL_CONSOLE = "115200 ttyAMA0"
>
>
> *_Step 03.00: Patch the oe-core sources._*
>
> *Step 03.01: *Patch scripts/runqemu
>
> @@ -37,10 +37,11 @@ usage() {
> echo " qemuparams=\"xyz\" - specify custom parameters to QEMU"
> echo " bootparams=\"xyz\" - specify custom kernel parameters
> during boot"
> echo ""
> echo "Examples:"
> echo " $MYNAME qemuarm"
> + echo " $MYNAME qemuarma9 ramfs"
> echo " $MYNAME qemux86-64 core-image-sato ext3"
> echo " $MYNAME path/to/bzImage-qemux86.bin path/to/nfsrootdir/
> serial"
> echo " $MYNAME qemux86 ramfs"
> echo " $MYNAME qemux86 iso"
> echo " $MYNAME qemux86 qemuparams=\"-m 256\""
> @@ -105,11 +106,11 @@ process_filename() {
> # bit more complex, but offers a great user experience.
> KVM_ENABLED="no"
> while true; do
> arg=${1}
> case "$arg" in
> - "qemux86" | "qemux86-64" | "qemuarm" | "qemumips" |
> "qemumipsel" | \
> + "qemux86" | "qemux86-64" | "qemuarm" | "qemuarma9" |"qemumips"
> | "qemumipsel" | \
> "qemumips64" | "qemush4" | "qemuppc" | "qemumicroblaze" |
> "qemuzynq")
> [ -z "$MACHINE" ] && MACHINE=$arg || \
> error "conflicting MACHINE types [$MACHINE] and [$arg]"
> ;;
> "ext2" | "ext3" | "ext4" | "jffs2" | "nfs" | "btrfs")
> @@ -222,17 +223,17 @@ if [ "$FSTYPE" = "nfs" -a -z "$ROOTFS" ]; then
> error "NFS booting without an explicit ROOTFS path is not yet
> supported"
> fi
> if [ -z "$MACHINE" ]; then
> if [ "x$FSTYPE" = "xvmdk" ]; then
> - MACHINE=`basename $VM | sed
> 's/.*\(qemux86-64\|qemux86\|qemuarm\|qemumips64\|qemumips\|qemuppc\|qemush4\).*/\1/'`
> + MACHINE=`basename $VM | sed
> 's/.*\(qemux86-64\|qemux86\|qemuarm\|qemuarma9\|qemumips64\|qemumips\|qemuppc\|qemush4\).*/\1/'`
> if [ -z "$MACHINE" ]; then
> error "Unable to set MACHINE from vmdk filename [$VM]"
> fi
> echo "Set MACHINE to [$MACHINE] based on vmdk [$VM]"
> else
> - MACHINE=`basename $KERNEL | sed
> 's/.*\(qemux86-64\|qemux86\|qemuarm\|qemumips64\|qemumips\|qemuppc\|qemush4\).*/\1/'`
> + MACHINE=`basename $KERNEL | sed
> 's/.*\(qemux86-64\|qemux86\|qemuarm\|qemuarma9\|qemumips64\|qemumips\|qemuppc\|qemush4\).*/\1/'`
> if [ -z "$MACHINE" ]; then
> error "Unable to set MACHINE from kernel filename [$KERNEL]"
> fi
> echo "Set MACHINE to [$MACHINE] based on kernel [$KERNEL]"
> fi
> @@ -292,10 +293,13 @@ QEMUX86_64_DEFAULT_KERNEL=bzImage-qemux86-64.bin
> QEMUX86_64_DEFAULT_FSTYPE=ext3
> QEMUARM_DEFAULT_KERNEL=zImage-qemuarm.bin
> QEMUARM_DEFAULT_FSTYPE=ext3
> +QEMUARMA9_DEFAULT_KERNEL=uImage
> +QEMUARMA9_DEFAULT_FSTYPE=cpio.gz
> +
> QEMUMIPS_DEFAULT_KERNEL=vmlinux-qemumips.bin
> QEMUMIPS_DEFAULT_FSTYPE=ext3
> QEMUMIPSEL_DEFAULT_KERNEL=vmlinux-qemumipsel.bin
> QEMUMIPSEL_DEFAULT_FSTYPE=ext3
>
>
> *Step 03.02: *Patch runqemu-internal.
>
> @@ -48,10 +48,13 @@ else
> mem_size=128
> ;;
> "qemuarm")
> mem_size=128
> ;;
> + "qemuarma9")
> + mem_size=128
> + ;;
> "qemumicroblaze")
> mem_size=64
> ;;
> "qemumips"|"qemumips64")
> mem_size=128
> @@ -265,10 +268,11 @@ else
> fi
> fi
> case "$MACHINE" in
> "qemuarm") ;;
> + "qemuarma9") ;;
> "qemumicroblaze") ;;
> "qemumips") ;;
> "qemumipsel") ;;
> "qemumips64") ;;
> "qemush4") ;;
> @@ -348,10 +352,39 @@ if [ "$MACHINE" = "qemuarm" -o "$MACHINE" =
> "qemuarmv6" -o "$MACHINE" = "qemuarm
> QEMUOPTIONS="$QEMUOPTIONS -cpu arm1136"
> fi
> if [ "$MACHINE" = "qemuarmv7" ]; then
> QEMUOPTIONS="$QEMUOPTIONS -cpu cortex-a8"
> fi
> + if [ "$MACHINE" = "qemuarma9" ]; then
> + MACHINE_SUBTYPE=vexpress-a9
> + QEMUOPTIONS="$QEMUOPTIONS -cpu cortex-a9"
> + fi
> +fi
> +
> +if [ "$MACHINE" = "qemuarma9" ]; then
> + QEMU=qemu-system-arm
> + MACHINE_SUBTYPE=vexpress-a9
> + QEMUOPTIONS="$QEMUOPTIONS -cpu cortex-a9"
> + export QEMU_AUDIO_DRV="none"
> + QEMU_UI_OPTIONS="-show-cursor -usb"
> + # QEMU_UI_OPTIONS="$QEMU_UI_OPTIONS -force-pointer"
> + #QEMU_SYSTEM_OPTIONS="-M $MACHINE_SUBTYPE -serial null -serial
> mon:stdio -dtb $KERNEL-$MACHINE.dtb"
> + if [ "${FSTYPE:0:3}" = "ext" -o "${FSTYPE:0:4}" = "cpio" ]; then
> + KERNCMDLINE="earlyprintk root=/dev/mmcblk0p2 rw
> console=ttyAMA0,115200 console=tty $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY
> highres=off -dtb $KERNEL-$MACHINE.dtb"
> + QEMUOPTIONS="-M ${MACHINE_SUBTYPE} -initrd $ROOTFS -no-reboot
> $QEMU_UI_OPTIONS"
> + #QEMUOPTIONS="$QEMU_NETWORK_CMD -M ${MACHINE_SUBTYPE} -hda
> $ROOTFS -no-reboot $QEMU_UI_OPTIONS"
> + fi
> +
> + if [ "$FSTYPE" = "nfs" ]; then
> + if [ "$NFS_SERVER" = "192.168.7.1" -a ! -d "$NFS_DIR" ]; then
> + echo "Error: NFS mount point $ROOTFS doesn't exist"
> + cleanup
> + return 1
> + fi
> + KERNCMDLINE="root=/dev/nfs
> nfsroot=$NFS_SERVER:$NFS_DIR,$UNFS_OPTS rw $KERNEL_NETWORK_CMD
> mem=$QEMU_MEMORY"
> + QEMUOPTIONS="$QEMU_NETWORK_CMD -M ${MACHINE_SUBTYPE}
> --no-reboot $QEMU_UI_OPTIONS"
> + fi
> fi
> if [ "$MACHINE" = "qemux86" ]; then
> QEMU=qemu-system-i386
> QEMU_UI_OPTIONS="$QEMU_UI_OPTIONS -vga vmware"
> @@ -520,11 +553,11 @@ if [ "$MACHINE" = "qemuzynq" ]; then
> fi
> fi
> if [ "x$RAMFS" = "xtrue" ]; then
> QEMUOPTIONS="-initrd $ROOTFS -nographic"
> - KERNCMDLINE="root=/dev/ram0 debugshell"
> + KERNCMDLINE="earlyprintk root=/dev/mmcblk0p2 debugshell"
> fi
> if [ "x$ISOFS" = "xtrue" ]; then
> QEMUOPTIONS="$QEMU_NETWORK_CMD -cdrom $ROOTFS $QEMU_UI_OPTIONS"
> fi
>
> Best regards,
>
> Elvis Dowson
>
>
More information about the Openembedded-core
mailing list