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 954bf9c60b
commit 868acfe24f
4 changed files with 189 additions and 114 deletions

View File

@ -1,7 +1,10 @@
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
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
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
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}/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)
# Windows-native toolchains

View File

@ -42,8 +42,9 @@ CONFIG_RAW_BINARY=y
# Debug Options
#
# CONFIG_DEBUG is not set
CONFIG_ARCH_HAVE_STACKCHECK=y
# 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_ARCH_HAVE_CUSTOMOPT=y
# 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_SAMD 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_STR71X is not set
CONFIG_ARCH_ARM7TDMI=y
@ -95,11 +97,13 @@ CONFIG_ARCH_ARM7TDMI=y
# CONFIG_ARCH_CORTEXM0 is not set
# CONFIG_ARCH_CORTEXM3 is not set
# CONFIG_ARCH_CORTEXM4 is not set
# CONFIG_ARCH_CORTEXM7 is not set
# CONFIG_ARCH_CORTEXA5 is not set
# CONFIG_ARCH_CORTEXA8 is not set
CONFIG_ARCH_FAMILY="arm"
CONFIG_ARCH_CHIP="calypso"
# CONFIG_ARCH_HAVE_FPU is not set
# CONFIG_ARCH_HAVE_DPFPU is not set
CONFIG_ARCH_HAVE_LOWVECTORS=y
# CONFIG_ARCH_LOWVECTORS is not set
@ -210,6 +214,7 @@ CONFIG_NSH_MMCSDMINOR=0
#
# Board-Specific Options
#
# CONFIG_LIB_BOARDCTL is not set
#
# RTOS Features
@ -328,11 +333,16 @@ CONFIG_SPI=y
# CONFIG_SPI_OWNBUS is not set
CONFIG_SPI_EXCHANGE=y
# CONFIG_SPI_CMDDATA is not set
# CONFIG_SPI_CALLBACK is not set
# CONFIG_SPI_BITBANG is not set
# CONFIG_I2S is not set
#
# Timer Driver Support
#
# CONFIG_TIMER is not set
# CONFIG_RTC is not set
# CONFIG_WATCHDOG is not set
# CONFIG_TIMER is not set
# CONFIG_ANALOG is not set
# CONFIG_AUDIO_DEVICES is not set
# CONFIG_VIDEO_DEVICES is not set
@ -346,7 +356,7 @@ CONFIG_SPI_EXCHANGE=y
# CONFIG_PM is not set
# CONFIG_POWER is not set
# CONFIG_SENSORS is not set
CONFIG_SERCOMM_CONSOLE=y
# CONFIG_SERCOMM_CONSOLE is not set
CONFIG_SERIAL=y
# CONFIG_DEV_LOWCONSOLE is not set
# CONFIG_16550_UART is not set
@ -395,6 +405,7 @@ CONFIG_OTHER_SERIAL_CONSOLE=y
# System Logging
#
# CONFIG_RAMLOG is not set
# CONFIG_SYSLOG_CONSOLE is not set
#
# Networking Support
@ -493,6 +504,7 @@ CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048
# CONFIG_LIBC_PERROR_STDOUT is not set
CONFIG_ARCH_LOWPUTC=y
# CONFIG_LIBC_LOCALTIME is not set
# CONFIG_TIME_EXTENDED is not set
CONFIG_LIB_SENDFILE_BUFSIZE=512
# CONFIG_ARCH_ROMGETC 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_OSTEST is not set
# CONFIG_EXAMPLES_PIPE is not set
# CONFIG_EXAMPLES_PPPD is not set
# CONFIG_EXAMPLES_POSIXSPAWN is not set
# CONFIG_EXAMPLES_QENCODER is not set
# CONFIG_EXAMPLES_RGMP is not set
# CONFIG_EXAMPLES_ROMFS is not set
# CONFIG_EXAMPLES_SENDMAIL is not set
# CONFIG_EXAMPLES_SERIALBLASTER 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_TIFF is not set
# CONFIG_EXAMPLES_TOUCHSCREEN is not set
# CONFIG_EXAMPLES_UDP is not set
# CONFIG_EXAMPLES_WEBSERVER is not set
# CONFIG_EXAMPLES_USBSERIAL 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_PCODE is not set
# CONFIG_INTERPRETERS_MICROPYTHON is not set
#
# Network Utilities
@ -593,15 +605,11 @@ CONFIG_EXAMPLES_NSH=y
# Networking Utilities
#
# CONFIG_NETUTILS_CODECS is not set
# CONFIG_NETUTILS_DHCPD is not set
# CONFIG_NETUTILS_FTPC is not set
# CONFIG_NETUTILS_FTPD is not set
# CONFIG_NETUTILS_JSON is not set
# CONFIG_NETUTILS_SMTP is not set
# CONFIG_NETUTILS_TFTPC is not set
# CONFIG_NETUTILS_THTTPD is not set
# CONFIG_NETUTILS_NETLIB is not set
# CONFIG_NETUTILS_WEBCLIENT is not set
# CONFIG_NETUTILS_PPPD is not set
#
# FreeModBus
@ -635,6 +643,7 @@ CONFIG_NSH_BUILTIN_APPS=y
# CONFIG_NSH_DISABLE_CD is not set
# CONFIG_NSH_DISABLE_CP 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_DF 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_MH 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_PS is not set
# CONFIG_NSH_DISABLE_PUT is not set
@ -705,119 +715,19 @@ CONFIG_NSH_CONSOLE=y
#
# System Libraries and NSH Add-Ons
#
#
# Custom Free Memory Command
#
# CONFIG_SYSTEM_FREE is not set
#
# EMACS-like Command Line Editor
#
# CONFIG_SYSTEM_CLE is not set
#
# CU Minimal Terminal
#
# CONFIG_SYSTEM_CUTERM is not set
#
# FLASH Program Installation
#
# CONFIG_SYSTEM_INSTALL is not set
#
# FLASH Erase-all Command
#
#
# Intel HEX to binary conversion
#
# CONFIG_SYSTEM_HEX2BIN is not set
#
# I2C tool
#
#
# INI File Parser
#
# CONFIG_SYSTEM_INIFILE is not set
#
# NxPlayer media player library / command Line
#
#
# RAM test
#
# CONFIG_SYSTEM_RAMTEST is not set
#
# readline()
#
CONFIG_SYSTEM_READLINE=y
CONFIG_READLINE_ECHO=y
#
# P-Code Support
#
#
# PHY Tool
#
#
# Power Off
#
CONFIG_SYSTEM_POWEROFF=y
#
# RAMTRON
#
# CONFIG_SYSTEM_RAMTRON is not set
#
# SD Card
#
# CONFIG_SYSTEM_SDCARD is not set
#
# Sudoku
#
# CONFIG_SYSTEM_SUDOKU is not set
#
# Sysinfo
#
# CONFIG_SYSTEM_SYSINFO is not set
#
# VI Work-Alike Editor
#
# 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

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 = .);
}