Browse Source

lm32: try to build kernel for qemu

Waldemar Brodkorb 4 years ago
parent
commit
8afcd1092f

+ 4 - 0
mk/kernel-build.mk

@@ -39,6 +39,10 @@ ifeq ($(ADK_TARGET_KERNEL_IMAGE),y)
 KERNEL_FILE:=vmlinux
 KERNEL_TARGET:=$(ADK_TARGET_KERNEL)
 endif
+ifeq ($(ADK_TARGET_KERNEL_SIMPLEIMAGE),y)
+KERNEL_FILE:=vmlinux.bin
+KERNEL_TARGET:=simpleImage.milkymist_one
+endif
 
 ifneq ($(KERNEL_MODULES_USED),)
 KERNEL_TARGET+=modules

+ 5 - 0
target/config/Config.in.compiler

@@ -31,6 +31,7 @@ prompt "GCC version"
 depends on ADK_BUILD_COMPILER_GCC
 default ADK_TOOLCHAIN_GCC_ARC if ADK_TARGET_ARCH_ARC
 default ADK_TOOLCHAIN_GCC_AVR32 if ADK_TARGET_ARCH_AVR32
+default ADK_TOOLCHAIN_GCC_LM32 if ADK_TARGET_ARCH_LM32
 default ADK_TOOLCHAIN_GCC_METAG if ADK_TARGET_ARCH_METAG
 default ADK_TOOLCHAIN_GCC_NDS32 if ADK_TARGET_ARCH_NDS32
 default ADK_TOOLCHAIN_GCC_7 if ADK_TARGET_CPU_ARM_ARM11MPCORE
@@ -84,6 +85,10 @@ config ADK_TOOLCHAIN_GCC_METAG
 	bool "4.2.4-metag"
 	depends on ADK_TARGET_ARCH_METAG
 
+config ADK_TOOLCHAIN_GCC_LM32
+	bool "4.5.2"
+	depends on ADK_TARGET_ARCH_LM32
+
 config ADK_TOOLCHAIN_GCC_NDS32
 	bool "nds32-6.3.0-open"
 	depends on ADK_TARGET_ARCH_NDS32

+ 3 - 0
target/config/Config.in.kernelfmt

@@ -40,6 +40,9 @@ config ADK_TARGET_KERNEL_VMLINUX_SREC
 config ADK_TARGET_KERNEL_XIPIMAGE
 	bool
 
+config ADK_TARGET_KERNEL_SIMPLEIMAGE
+	bool
+
 config ADK_TARGET_KERNEL
 	string
 	default "uImage" if ADK_TARGET_KERNEL_UIMAGE

+ 1 - 1
target/linux/Config.in.kernelversion

@@ -27,7 +27,6 @@ default ADK_TARGET_LINUX_KERNEL_VERSION_4_19
 
 config ADK_TARGET_LINUX_KERNEL_VERSION_GIT
 	bool "git"
-	select ADK_TARGET_LINUX_KERNEL_NEW
 	depends on !ADK_TARGET_ARCH_AVR32
 	depends on !ADK_TARGET_ARCH_BFIN
 	depends on !ADK_TARGET_ARCH_FRV
@@ -256,6 +255,7 @@ config ADK_TARGET_LINUX_KERNEL_GIT_VER
 	default "4.4.52" if ADK_TARGET_SYSTEM_PHYTEC_WEGA
 	default "2.6.33" if ADK_TARGET_SYSTEM_KINETIS_K70
 	default "3.14.79" if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
+	default "3.1.0" if ADK_TARGET_SYSTEM_QEMU_LM32
 
 config ADK_TARGET_LINUX_KERNEL_GIT_TYPE
 	string

+ 12 - 0
target/linux/config/Config.in.serial

@@ -76,6 +76,9 @@ config ADK_LINUX_KERNEL_SERIAL_BFIN_UART1
 config ADK_LINUX_KERNEL_SERIAL_8250_INGENIC
 	bool
 
+config ADK_LINUX_KERNEL_SERIAL_MILKYMIST_CONSOLE
+	bool
+
 config ADK_LINUX_KERNEL_SERIAL_BFIN
 	bool "BFIN serial driver"
 	select ADK_LINUX_KERNEL_SERIAL_BFIN_CONSOLE
