Calypso Compal-E86: Updates for execution out of FLASH. From Craig Comstock

This commit is contained in:
Gregory Nutt 2015-05-08 18:08:38 -06:00
parent 956d8e717d
commit be0e926730
4 changed files with 189 additions and 114 deletions

View File

@ -1,7 +1,10 @@
compal_e86 compal_e86
========== ==========
This directory contains the board support for compal e86 phones. This directory contains the board support for compal e86 phones. This port
is tested on the following phone:
* motorola c139 (compal e86) with flash configuration
This port is based on patches contributed by Denis Carikli for both the This port is based on patches contributed by Denis Carikli for both the
compal e99 and e88. At the time of initial check-in, the following phones compal e99 and e88. At the time of initial check-in, the following phones
@ -36,8 +39,24 @@ the host system. Sercomm is the transport used by osmocom-bb that runs on top
of serial. See http://bb.osmocom.org/trac/wiki/nuttx-bb/run for detailed of serial. See http://bb.osmocom.org/trac/wiki/nuttx-bb/run for detailed
the usage of nuttx with sercomm. the usage of nuttx with sercomm.
Loading NuttX Running NuttX From Flash
============= ========================
Flash layout:
0x00000 - 0x02000 - original compal loader
0x02000 - 0x10000 - simple binary to jump to 0x10000 (jumper.e86loader.bin)
0x10000 - ??? - NuttX binary (nuttx.bin)
Using osmocon/osmoload, retrieve the compal loader, flash it and the
jumper.e86loader.bin as well as nuttx.bin.
The jumper app is a modified version of the menu app in osmocom-bb, branch
jolly/menu. The app disabled irqs (setup by compal loader?) and jumps to
0x10000. This app is submitted as a patch to osmocom-bb mailing list.
Loading NuttX (highram)
=======================
The osmocom-bb wiki describes how to load NuttX. See The osmocom-bb wiki describes how to load NuttX. See
http://bb.osmocom.org/trac/wiki/nuttx-bb for detailed information. http://bb.osmocom.org/trac/wiki/nuttx-bb for detailed information.

View File

@ -37,7 +37,11 @@ include ${TOPDIR}/.config
include ${TOPDIR}/tools/Config.mk include ${TOPDIR}/tools/Config.mk
include ${TOPDIR}/arch/arm/src/arm/Toolchain.defs include ${TOPDIR}/arch/arm/src/arm/Toolchain.defs
LDSCRIPT = highram.ld ifeq ($(CONFIG_BOOT_RUNFROMFLASH),y)
LDSCRIPT = flash.ld
else
LDSCRIPT = highram.ld
endif
ifeq ($(WINTOOL),y) ifeq ($(WINTOOL),y)
# Windows-native toolchains # Windows-native toolchains

View File

