From 96b68fb7047d2d355a6d3cc8409a0f1db95acec9 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Wed, 30 Apr 2014 01:07:06 +0200 Subject: fix 32 bit userland with 64 bit kernel support after onger discussion with Phil, I understood his old patches and fixed support for x86 systems with 32 Bit userland and 64 Bit kernel by using a biarch toolchain instead of a multilib one. --- target/config/Config.in | 2 +- target/x86/Makefile | 18 ++++++++++++++---- target/x86/kernel/qemu-x86_64 | 20 ++++++++++++++++++++ target/x86/sys-available/qemu-x86_64-32 | 11 +++++++++++ target/x86_64/sys-available/toolchain-x86_64_32 | 12 ------------ 5 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 target/x86/kernel/qemu-x86_64 create mode 100644 target/x86/sys-available/qemu-x86_64-32 delete mode 100644 target/x86_64/sys-available/toolchain-x86_64_32 (limited to 'target') diff --git a/target/config/Config.in b/target/config/Config.in index 3d613bb1e..b1725b876 100644 --- a/target/config/Config.in +++ b/target/config/Config.in @@ -242,7 +242,7 @@ config ADK_TARGET_CUBOX_I1 endchoice # global symbols -config ADK_TARGET_KERNEL_MAY_64BIT +config ADK_TARGET_KERNEL_64 boolean config ADK_TOOLCHAIN_ONLY diff --git a/target/x86/Makefile b/target/x86/Makefile index 736f1c359..89e59095a 100644 --- a/target/x86/Makefile +++ b/target/x86/Makefile @@ -8,6 +8,16 @@ include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage + +QEMU_ARGS:=-M pc +QEMU_ARGS+=${ADK_QEMU_ARGS} + +ifeq ($(ADK_TARGET_SYSTEM_QEMU_X86_64_32),y) +QEMU_ARCH:=x86_84 +else +QEMU_ARCH:=i386 +endif + ifeq ($(ADK_TARGET_QEMU_WITH_BOOTLOADER),y) ifeq ($(ADK_TARGET_QEMU_WITHOUT_GRAPHIC),y) CREATE:=./scripts/create.sh -g -t @@ -43,9 +53,9 @@ ifeq ($(ADK_HARDWARE_QEMU),y) @echo "$(CREATE) qemu-${CPU_ARCH}.img $(FW_DIR)/$(ROOTFSTARBALL)" @echo "Start qemu with following command line:" ifeq ($(ADK_TARGET_QEMU_WITH_BOOTLOADER),y) - @echo 'qemu-system-i386 ${ADK_QEMU_ARGS} -net user -net nic,model=e1000 qemu-${CPU_ARCH}.img' + @echo 'qemu-system-${QEMU_ARCH} ${QEMU_ARGS} -net user -net nic,model=e1000 qemu-${CPU_ARCH}.img' else - @echo 'qemu-system-i386 ${ADK_QEMU_ARGS} -net user -net nic,model=e1000 -kernel $(FW_DIR)/$(TARGET_KERNEL) qemu-${CPU_ARCH}.img' + @echo 'qemu-system-${QEMU_ARCH} ${QEMU_ARGS} -net user -net nic,model=e1000 -kernel $(FW_DIR)/$(TARGET_KERNEL) qemu-${CPU_ARCH}.img' endif endif ifeq ($(ADK_HARDWARE_VBOX),y) @@ -72,7 +82,7 @@ imageinstall: $(FW_DIR)/$(INITRAMFS) @echo 'The initramfs image is: ${FW_DIR}/${INITRAMFS}' ifeq ($(ADK_HARDWARE_QEMU),y) @echo "Start qemu with following command line:" - @echo 'qemu-system-i386 ${ADK_QEMU_ARGS} -net user -net nic,model=e1000 -kernel $(FW_DIR)/$(TARGET_KERNEL) -initrd ${FW_DIR}/${INITRAMFS}' + @echo 'qemu-system-${QEMU_ARCH} ${QEMU_ARGS} -net user -net nic,model=e1000 -kernel $(FW_DIR)/$(TARGET_KERNEL) -initrd ${FW_DIR}/${INITRAMFS}' endif endif ifeq ($(ADK_TARGET_FS),initramfs-piggyback) @@ -81,7 +91,7 @@ imageinstall: createinitramfs @echo 'The kernel+initramfs file is: $(FW_DIR)/${TARGET_KERNEL}' ifeq ($(ADK_HARDWARE_QEMU),y) @echo "Start qemu with following command line:" - @echo 'qemu-system-i386 ${ADK_QEMU_ARGS} -net user -net nic,model=e1000 -kernel $(FW_DIR)/$(TARGET_KERNEL)' + @echo 'qemu-system-${QEMU_ARCH} ${QEMU_ARGS} -net user -net nic,model=e1000 -kernel $(FW_DIR)/$(TARGET_KERNEL)' endif endif ifeq (${ADK_TARGET_FS},iso) diff --git a/target/x86/kernel/qemu-x86_64 b/target/x86/kernel/qemu-x86_64 new file mode 100644 index 000000000..7bf96c74c --- /dev/null +++ b/target/x86/kernel/qemu-x86_64 @@ -0,0 +1,20 @@ +CONFIG_X86=y +CONFIG_64BIT=y +CONFIG_X86_64=y +CONFIG_GENERIC_CPU=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_AMD=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_MTRR=y +CONFIG_X86_PAT=y +CONFIG_ISA_DMA_API=y +CONFIG_AMD_NB=y +CONFIG_IA32_EMULATION=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_E1000=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_CONSOLE=y diff --git a/target/x86/sys-available/qemu-x86_64-32 b/target/x86/sys-available/qemu-x86_64-32 new file mode 100644 index 000000000..f96e6ea35 --- /dev/null +++ b/target/x86/sys-available/qemu-x86_64-32 @@ -0,0 +1,11 @@ +config ADK_TARGET_SYSTEM_QEMU_X86_64_32 + bool "Qemu Emulator (x86_64) with 32Bit userland" + select ADK_x86 + select ADK_qemu_x86_64_32 + select ADK_CPU_I686 + select ADK_HARDWARE_QEMU + select ADK_TARGET_KERNEL_BZIMAGE + select ADK_TARGET_KERNEL_64 + help + Support for Qemu Emulator (x86_64) with 32 Bit userland. + diff --git a/target/x86_64/sys-available/toolchain-x86_64_32 b/target/x86_64/sys-available/toolchain-x86_64_32 deleted file mode 100644 index 9e8297ea4..000000000 --- a/target/x86_64/sys-available/toolchain-x86_64_32 +++ /dev/null @@ -1,12 +0,0 @@ -config ADK_TARGET_SYSTEM_TOOLCHAIN_X86_64_32 - bool "Toolchain only (32 ABI)" - select ADK_x86_64 - select ADK_32 - select ADK_toolchain_x86_64 - select ADK_CPU_X86_64 - select ADK_LINUX_64 - select ADK_TOOLCHAIN - select ADK_TARGET_PACKAGE_TXZ - help - Build a x86_64 toolchain. - -- cgit v1.2.3