mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-11-09 08:37:58 +08:00
Update from "erik.ivanenko" <erik.ivanenko@utoronto.ca>.
Also removed bsp_postdriver_hook() from every bsp possible and moved to shared version.
This commit is contained in:
1 parent
ece79bb1ab
commit
334427722c
12 files changed
+1430
-128
No files matched your search
@@ -16,4 +16,4 @@ include $(RTEMS_ROOT)/make/directory.cfg
|
||||
#was:
|
||||
#SUB_DIRS=include startup clock console shmsupp timer wrapup
|
||||
#is
|
||||
SUB_DIRS=include startup clock console timer wrapup
|
||||
SUB_DIRS=include start startup clock console timer wrapup
|
||||
@@ -19,5 +19,5 @@
|
||||
%{qrtems_debug: start_g.o%s}}
|
||||
|
||||
*link:
|
||||
%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -e start}
|
||||
%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -e reset}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../startup/80386ex.h"
|
||||
#include "../start/80386ex.h"
|
||||
|
||||
/* console_cleanup
|
||||
*
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,57 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
RTEMS_ROOT = @top_srcdir@
|
||||
PROJECT_ROOT = @PROJECT_ROOT@
|
||||
|
||||
PGMS=${ARCH}/start.o
|
||||
|
||||
# C source names, if any, go here -- minus the .c
|
||||
C_PIECES=
|
||||
C_FILES=$(C_PIECES:%=%.c)
|
||||
C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
|
||||
|
||||
H_FILES=
|
||||
|
||||
# Assembly source names, if any, go here -- minus the .s
|
||||
S_PIECES=start
|
||||
S_FILES=$(S_PIECES:%=%.s)
|
||||
S_O_FILES=$(S_FILES:%.s=${ARCH}/%.o)
|
||||
|
||||
SRCS=$(C_FILES) $(H_FILES) $(S_FILES)
|
||||
OBJS=$(C_O_FILES) $(S_O_FILES)
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
|
||||
include $(RTEMS_ROOT)/make/leaf.cfg
|
||||
|
||||
#
|
||||
# (OPTIONAL) Add local stuff here using +=
|
||||
#
|
||||
|
||||
DEFINES +=
|
||||
CPPFLAGS +=
|
||||
CFLAGS +=
|
||||
|
||||
LD_PATHS +=
|
||||
LD_LIBS +=
|
||||
LDFLAGS +=
|
||||
|
||||
#
|
||||
# Add your list of files to delete here. The config files
|
||||
# already know how to delete some stuff, so you may want
|
||||
# to just run 'make clean' first to see what gets missed.
|
||||
# 'make clobber' already includes 'make clean'
|
||||
#
|
||||
|
||||
CLEAN_ADDITIONS +=
|
||||
CLOBBER_ADDITIONS +=
|
||||
|
||||
all: ${ARCH} $(SRCS) $(OBJS) $(PGM)
|
||||
$(INSTALL_VARIANT) -m 555 ${PGMS} ${PROJECT_RELEASE}/lib
|
||||
|
||||
# Install the program(s), appending _g or _p as appropriate.
|
||||
# for include files, just use $(INSTALL)
|
||||
@@ -0,0 +1,115 @@
|
||||
/* macros.inc
|
||||
*
|
||||
* This file assists the board independent startup code
|
||||
* by initializing the chip-select channels to
|
||||
* reflect the proper memory configuration.
|
||||
*
|
||||
* NOTE: No stack has been established when this routine
|
||||
* is invoked. It returns to start.s through ldsegs
|
||||
*
|
||||
* Submitted by:
|
||||
*
|
||||
* Erik Ivanenko
|
||||
* University of Toronto
|
||||
* erik.ivanenko@utoronto.ca
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
.set GDT_CODE_PTR , 0x10
|
||||
.set GDT_DATA_PTR , 0x18
|
||||
|
||||
.set BOARD_SELECT , 0x301
|
||||
.set BOARD_DATA , 0x302
|
||||
.set BOARD_LATCH , 0x303
|
||||
|
||||
|
||||
#define SetExRegByte(_register,_value) \
|
||||
movb $ ## _value, al; \
|
||||
movw $ ## _register, dx; \
|
||||
outb al, dx
|
||||
|
||||
#define SetExRegWord(_register,_value) \
|
||||
movw $ ## _value, ax; \
|
||||
movw $ ## _register, dx ; \
|
||||
outw ax, dx
|
||||
|
||||
|
||||
#define DESC2(lim_0_15, bas_0_15, bas_16_23, access, gran, bas_24_31) \
|
||||
.word lim_0_15 ; \
|
||||
.word bas_0_15 ; \
|
||||
.byte bas_16_23 ; \
|
||||
.byte access ; \
|
||||
.byte gran ; \
|
||||
.byte bas_24_31
|
||||
|
||||
#define DESC3( _base, _limit) \
|
||||
.word _limit ; \
|
||||
.long _base
|
||||
|
||||
/* THE GET_ACCESS IS CHANGED FROM 8E TO 9E */
|
||||
|
||||
#define INTERRUPT_GATE( _vector ) \
|
||||
.word _vector ; \
|
||||
.word GDT_CODE_PTR ; \
|
||||
.byte 0x0 ; \
|
||||
.byte 0x8E ; \
|
||||
.word 0x0
|
||||
|
||||
#define rLOAD_INDEX( _selector, _segment_register) \
|
||||
movl _selector , _segment_register ; \
|
||||
addb al, ( eax )
|
||||
|
||||
#define rLOAD_SEGMENT( _reg, _segment_register) \
|
||||
mov _reg , _segment_register ; \
|
||||
|
||||
/* #define rLOAD_SEGMENT( _reg, _segment_register) \
|
||||
.code16 ; \
|
||||
mov _reg , _segment_register ; \
|
||||
.code32
|
||||
*/
|
||||
#define pLOAD_SEGMENT( _selector, _segment_register) \
|
||||
movl $ ## _selector , eax ; .code16 ; \
|
||||
mov ax, _segment_register ; .code32
|
||||
|
||||
/* #define MOVE_WORD( _immed32, _reg ) \
|
||||
data16 ; \
|
||||
movl _immed32, _reg
|
||||
*/
|
||||
|
||||
#define MOVE_WORD( _immed32, _reg ) \
|
||||
movw _immed32, _reg
|
||||
|
||||
/* #define MOVE_IMMED_WORD( _immed32, _reg ) \
|
||||
data16 ; \
|
||||
mov $ ## _immed32, _reg
|
||||
|
||||
#define CS_OFF( _cs_symbol, _reg ) \
|
||||
data16 ; \
|
||||
mov _cs_symbol, _reg ; \
|
||||
data16 ;\
|
||||
andl $0x000ffff, _reg
|
||||
|
||||
#define _16_NOPS \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ; \
|
||||
nop ;
|
||||
*/
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -11,17 +11,15 @@ PROJECT_ROOT = @PROJECT_ROOT@
|
||||
PGM=${ARCH}/startup.rel
|
||||
|
||||
# C source names, if any, go here -- minus the .c
|
||||
C_PIECES=bspclean bspstart main sbrk setvec
|
||||
C_PIECES=bspclean bsppost bspstart main sbrk setvec
|
||||
C_FILES=$(C_PIECES:%=%.c)
|
||||
C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
|
||||
|
||||
H_FILES=
|
||||
|
||||
|
||||
# Assembly source names, if any, go here -- minus the .s
|
||||
# removed initcsu piece, ldsegs piece and flush
|
||||
S_PIECES= gdt idt interrupts interns reset_jmp
|
||||
|
||||
S_PIECES=
|
||||
S_FILES=$(S_PIECES:%=%.s)
|
||||
S_O_FILES=$(S_FILES:%.s=${ARCH}/%.o)
|
||||
|
||||
|
||||
@@ -3,25 +3,15 @@
|
||||
#
|
||||
|
||||
|
||||
The doit shell file cd's to $H, which refers to the directory
|
||||
that contains the hello world test. The console is a raw com port.
|
||||
Certain test programs behave differently with different com port speeds.
|
||||
To test the programs, it is required that you hook up a terminal
|
||||
( or minicom or procomm it doesn't really matter ) to the comm port of
|
||||
the target hardware. You must ensure that the baud rate, parity etc
|
||||
is set properly. This is done on the target hardware within interns.s .
|
||||
( Set your terminal emulator to match. ) Currently, the settings
|
||||
are 9600,8,n,1 .
|
||||
The requirements for this BSP are only that the GAS used supports the
|
||||
.code16 directive. The GAS released with any GCC version 2.8.0 or better
|
||||
is required. The BSP was built with an egcs snapshot pre-1.0.2 and
|
||||
post-1.0.1. However, any egcs should work.
|
||||
|
||||
The format and layout of the file interns.s is taken from the
|
||||
intel ApBuilder software, freely distributed by Intel. Some
|
||||
easy macros ( SetExRegByte and SetExRegWord ) are basically lifted
|
||||
from the Intel macros. Similarly for the names of the IO ports.
|
||||
|
||||
This "port" begain with the forceCPU bsp. Hence I am sure that
|
||||
there is some real trash that is not appropriate. For example
|
||||
the act of copying the Interrupt Descriptor tables and Global
|
||||
descriptor tables "into our space". ( in start.s I think )
|
||||
The only "real" differences are in bspstart.c, where the initialization now
|
||||
configures all available RAM, (after setting up the Workspaces) as heap.
|
||||
The location of the stack was changed so that the heap was not trapped
|
||||
between low memory and the stack; the stack comes before the heap.
|
||||
|
||||
Erik
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
/* bsp_start()
|
||||
*
|
||||
/*
|
||||
* This routine starts the application. It includes application,
|
||||
* board, and monitor specific initialization and configuration.
|
||||
* The generic CPU dependent initialization has been performed
|
||||
* before this routine is invoked.
|
||||
*
|
||||
* INPUT: NONE
|
||||
*
|
||||
* OUTPUT: NONE
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1998.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
* Copyright assigned to U.S. Government, 1994.
|
||||
@@ -17,6 +12,12 @@
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* Ported to the i386ex and submitted by:
|
||||
*
|
||||
* Erik Ivanenko
|
||||
* University of Toronto
|
||||
* erik.ivanenko@utoronto.ca
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -24,12 +25,9 @@
|
||||
#include <rtems/libio.h>
|
||||
|
||||
#include <libcsupport.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef PRINTON
|
||||
extern char inbyte(void);
|
||||
extern void outbyte(char);
|
||||
#ifdef STACK_CHECKER_ON
|
||||
#include <stackchk.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -42,23 +40,35 @@ rtems_configuration_table BSP_Configuration;
|
||||
|
||||
rtems_cpu_table Cpu_table;
|
||||
|
||||
char *rtems_progname;
|
||||
|
||||
/* Initialize whatever libc we are using
|
||||
* called from postdriver hook
|
||||
/*
|
||||
* Tells us where to put the workspace in case remote debugger is present.
|
||||
*/
|
||||
|
||||
extern rtems_unsigned32 rdb_start;
|
||||
|
||||
/*
|
||||
* bsp_libc_init
|
||||
*
|
||||
* Initialize whatever libc we are using called from bsp_postdriver_hook.
|
||||
*/
|
||||
|
||||
|
||||
void bsp_libc_init()
|
||||
{
|
||||
extern int end;
|
||||
rtems_unsigned32 heap_start;
|
||||
|
||||
heap_start = (rtems_unsigned32) &end;
|
||||
extern int heap_bottom;
|
||||
rtems_unsigned32 heap_start;
|
||||
rtems_unsigned32 heap_size;
|
||||
|
||||
heap_start = (rtems_unsigned32) &heap_bottom;
|
||||
if (heap_start & (CPU_ALIGNMENT-1))
|
||||
heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
||||
|
||||
RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
|
||||
|
||||
heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
||||
|
||||
heap_size = BSP_Configuration.work_space_start -(void *) heap_start ;
|
||||
heap_size &= 0xfffffff0; /* keep it as a multiple of 16 bytes */
|
||||
|
||||
heap_size &= 0xfffffff0; /* keep it as a multiple of 16 bytes */
|
||||
RTEMS_Malloc_Initialize((void *) heap_start, heap_size, 0);
|
||||
|
||||
/*
|
||||
* Init the RTEMS libio facility to provide UNIX-like system
|
||||
* calls for use by newlib (ie: provide __rtems_open, __rtems_close, etc)
|
||||
@@ -104,7 +114,7 @@ bsp_pretasking_hook(void)
|
||||
|
||||
Stack_check_Initialize();
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef RTEMS_DEBUG
|
||||
rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
|
||||
#endif
|
||||
@@ -112,45 +122,13 @@ bsp_pretasking_hook(void)
|
||||
|
||||
|
||||
/*
|
||||
* After drivers are setup, register some "filenames"
|
||||
* and open stdin, stdout, stderr files
|
||||
*
|
||||
* Newlib will automatically associate the files with these
|
||||
* (it hardcodes the numbers)
|
||||
* Use the shared bsp_postdriver_hook() implementation
|
||||
*/
|
||||
|
||||
void
|
||||
bsp_postdriver_hook(void)
|
||||
{
|
||||
int stdin_fd, stdout_fd, stderr_fd;
|
||||
int error_code;
|
||||
|
||||
error_code = 'S' << 24 | 'T' << 16;
|
||||
|
||||
if ((stdin_fd = __rtems_open("/dev/console", O_RDONLY, 0)) == -1)
|
||||
rtems_fatal_error_occurred( error_code | 'D' << 8 | '0' );
|
||||
|
||||
if ((stdout_fd = __rtems_open("/dev/console", O_WRONLY, 0)) == -1)
|
||||
rtems_fatal_error_occurred( error_code | 'D' << 8 | '1' );
|
||||
|
||||
if ((stderr_fd = __rtems_open("/dev/console", O_WRONLY, 0)) == -1)
|
||||
rtems_fatal_error_occurred( error_code | 'D' << 8 | '2' );
|
||||
|
||||
if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
|
||||
rtems_fatal_error_occurred( error_code | 'I' << 8 | 'O' );
|
||||
}
|
||||
|
||||
void bsp_postdriver_hook(void);
|
||||
|
||||
void bsp_start( void )
|
||||
{
|
||||
|
||||
#ifdef PRINTON
|
||||
outbyte('a');
|
||||
outbyte('b');
|
||||
outbyte('c');
|
||||
outbyte ('S');
|
||||
#endif
|
||||
|
||||
/*
|
||||
* we do not use the pretasking_hook.
|
||||
*/
|
||||
@@ -169,7 +147,7 @@ void bsp_start( void )
|
||||
|
||||
Cpu_table.interrupt_table_offset = (void *)Interrupt_descriptor_table;
|
||||
|
||||
Cpu_table.interrupt_stack_size = 4096;
|
||||
Cpu_table.interrupt_stack_size = 4096; /* STACK_MINIMUM_SIZE */
|
||||
|
||||
Cpu_table.extra_mpci_receive_server_stack = 0;
|
||||
|
||||
@@ -179,24 +157,26 @@ void bsp_start( void )
|
||||
|
||||
BSP_Configuration = Configuration;
|
||||
|
||||
#if defined(RTEMS_POSIX_API)
|
||||
BSP_Configuration.work_space_size *= 3;
|
||||
#endif
|
||||
|
||||
BSP_Configuration.work_space_start = (void *)
|
||||
RAM_END - BSP_Configuration.work_space_size;
|
||||
|
||||
|
||||
#ifdef SPRINTON
|
||||
sprintf( x_buffer, "ram end : %u, work_space_size: %d\n",
|
||||
RAM_END , BSP_Configuration.work_space_size );
|
||||
do {
|
||||
outbyte ( x_buffer[i] );
|
||||
} while ( x_buffer[i++] != '\n');
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Add 1 region for Malloc in libc_low
|
||||
*/
|
||||
|
||||
BSP_Configuration.RTEMS_api_configuration->maximum_regions++;
|
||||
|
||||
/*
|
||||
* Account for the console's resources
|
||||
*/
|
||||
|
||||
/* console_reserve_resources( &BSP_Configuration ); */
|
||||
|
||||
|
||||
/*
|
||||
* Add 1 extension for newlib libc
|
||||
*/
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user