@ -42,8 +42,9 @@ CONFIG_RAW_BINARY=y
# Debug Options # Debug Options
# #
# CONFIG_DEBUG is not set # CONFIG_DEBUG is not set
CONFIG_ARCH_HAVE_STACKCHECK=y
# CONFIG_ARCH_HAVE_HEAPCHECK is not set # CONFIG_ARCH_HAVE_HEAPCHECK is not set
CONFIG_ARCH_HAVE_STACKCHECK=y
# CONFIG_STACK_COLORATION is not set
# CONFIG_DEBUG_SYMBOLS is not set # CONFIG_DEBUG_SYMBOLS is not set
CONFIG_ARCH_HAVE_CUSTOMOPT=y CONFIG_ARCH_HAVE_CUSTOMOPT=y
# CONFIG_DEBUG_NOOPT is not set # CONFIG_DEBUG_NOOPT is not set
@ -87,6 +88,7 @@ CONFIG_ARCH_CHIP_CALYPSO=y
# CONFIG_ARCH_CHIP_SAMA5 is not set # CONFIG_ARCH_CHIP_SAMA5 is not set
# CONFIG_ARCH_CHIP_SAMD is not set # CONFIG_ARCH_CHIP_SAMD is not set
# CONFIG_ARCH_CHIP_SAM34 is not set # CONFIG_ARCH_CHIP_SAM34 is not set
# CONFIG_ARCH_CHIP_SAMV7 is not set
# CONFIG_ARCH_CHIP_STM32 is not set # CONFIG_ARCH_CHIP_STM32 is not set
# CONFIG_ARCH_CHIP_STR71X is not set # CONFIG_ARCH_CHIP_STR71X is not set
CONFIG_ARCH_ARM7TDMI=y CONFIG_ARCH_ARM7TDMI=y
@ -95,11 +97,13 @@ CONFIG_ARCH_ARM7TDMI=y
# CONFIG_ARCH_CORTEXM0 is not set # CONFIG_ARCH_CORTEXM0 is not set
# CONFIG_ARCH_CORTEXM3 is not set # CONFIG_ARCH_CORTEXM3 is not set
# CONFIG_ARCH_CORTEXM4 is not set # CONFIG_ARCH_CORTEXM4 is not set
# CONFIG_ARCH_CORTEXM7 is not set
# CONFIG_ARCH_CORTEXA5 is not set # CONFIG_ARCH_CORTEXA5 is not set
# CONFIG_ARCH_CORTEXA8 is not set # CONFIG_ARCH_CORTEXA8 is not set
CONFIG_ARCH_FAMILY="arm" CONFIG_ARCH_FAMILY="arm"
CONFIG_ARCH_CHIP="calypso" CONFIG_ARCH_CHIP="calypso"
# CONFIG_ARCH_HAVE_FPU is not set # CONFIG_ARCH_HAVE_FPU is not set
# CONFIG_ARCH_HAVE_DPFPU is not set
CONFIG_ARCH_HAVE_LOWVECTORS=y CONFIG_ARCH_HAVE_LOWVECTORS=y
# CONFIG_ARCH_LOWVECTORS is not set # CONFIG_ARCH_LOWVECTORS is not set
@ -210,6 +214,7 @@ CONFIG_NSH_MMCSDMINOR=0
# #
# Board-Specific Options # Board-Specific Options
# #
# CONFIG_LIB_BOARDCTL is not set
# #
# RTOS Features # RTOS Features
@ -328,11 +333,16 @@ CONFIG_SPI=y
# CONFIG_SPI_OWNBUS is not set # CONFIG_SPI_OWNBUS is not set
CONFIG_SPI_EXCHANGE=y CONFIG_SPI_EXCHANGE=y
# CONFIG_SPI_CMDDATA is not set # CONFIG_SPI_CMDDATA is not set
# CONFIG_SPI_CALLBACK is not set
# CONFIG_SPI_BITBANG is not set # CONFIG_SPI_BITBANG is not set
# CONFIG_I2S is not set # CONFIG_I2S is not set
#
# Timer Driver Support
#
# CONFIG_TIMER is not set
# CONFIG_RTC is not set # CONFIG_RTC is not set
# CONFIG_WATCHDOG is not set # CONFIG_WATCHDOG is not set
# CONFIG_TIMER is not set
# CONFIG_ANALOG is not set # CONFIG_ANALOG is not set
# CONFIG_AUDIO_DEVICES is not set # CONFIG_AUDIO_DEVICES is not set
# CONFIG_VIDEO_DEVICES is not set # CONFIG_VIDEO_DEVICES is not set
@ -346,7 +356,7 @@ CONFIG_SPI_EXCHANGE=y
# CONFIG_PM is not set # CONFIG_PM is not set
# CONFIG_POWER is not set # CONFIG_POWER is not set
# CONFIG_SENSORS is not set # CONFIG_SENSORS is not set
CONFIG_SERCOMM_CONSOLE=y # CONFIG_SERCOMM_CONSOLE is not set
CONFIG_SERIAL=y CONFIG_SERIAL=y
# CONFIG_DEV_LOWCONSOLE is not set # CONFIG_DEV_LOWCONSOLE is not set
# CONFIG_16550_UART is not set # CONFIG_16550_UART is not set
@ -395,6 +405,7 @@ CONFIG_OTHER_SERIAL_CONSOLE=y
# System Logging # System Logging
# #
# CONFIG_RAMLOG is not set # CONFIG_RAMLOG is not set
# CONFIG_SYSLOG_CONSOLE is not set
# #
# Networking Support # Networking Support
@ -493,6 +504,7 @@ CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048
# CONFIG_LIBC_PERROR_STDOUT is not set # CONFIG_LIBC_PERROR_STDOUT is not set
CONFIG_ARCH_LOWPUTC=y CONFIG_ARCH_LOWPUTC=y
# CONFIG_LIBC_LOCALTIME is not set # CONFIG_LIBC_LOCALTIME is not set
# CONFIG_TIME_EXTENDED is not set
CONFIG_LIB_SENDFILE_BUFSIZE=512 CONFIG_LIB_SENDFILE_BUFSIZE=512
# CONFIG_ARCH_ROMGETC is not set # CONFIG_ARCH_ROMGETC is not set
# CONFIG_ARCH_OPTIMIZED_FUNCTIONS is not set # CONFIG_ARCH_OPTIMIZED_FUNCTIONS is not set
@ -551,10 +563,10 @@ CONFIG_EXAMPLES_NSH=y
# CONFIG_EXAMPLES_NXTEXT is not set # CONFIG_EXAMPLES_NXTEXT is not set
# CONFIG_EXAMPLES_OSTEST is not set # CONFIG_EXAMPLES_OSTEST is not set
# CONFIG_EXAMPLES_PIPE is not set # CONFIG_EXAMPLES_PIPE is not set
# CONFIG_EXAMPLES_PPPD is not set
# CONFIG_EXAMPLES_POSIXSPAWN is not set # CONFIG_EXAMPLES_POSIXSPAWN is not set
# CONFIG_EXAMPLES_QENCODER is not set # CONFIG_EXAMPLES_QENCODER is not set
# CONFIG_EXAMPLES_RGMP is not set # CONFIG_EXAMPLES_RGMP is not set
# CONFIG_EXAMPLES_ROMFS is not set
# CONFIG_EXAMPLES_SENDMAIL is not set # CONFIG_EXAMPLES_SENDMAIL is not set
# CONFIG_EXAMPLES_SERIALBLASTER is not set # CONFIG_EXAMPLES_SERIALBLASTER is not set
# CONFIG_EXAMPLES_SERIALRX is not set # CONFIG_EXAMPLES_SERIALRX is not set
@ -567,7 +579,6 @@ CONFIG_EXAMPLES_NSH=y
# CONFIG_EXAMPLES_THTTPD is not set # CONFIG_EXAMPLES_THTTPD is not set
# CONFIG_EXAMPLES_TIFF is not set # CONFIG_EXAMPLES_TIFF is not set
# CONFIG_EXAMPLES_TOUCHSCREEN is not set # CONFIG_EXAMPLES_TOUCHSCREEN is not set
# CONFIG_EXAMPLES_UDP is not set
# CONFIG_EXAMPLES_WEBSERVER is not set # CONFIG_EXAMPLES_WEBSERVER is not set
# CONFIG_EXAMPLES_USBSERIAL is not set # CONFIG_EXAMPLES_USBSERIAL is not set
# CONFIG_EXAMPLES_USBTERM is not set # CONFIG_EXAMPLES_USBTERM is not set
@ -584,6 +595,7 @@ CONFIG_EXAMPLES_NSH=y
# #
# CONFIG_INTERPRETERS_FICL is not set # CONFIG_INTERPRETERS_FICL is not set
# CONFIG_INTERPRETERS_PCODE is not set # CONFIG_INTERPRETERS_PCODE is not set
# CONFIG_INTERPRETERS_MICROPYTHON is not set
# #
# Network Utilities # Network Utilities
@ -593,15 +605,11 @@ CONFIG_EXAMPLES_NSH=y
# Networking Utilities # Networking Utilities
# #
# CONFIG_NETUTILS_CODECS is not set # CONFIG_NETUTILS_CODECS is not set
# CONFIG_NETUTILS_DHCPD is not set
# CONFIG_NETUTILS_FTPC is not set # CONFIG_NETUTILS_FTPC is not set
# CONFIG_NETUTILS_FTPD is not set
# CONFIG_NETUTILS_JSON is not set # CONFIG_NETUTILS_JSON is not set
# CONFIG_NETUTILS_SMTP is not set # CONFIG_NETUTILS_SMTP is not set
# CONFIG_NETUTILS_TFTPC is not set
# CONFIG_NETUTILS_THTTPD is not set # CONFIG_NETUTILS_THTTPD is not set
# CONFIG_NETUTILS_NETLIB is not set # CONFIG_NETUTILS_PPPD is not set
# CONFIG_NETUTILS_WEBCLIENT is not set
# #
# FreeModBus # FreeModBus
@ -635,6 +643,7 @@ CONFIG_NSH_BUILTIN_APPS=y
# CONFIG_NSH_DISABLE_CD is not set # CONFIG_NSH_DISABLE_CD is not set
# CONFIG_NSH_DISABLE_CP is not set # CONFIG_NSH_DISABLE_CP is not set
# CONFIG_NSH_DISABLE_CMP is not set # CONFIG_NSH_DISABLE_CMP is not set
CONFIG_NSH_DISABLE_DATE=y
# CONFIG_NSH_DISABLE_DD is not set # CONFIG_NSH_DISABLE_DD is not set
# CONFIG_NSH_DISABLE_DF is not set # CONFIG_NSH_DISABLE_DF is not set
# CONFIG_NSH_DISABLE_DELROUTE is not set # CONFIG_NSH_DISABLE_DELROUTE is not set
@ -655,6 +664,7 @@ CONFIG_NSH_BUILTIN_APPS=y
# CONFIG_NSH_DISABLE_MKRD is not set # CONFIG_NSH_DISABLE_MKRD is not set
# CONFIG_NSH_DISABLE_MH is not set # CONFIG_NSH_DISABLE_MH is not set
# CONFIG_NSH_DISABLE_MOUNT is not set # CONFIG_NSH_DISABLE_MOUNT is not set
# CONFIG_NSH_DISABLE_MV is not set
# CONFIG_NSH_DISABLE_MW is not set # CONFIG_NSH_DISABLE_MW is not set
# CONFIG_NSH_DISABLE_PS is not set # CONFIG_NSH_DISABLE_PS is not set
# CONFIG_NSH_DISABLE_PUT is not set # CONFIG_NSH_DISABLE_PUT is not set
@ -705,119 +715,19 @@ CONFIG_NSH_CONSOLE=y
# #
# System Libraries and NSH Add-Ons # System Libraries and NSH Add-Ons
# #
#
# Custom Free Memory Command
#
# CONFIG_SYSTEM_FREE is not set # CONFIG_SYSTEM_FREE is not set
#
# EMACS-like Command Line Editor
#
# CONFIG_SYSTEM_CLE is not set # CONFIG_SYSTEM_CLE is not set
#
# CU Minimal Terminal
#
# CONFIG_SYSTEM_CUTERM is not set # CONFIG_SYSTEM_CUTERM is not set
#
# FLASH Program Installation
#
# CONFIG_SYSTEM_INSTALL is not set # CONFIG_SYSTEM_INSTALL is not set
#
# FLASH Erase-all Command
#
#
# Intel HEX to binary conversion
#
# CONFIG_SYSTEM_HEX2BIN is not set # CONFIG_SYSTEM_HEX2BIN is not set
#
# I2C tool
#
#
# INI File Parser
#
# CONFIG_SYSTEM_INIFILE is not set # CONFIG_SYSTEM_INIFILE is not set
#
# NxPlayer media player library / command Line
#
#
# RAM test
#
# CONFIG_SYSTEM_RAMTEST is not set # CONFIG_SYSTEM_RAMTEST is not set
#
# readline()
#
CONFIG_SYSTEM_READLINE=y CONFIG_SYSTEM_READLINE=y
CONFIG_READLINE_ECHO=y CONFIG_READLINE_ECHO=y
#
# P-Code Support
#
#
# PHY Tool
#
#
# Power Off
#
CONFIG_SYSTEM_POWEROFF=y CONFIG_SYSTEM_POWEROFF=y
#
# RAMTRON
#
# CONFIG_SYSTEM_RAMTRON is not set # CONFIG_SYSTEM_RAMTRON is not set
#
# SD Card
#
# CONFIG_SYSTEM_SDCARD is not set # CONFIG_SYSTEM_SDCARD is not set
#
# Sudoku
#
# CONFIG_SYSTEM_SUDOKU is not set # CONFIG_SYSTEM_SUDOKU is not set
#
# Sysinfo
#
# CONFIG_SYSTEM_SYSINFO is not set # CONFIG_SYSTEM_SYSINFO is not set
#
# VI Work-Alike Editor
#
# CONFIG_SYSTEM_VI is not set # CONFIG_SYSTEM_VI is not set
#
# Stack Monitor
#
#
# USB CDC/ACM Device Commands
#
#
# USB Composite Device Commands
#
#
# USB Mass Storage Device Commands
#
#
# USB Monitor
#
#
# Zmodem Commands
#
# CONFIG_SYSTEM_ZMODEM is not set # CONFIG_SYSTEM_ZMODEM is not set