@@ -328,4 +331,13 @@ config ADK_LINUX_KERNEL_BOARD_GRASSHOPPER_USART0
 	help
 	  Enable second USART on Grasshoper boards
 
+config ADK_LINUX_KERNEL_SERIAL_MILKYMIST
+	bool "Enable UART0 on Milkymist"
+	select ADK_LINUX_KERNEL_SERIAL_MILKYMIST_CONSOLE
+	depends on ADK_TARGET_SYSTEM_QEMU_LM32
+	default y if ADK_TARGET_SYSTEM_QEMU_LM32
+	default n
+	help
+	  Enable second USART on Grasshoper boards
+
 endmenu

+ 45 - 0
target/lm32/Makefile

@@ -5,6 +5,51 @@ include $(ADK_TOPDIR)/rules.mk
 include $(ADK_TOPDIR)/mk/kernel-build.mk
 include $(ADK_TOPDIR)/mk/image.mk
 
+KERNEL:=$(LINUX_DIR)/arch/lm32/boot/simpleImage.milkymist_one
+
+QEMU_ARGS:=-M milkymist 
+QEMU_ARGS+=-nographic -nodefaults -monitor pty -serial stdio -append "console=ttyS0"
+#
+# target helper text
+ifeq ($(ADK_TARGET_FS),archive)
+targethelp:
+	@echo "The RootFS tarball is: $(FW_DIR)/$(ROOTFSTARBALL)"
+ifeq ($(ADK_TARGET_QEMU),y)
+	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
+	@echo "Use following command to create a QEMU Image:"
+	@echo "./scripts/create.sh qemu-${ADK_TARGET_CPU_ARCH}.img $(FW_DIR)/$(ROOTFSUSERTARBALL)"
+	@echo "Start qemu with following options:"
+	@echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL) qemu-${ADK_TARGET_CPU_ARCH}.img'
+endif
+endif
+ifeq ($(ADK_TARGET_FS),initramfs)
+targethelp:
+	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
+	@echo 'The initramfs image is: ${FW_DIR}/${INITRAMFS}'
+ifeq ($(ADK_TARGET_QEMU),y)
+	@echo "Start qemu with following command line:"
+	@echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL) -initrd ${FW_DIR}/${INITRAMFS}'
+endif
+endif
+ifeq ($(ADK_TARGET_FS),initramfsarchive)
+targethelp:
+	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
+	@echo "The RootFS tarball is: $(FW_DIR)/$(ROOTFSUSERTARBALL)"
+endif
+ifeq ($(ADK_TARGET_FS),initramfspiggyback)
+targethelp:
+	@echo 'The kernel+initramfs file is: $(FW_DIR)/${TARGET_KERNEL}'
+ifeq ($(ADK_TARGET_QEMU),y)
+	@echo "Start qemu with following command line:"
+	@echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL)'
+endif
+endif
+
+kernel-strip:
+
+kernel-install: kernel-strip
+	@cp $(KERNEL) $(FW_DIR)/$(TARGET_KERNEL)
+
 # filesystem specific targets
 ifeq ($(ADK_TARGET_FS),initramfs)
 imageinstall: kernel-install $(FW_DIR)/$(INITRAMFS) targethelp

+ 1 - 0
target/lm32/systems/qemu-lm32

@@ -3,6 +3,7 @@ config ADK_TARGET_SYSTEM_QEMU_LM32
 	select ADK_TARGET_QEMU
 	select ADK_TARGET_CPU_LM32
 	select ADK_TARGET_UCLINUX
+	select ADK_TARGET_KERNEL_SIMPLEIMAGE
 	help
 	  Support for Qemu Emulator LM32 architecture.
 

+ 25 - 0
toolchain/binutils/patches/2.32/lm32.patch

