From 385141e2052a41c8e5b1f77462983a84516f8a8a Mon Sep 17 00:00:00 2001 From: Amrit Panesar Date: Wed, 19 Oct 2016 10:21:06 -0700 Subject: [PATCH] re-add armStart.S and fix CMakeLists.txt --- CMakeLists.txt | 12 +++- kernel.elf | Bin 98260 -> 0 bytes kernel.img | Bin 46272 -> 0 bytes src/armStart.S | 163 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 174 insertions(+), 1 deletion(-) delete mode 100755 kernel.elf delete mode 100755 kernel.img create mode 100644 src/armStart.S diff --git a/CMakeLists.txt b/CMakeLists.txt index e8a8b10..fae4d53 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,8 +61,18 @@ add_executable( ${TARGET_BUILD} ${rpiIncludes} ) +set_target_properties( ${TARGET_BUILD} + PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" +) + +get_target_property(RUNTIME_OUTPUT_DIRECTORY ${TARGET_BUILD} RUNTIME_OUTPUT_DIRECTORY) + add_custom_command( TARGET ${TARGET_BUILD} POST_BUILD COMMAND ${CMAKE_OBJCOPY} ${TARGET_BUILD} -O binary ${TARGET_OUTPUT} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + WORKING_DIRECTORY ${RUNTIME_OUTPUT_DIRECTORY} COMMENT "Convert the ELF output file to a binary image" ) + diff --git a/kernel.elf b/kernel.elf deleted file mode 100755 index 8da38748cddeb843847229d693a09afc7c334074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98260 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 Njg89`)x)j}@o%{9hRpx~ diff --git a/src/armStart.S b/src/armStart.S new file mode 100644 index 0000000..0fce4eb --- /dev/null +++ b/src/armStart.S @@ -0,0 +1,163 @@ +// Part of the Raspberry-Pi Bare Metal Tutorials +// Copyright (c) 2013-2015, Brian Sidebotham +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + + +.section ".text.startup" + +.global _start +.global _get_stack_pointer +.global _exception_table +.global _enable_interrupts + +// From the ARM ARM (Architecture Reference Manual). Make sure you get the +// ARMv5 documentation which includes the ARMv6 documentation which is the +// correct processor type for the Broadcom BCM2835. The ARMv6-M manuals +// available on the ARM website are for Cortex-M parts only and are very +// different. +// +// See ARM section A2.2 (Processor Modes) + +.equ CPSR_MODE_USER, 0x10 +.equ CPSR_MODE_FIQ, 0x11 +.equ CPSR_MODE_IRQ, 0x12 +.equ CPSR_MODE_SVR, 0x13 +.equ CPSR_MODE_ABORT, 0x17 +.equ CPSR_MODE_UNDEFINED, 0x1B +.equ CPSR_MODE_SYSTEM, 0x1F + +// See ARM section A2.5 (Program status registers) +.equ CPSR_IRQ_INHIBIT, 0x80 +.equ CPSR_FIQ_INHIBIT, 0x40 +.equ CPSR_THUMB, 0x20 + +.equ SCTLR_ENABLE_DATA_CACHE, 0x4 +.equ SCTLR_ENABLE_BRANCH_PREDICTION, 0x800 +.equ SCTLR_ENABLE_INSTRUCTION_CACHE, 0x1000 + +_start: + ldr pc, _reset_h + ldr pc, _undefined_instruction_vector_h + ldr pc, _software_interrupt_vector_h + ldr pc, _prefetch_abort_vector_h + ldr pc, _data_abort_vector_h + ldr pc, _unused_handler_h + ldr pc, _interrupt_vector_h + ldr pc, _fast_interrupt_vector_h + +_reset_h: .word _reset_ +_undefined_instruction_vector_h: .word undefined_instruction_vector +_software_interrupt_vector_h: .word software_interrupt_vector +_prefetch_abort_vector_h: .word prefetch_abort_vector +_data_abort_vector_h: .word data_abort_vector +_unused_handler_h: .word _reset_ +_interrupt_vector_h: .word interrupt_vector +_fast_interrupt_vector_h: .word fast_interrupt_vector + +_reset_: + // We enter execution in supervisor mode. For more information on + // processor modes see ARM Section A2.2 (Processor Modes) + + mov r0, #0x8000 + mov r1, #0x0000 + ldmia r0!,{r2, r3, r4, r5, r6, r7, r8, r9} + stmia r1!,{r2, r3, r4, r5, r6, r7, r8, r9} + ldmia r0!,{r2, r3, r4, r5, r6, r7, r8, r9} + stmia r1!,{r2, r3, r4, r5, r6, r7, r8, r9} + + // Initialise Stack Pointers --------------------------------------------- + + // We're going to use interrupt mode, so setup the interrupt mode + // stack pointer which differs to the application stack pointer: + mov r0, #(CPSR_MODE_IRQ | CPSR_IRQ_INHIBIT | CPSR_FIQ_INHIBIT ) + msr cpsr_c, r0 + mov sp, #0x7000 + + // Switch back to supervisor mode (our application mode) and + // set the stack pointer. Remember that the stack works its way + // down memory, our heap will work it's way up from after the + // application. + mov r0, #(CPSR_MODE_SVR | CPSR_IRQ_INHIBIT | CPSR_FIQ_INHIBIT ) + msr cpsr_c, r0 + mov sp, #0x8000 + + // Enable L1 Cache ------------------------------------------------------- + + // R0 = System Control Register + mrc p15,0,r0,c1,c0,0 + + // Enable caches and branch prediction + orr r0,#SCTLR_ENABLE_BRANCH_PREDICTION + orr r0,#SCTLR_ENABLE_DATA_CACHE + orr r0,#SCTLR_ENABLE_INSTRUCTION_CACHE + + + // System Control Register = R0 + mcr p15,0,r0,c1,c0,0 + + + // Enable VFP ------------------------------------------------------------ + + // r1 = Access Control Register + MRC p15, #0, r1, c1, c0, #2 + // enable full access for p10,11 + ORR r1, r1, #(0xf << 20) + // ccess Control Register = r1 + MCR p15, #0, r1, c1, c0, #2 + MOV r1, #0 + // flush prefetch buffer because of FMXR below + MCR p15, #0, r1, c7, c5, #4 + // and CP 10 & 11 were only just enabled + // Enable VFP itself + MOV r0,#0x40000000 + // FPEXC = r0 + FMXR FPEXC, r0 + + // The c-startup function which we never return from. This function will + // initialise the ro data section (most things that have the const + // declaration) and initialise the bss section variables to 0 (generally + // known as automatics). It'll then call main, which should never return. + bl _cstartup + + // If main does return for some reason, just catch it and stay here. +_inf_loop: + b _inf_loop + + +_get_stack_pointer: + // Return the stack pointer value + str sp, [sp] + ldr r0, [sp] + + // Return from the function + mov pc, lr + + +_enable_interrupts: + mrs r0, cpsr + bic r0, r0, #0x80 + msr cpsr_c, r0 + + mov pc, lr