View File

@ -0,0 +1,142 @@
/*
* Linker script for flashed applications on the Compal E86
*
* This script creates a binary that can be linked at 0xFFFF, starting
* with the second flash page. This is what a phone application or
* pure layer1 device uses.
*
* XXX: interrupts?
*
*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY
{
LOADR (rx) : ORIGIN = 0x00000000, LENGTH = 0x10000
/* 4 MBytes of external flash memory (minus loader) */
FLASH (rx) : ORIGIN = 0x00010000, LENGTH = 0x3F0000
/* 256 kBytes of internal zero-waitstate sram */
IRAM (rw) : ORIGIN = 0x00800000, LENGTH = 0x040000
/* 256 kBytes of external slow sram */
ERAM (rw) : ORIGIN = 0x01000000, LENGTH = 0x040000
}
SECTIONS
{
/* entrypoint */
.text.start : {
PROVIDE(_start = .);
KEEP(*(.text.start))
*(.text.start)
} > FLASH
/* exception vectors from 0x80001c to 0x800034 */
.text.exceptions 0x80001c : {
KEEP(*(.text.exceptions))
* (.text.exceptions)
. = ALIGN(4);
} > IRAM AT> FLASH
PROVIDE(_exceptions = LOADADDR(.text.exceptions));
/* code */
.text : {
_stext = ABSOLUTE(.) ;
/* regular code */
*(.text*)
/* gcc voodoo */
*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
_etext = ABSOLUTE(.) ;
} > FLASH
PROVIDE(_text_start = ADDR(.text));
PROVIDE(_text_end = ADDR(.text) + SIZEOF(.text));
/* constructor pointers */
.ctors : {
/* ctor count */
LONG(SIZEOF(.ctors) / 4 - 2)
/* ctor pointers */
KEEP(*(SORT(.ctors)))
/* end of list */
LONG(0)
} > FLASH
PROVIDE(_ctor_start = LOADADDR(.ctors));
PROVIDE(_ctor_end = LOADADDR(.ctors) + SIZEOF(.ctors));
/* destructor pointers */
.dtors : {
/* dtor count */
LONG(SIZEOF(.dtors) / 4 - 2)
/* dtor pointers */
KEEP(*(SORT(.dtors)))
/* end of list */
LONG(0)
} > FLASH
PROVIDE(_dtor_start = LOADADDR(.dtors));
PROVIDE(_dtor_end = LOADADDR(.dtors) + SIZEOF(.dtors));
/* read-only data */
.rodata : {
*(.rodata*)
_eronly = ABSOLUTE(.) ;
} > FLASH
PROVIDE(_rodata_start = ADDR(.rodata));
PROVIDE(_rodata_end = ADDR(.rodata) + SIZEOF(.rodata));
/* pic offset tables */
.got : {
. = ALIGN(4);
*(.got)
*(.got.plt) *(.igot.plt) *(.got) *(.igot)
. = ALIGN(4);
} > FLASH
PROVIDE(_got_start = ADDR(.got));
PROVIDE(_got_end = ADDR(.got) + SIZEOF(.got));
/* reserved ram */
.compal.reservedram 0x800000 (NOLOAD) : {
. = 0xff;
} > IRAM
/* initialized data */
.data : AT (LOADADDR(.got) + SIZEOF(.got)) {
. = ALIGN(4);
_sdata = ABSOLUTE(.);
*(.data)
_edata = ABSOLUTE(.);
. = ALIGN(4);
} > IRAM
PROVIDE(__data_start = LOADADDR(.data));
PROVIDE(__data_end = LOADADDR(.data) + SIZEOF(.data));
PROVIDE(_data_start = ADDR(.data));
PROVIDE(_data_end = ADDR(.data) + SIZEOF(.data));
/* ram code */
.ramtext : AT (LOADADDR(.data) + SIZEOF(.data)) {
. = ALIGN(4);
*(.ramtext)
. = ALIGN(4);
} > IRAM
PROVIDE(__ramtext_start = LOADADDR(.ramtext));
PROVIDE(__ramtext_end = LOADADDR(.ramtext) + SIZEOF(.ramtext));
PROVIDE(_ramtext_start = ADDR(.ramtext));
PROVIDE(_ramtext_end = ADDR(.ramtext) + SIZEOF(.ramtext));
/* uninitialized data */
.bss (NOLOAD) : {
. = ALIGN(4);
_sbss = ABSOLUTE(.);
*(.bss)
_ebss = ABSOLUTE(.);
. = ALIGN(4);
} > IRAM
PROVIDE(__bss_start = ADDR(.bss));
PROVIDE(__bss_end = ADDR(.bss) + SIZEOF(.bss));
PROVIDE(_bss_start = __bss_start);
PROVIDE(_bss_end = __bss_end);
/* end of image */
. = ALIGN(4);
_end = .;
PROVIDE(end = .);
}