@@ -0,0 +1,25 @@
+diff -Nur binutils-2.32.orig/bfd/config.bfd binutils-2.32/bfd/config.bfd
+--- binutils-2.32.orig/bfd/config.bfd	2019-01-19 17:01:32.000000000 +0100
++++ binutils-2.32/bfd/config.bfd	2019-10-08 18:05:48.695171206 +0200
+@@ -787,7 +787,7 @@
+     ;;
+ 
+   lm32-*-*linux*)
+-    targ_defvec=lm32_elf32_fdpic_vec
++    targ_defvec=lm32_elf32_vec
+     targ_selvecs=lm32_elf32_vec
+     ;;
+ 
+diff -Nur binutils-2.32.orig/ld/configure.tgt binutils-2.32/ld/configure.tgt
+--- binutils-2.32.orig/ld/configure.tgt	2019-01-19 17:01:33.000000000 +0100
++++ binutils-2.32/ld/configure.tgt	2019-10-08 18:04:50.170788572 +0200
+@@ -388,7 +388,8 @@
+ 			;;
+ iq2000-*-elf)		targ_emul=elf32iq2000 ; targ_extra_emuls="elf32iq10"
+ 			;;
+-lm32-*-*linux*)		targ_emul=elf32lm32fd ;;
++lm32-*-*linux*)		targ_emul=elf32lm32
++			;;
+ lm32-*-*)		targ_emul=elf32lm32 ; targ_extra_emuls="elf32lm32fd"
+ 			;;
+ m32c-*-elf | m32c-*-rtems*)

+ 0 - 6
toolchain/elf2flt/Makefile.inc

@@ -12,9 +12,3 @@ PKG_GIT:=		branch
 PKG_RELEASE:=		1
 PKG_SITES:=		git://git.osdn.net/gitroot/uclinux-h8/elf2flt.git
 endif
-ifeq ($(ADK_TARGET_ARCH_LM32),y)
-PKG_VERSION:=		3051fec89bbd30de6f952dc3100712feff3ca076
-PKG_GIT:=		hash
-PKG_RELEASE:=		1
-PKG_SITES:=		https://github.com/m-labs/elf2flt-lm32.git
-endif

+ 0 - 34
toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0003-Makefile-fix-build-with-Binutils-2.31.patch

@@ -1,34 +0,0 @@
-From faf1a1646093fbc5ed279bae1c7250c7dfea56f8 Mon Sep 17 00:00:00 2001
-From: Romain Naour <romain.naour@smile.fr>
-Date: Tue, 17 Jul 2018 16:36:16 +0200
-Subject: [PATCH] Makefile: fix build with Binutils 2.31
-
-Binutils added diagnostics.h to bfd.h [1], so elf2flt must create a symlink
-for this header.
-
-Fixes:
-https://gitlab.com/free-electrons/toolchains-builder/-/jobs/82284139
-
-[1] https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;h=95da9854466ada2572b42f5528711a06a2d42db1
-
-Signed-off-by: Romain Naour <romain.naour@smile.fr>
----
- Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile.in b/Makefile.in
-index cfad06c..164e306 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -127,7 +127,7 @@ bfd-headers/.stamp:
- 	rm -rf bfd-headers
- 	mkdir bfd-headers
- 	ln -sf $(BFD_INCLUDE_DIR)/bfd.h bfd-headers/bfd.h
--	for f in ansidecl filenames hashtab libiberty symcat; do \
-+	for f in ansidecl diagnostics filenames hashtab libiberty symcat; do \
- 		ln -sf $(BINUTILS_INCLUDE_DIR)/$$f.h bfd-headers/$$f.h || exit 1; \
- 	done
- 	ln -sf $(BINUTILS_INCLUDE_DIR)/elf bfd-headers/elf
--- 
-2.7.4
-

+ 0 - 0
toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0001-lm32.patch → toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0001-lm32.patch


+ 0 - 0
toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0002-sh2.patch → toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0002-sh2.patch


+ 8 - 0
toolchain/gcc/Makefile.inc

@@ -49,6 +49,14 @@ PKG_RELEASE:=		1
 DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.gz
 LIBSTDCXXVER:=		19
 endif
+ifeq ($(ADK_TOOLCHAIN_GCC_LM32),y)
+PKG_VERSION:=		4.5.2
+PKG_HASH:=		07b880faf29f3f9d9c0953717002ac29f5d061427797d2487a7c9c169e6395b3
+PKG_SITES:=		https://ftp.gnu.org/gnu/gcc/gcc-$(PKG_VERSION)/
+PKG_RELEASE:=		1
+DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.gz
+LIBSTDCXXVER:=		19
+endif
 ifeq ($(ADK_TOOLCHAIN_GCC_NDS32),y)
 PKG_VERSION:=		nds32-6.3.0-open
 PKG_HASH:=		b23ce96df25dfdd5526496a3c2cd7ee1da4ed4094971a2e0c47c73ad7e1ad30a