From: John Jacques <john.jacq...@lsi.com> Signed-off-by: John Jacques <john.jacq...@lsi.com> --- arch/arm/boot/emuboot/Makefile | 28 +++++++++++++ arch/arm/boot/emuboot/emuboot.S | 87 +++++++++++++++++++++++++++++++++++++++ arch/arm/boot/emuboot/emuboot.lds | 30 ++++++++++++++ arch/arm/boot/emuboot/pack.py | 10 +++++ 4 files changed, 155 insertions(+) create mode 100644 arch/arm/boot/emuboot/Makefile create mode 100644 arch/arm/boot/emuboot/emuboot.S create mode 100644 arch/arm/boot/emuboot/emuboot.lds create mode 100644 arch/arm/boot/emuboot/pack.py
diff --git a/arch/arm/boot/emuboot/Makefile b/arch/arm/boot/emuboot/Makefile new file mode 100644 index 0000000..1d8e491 --- /dev/null +++ b/arch/arm/boot/emuboot/Makefile @@ -0,0 +1,28 @@ +# Build an image for emulation. + +AS = $(CROSS_COMPILE)gcc -c +LD = $(CROSS_COMPILE)ld +OBJCOPY = $(CROSS_COMPILE)objcopy + +DTC = ../../../../scripts/dtc/dtc +DTS = ../dts/axm55xx.dts +ZIMAGE = ../zImage + +all: clean linux.img + +clean: + rm -f linux.img emuboot.o zImage.emu axm55xx.dtb + +linux.img: emuboot.o emuboot.lds zImage.emu + $(LD) -o linux.tmp --script=emuboot.lds + $(OBJCOPY) -O binary -R .note -R .comment -S linux.tmp $@ + rm -f linux.tmp + +zImage.emu: $(ZIMAGE) axm55xx.dtb + python pack.py $(ZIMAGE) $< > $@ + +axm55xx.dtb: $(DTS) + $(DTC) -O dtb -o $@ $< + +emuboot.o: emuboot.S + $(AS) -o $@ $< diff --git a/arch/arm/boot/emuboot/emuboot.S b/arch/arm/boot/emuboot/emuboot.S new file mode 100644 index 0000000..a71a412 --- /dev/null +++ b/arch/arm/boot/emuboot/emuboot.S @@ -0,0 +1,87 @@ +/* + * emuboot.S - simple register setup code for stand-alone Linux booting + * + * Copyright (C) 2011 ARM Limited. All rights reserved. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE.txt file. + */ + +#define SPIN_TABLE_BASE 0x10000000 + + .syntax unified + .text + + .globl _start +_start: + @ + @ Allow the debugger to gain control... + @ +1: ldr r0, =0 + cmp r0, #0 + beq 1b + + @ + @ Program architected timer frequency + @ + mrc p15, 0, r0, c0, c1, 1 @ CPUID_EXT_PFR1 + lsr r0, r0, #16 + ands r0, r0, #1 @ Check generic timer support + beq 1f + ldr r0, =6250000 @ 6.25 MHz timer frequency + mcr p15, 0, r0, c14, c0, 0 @ CNTFRQ +1: + @ + @ CPU initialisation + @ + mrc p15, 0, r0, c0, c0, 5 @ MPIDR (ARMv7 only) + and r0, r0, #15 @ CPU number + cmp r0, #0 @ primary CPU? + beq 2f + + @ + @ Secondary CPUs + @ + ldr r1, =SPIN_TABLE_BASE + adr r2, 1f + ldmia r2, {r3 - r7} @ move the code to a location + stmia r1, {r3 - r7} @ less likely to be overridden + add r0, r1, #0x20 @ Entry point for secondary + @ CPUs @ SPIN_TABLE_BASE+0x20 + mov r2, #0 + str r2, [r0, #0] @ ensure initially zero + mov pc, r1 @ branch to the relocated code +1: + wfe + ldr r1, [r0] + cmp r1, #0 + beq 1b + mov pc, r1 @ branch to the given address + + @ + @ Kernel parameters + @ +2: mov r0, #0 @ Must be zero + mov r1, #0 @ Machine type (not needed) + adr r2, atags @ ATAGS pointer + mov r3, #0 + ldr lr, =kernel + mov pc, lr @ jump to the kernel + + .org 0x100 +atags: + @ ATAG_CORE + .long 2 + .long 0x54410001 + + @ ATAG_CMDLINE + .long (1f - .) >> 2 + .long 0x54410009 + .asciz "root=/dev/mmcblk0 rootwait ip=none mem=1024M console=ttyAMA0" + + .align 2 +1: + + @ ATAG_NONE + .long 0 + .long 0x00000000 diff --git a/arch/arm/boot/emuboot/emuboot.lds b/arch/arm/boot/emuboot/emuboot.lds new file mode 100644 index 0000000..0a24a17 --- /dev/null +++ b/arch/arm/boot/emuboot/emuboot.lds @@ -0,0 +1,30 @@ +/* + * emuboot.lds + * + * Copyright (C) 2011 ARM Limited. All rights reserved. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE.txt file. + */ + +OUTPUT_FORMAT("elf32-littlearm") +OUTPUT_ARCH(arm) +TARGET(binary) + +INPUT(./emuboot.o) +INPUT(./zImage.emu) + +PHYS_OFFSET = 0x00000000; + +SECTIONS +{ + . = PHYS_OFFSET; + .text : { emuboot.o } + . = PHYS_OFFSET + 0x8000 - 0x0; + kernel = . + 0x0; + .kernel : { ./zImage.emu } + . = PHYS_OFFSET + 0x00800000; + filesystem = .; + .data : { *(.data) } + .bss : { *(.bss) } +} diff --git a/arch/arm/boot/emuboot/pack.py b/arch/arm/boot/emuboot/pack.py new file mode 100644 index 0000000..fe2ce70 --- /dev/null +++ b/arch/arm/boot/emuboot/pack.py @@ -0,0 +1,10 @@ +import sys + +while len(sys.argv) > 1: + f = open(sys.argv.pop(1), "rb") + f.seek(0, 2) + sz = f.tell() + f.seek(0,0) + pad = ((sz + 3) & ~3) - sz + sys.stdout.write(f.read() + '\0'*pad) + f.close() -- 1.8.3 _______________________________________________ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto