bsps: Fold external documentation into README.md

This commit is contained in:
Amar Takhar
2024-07-30 15:18:06 -04:00
committed by Joel Sherrill
parent cfdd40935d
commit 9b4ac0aa64
14 changed files with 899 additions and 830 deletions

View File

@@ -1,20 +0,0 @@
To run RTEMS from scratch (without any other bootcode) on the beagles,
you can comfortably load the executables over JTAG using gdb. This is
necessarily target-specific however.
1. BBXM
- For access to JTAG using openocd, see simscripts/bbxm.cfg.
- openocd then offers access to gdb using simscripts/gdbinit.bbxm.
- start openocd using bbxm.cfg
- copy your .exe to a new dir and that gdbinit file as .gdbinit in the same dir
- go there and start gdb:
$ arm-rtems4.11-gdb hello.exe
- gdb will invoke the BBXM hardware initialization in the bbxm.cfg
and load the ELF over JTAG. type 'c' (for continue) to run it.
- breakpoints, C statement and single-instruction stepping work.
2. beaglebone white
This has been tested with openocd and works but not in as much detail as for
the BBXM yet (i.e. loading an executable from scratch).

View File

@@ -124,3 +124,51 @@ Good luck & enjoy!
Ben Gras
beng@shrike-systems.com
JTAG
----
To run RTEMS from scratch (without any other bootcode) on the beagles,
you can comfortably load the executables over JTAG using gdb. This is
necessarily target-specific however.
1. BBXM
- For access to JTAG using openocd, see simscripts/bbxm.cfg.
- openocd then offers access to gdb using simscripts/gdbinit.bbxm.
- start openocd using bbxm.cfg
- copy your .exe to a new dir and that gdbinit file as .gdbinit in the same dir
- go there and start gdb:
$ arm-rtems4.11-gdb hello.exe
- gdb will invoke the BBXM hardware initialization in the bbxm.cfg
and load the ELF over JTAG. type 'c' (for continue) to run it.
- breakpoints, C statement and single-instruction stepping work.
2. beaglebone white
This has been tested with openocd and works but not in as much detail as for
the BBXM yet (i.e. loading an executable from scratch).
Testing
-------
To build and run the tests for this BSP, use the RTEMS tester.
The necessary software can be built with the RTEMS source builder.
To build the BSP for testing:
- set CONSOLE_POLLED=1 in the configure environment, some tests
assume console i/o is polled
- add --enable-tests to the configure line
1. Qemu
Linaro Qemu can emulate the beagleboard xm and so run all regression
tests in software. Build the bbxm.bset from the RTEMS source builder and
you will get qemu linaro that can run them. There is a beagleboardxm_qemu
bsp in the RTEMS tester to invoke it with every test.
2. bbxm hardware
This requires JTAG, see README.JTAG. Use the beagleboardxm bsp in the
RTEMS tester. It starts gdb to connect to openocd to reset the target
and load the RTEMS executable for each test iteration.

View File

@@ -1,20 +0,0 @@
To build and run the tests for this BSP, use the RTEMS tester.
The necessary software can be built with the RTEMS source builder.
To build the BSP for testing:
- set CONSOLE_POLLED=1 in the configure environment, some tests
assume console i/o is polled
- add --enable-tests to the configure line
1. Qemu
Linaro Qemu can emulate the beagleboard xm and so run all regression
tests in software. Build the bbxm.bset from the RTEMS source builder and
you will get qemu linaro that can run them. There is a beagleboardxm_qemu
bsp in the RTEMS tester to invoke it with every test.
2. bbxm hardware
This requires JTAG, see README.JTAG. Use the beagleboardxm bsp in the
RTEMS tester. It starts gdb to connect to openocd to reset the target
and load the RTEMS executable for each test iteration.

View File

@@ -1,26 +0,0 @@
# Fernando Nicodemos <fgnicodemos@terra.com.br>
# from NCB - Sistemas Embarcados Ltda. (Brazil)
#
This is the BSP for Cogent Computer System's KIT637_V6. It implements an
updated version of the CSB337 board with a number of optional peripherals.
This KIT is implemented by CSB637 single board computer using the
Atmel AT91RM9200 CPU and the CSB937 target main board. It uses an
Optrex LCD (T-51750AA, 640x480) and Touchscreen (not supported in this
BSP). The IDE and USB (host and device) interfaces are also not supported.
The SD and Compact Flash cards drivers are still under development.
The differences in the CSB637 single board computer are very slight but
important:
CSB337 CSB637
========== ==========
Clock speed 184MHz 184MHz
External memory 16MB SDRAM 64MB SDRAM
Flash memory 8MB Strata 8/16MB Strata (8MB used by default)
Video buffer 1MB 8MB
Video driver S1D13706 S1D13506
PHY Layer LXT971ALC BCM5221
?? Some GPIO or interrupts moved around.

View File

@@ -13,3 +13,34 @@ The differences in the board are very slight but important:
Please check README.kit637_v6 for more explanation about the Cogent's
Development Kit that uses the CSB637 single board computer.
kit637_v6
---------
Fernando Nicodemos <fgnicodemos@terra.com.br>
from NCB - Sistemas Embarcados Ltda. (Brazil)
This is the BSP for Cogent Computer System's KIT637_V6. It implements an
updated version of the CSB337 board with a number of optional peripherals.
This KIT is implemented by CSB637 single board computer using the
Atmel AT91RM9200 CPU and the CSB937 target main board. It uses an
Optrex LCD (T-51750AA, 640x480) and Touchscreen (not supported in this
BSP). The IDE and USB (host and device) interfaces are also not supported.
The SD and Compact Flash cards drivers are still under development.
The differences in the CSB637 single board computer are very slight but
important:
```
CSB337 CSB637
========== ==========
Clock speed 184MHz 184MHz
External memory 16MB SDRAM 64MB SDRAM
Flash memory 8MB Strata 8/16MB Strata (8MB used by default)
Video buffer 1MB 8MB
Video driver S1D13706 S1D13506
PHY Layer LXT971ALC BCM5221
```
?? Some GPIO or interrupts moved around.

View File

@@ -1,396 +0,0 @@
+-----------------------------------------------------------------------------+
| RTEMS 4.6.0 PC386 BSP HOWTO - 2003/05/08 |
| |
+-----------------------------------------------------------------------------+
| (C) Copyright 1998 - |
| - NavIST Group - Real-Time Distributed Systems and Industrial Automation |
| |
| http://pandora.ist.utl.pt |
| |
| Instituto Superior Tecnico * Lisboa * PORTUGAL |
+-----------------------------------------------------------------------------+
| Disclaimer: |
| |
| This file is provided "AS IS" without warranty of any kind, either |
| expressed or implied. |
+-----------------------------------------------------------------------------+
| History: |
| 12 June 2000 - Updated to 4.5 (Joel) |
| 8 May 2003 - PXE GRUB (Chris Johns) |
+-----------------------------------------------------------------------------+
1. Introduction
---------------
This tries to explain how to setup the RTEMS host environment so
that RTEMS applications can be built for and run in a bare PC 386 or
above.
It covers essentially the aspects of loading images, since
information concerning other issues such as building the development
tools and the RTEMS distribution can be found in the 'RTEMS 4.6.0
On-Line Library' under 'Getting Started with RTEMS for C/C++ Users'.
Please note that everything in the following text using the
notation '<...>' is just an alias to something and should always be
substituted by the real thing!
2. Building the GNU C/C++ Cross Compiler Toolset
------------------------------------------------
Obtaining, building and installing the tools for building the
PC386 BSP of RTEMS is covered in detail in the 'RTEMS 4.6.0 On-Line
Library' -> 'Getting Started with RTEMS for C/C++ Users'. You can
either use pre-built toolset executables or build your own from
the instructions given there.
This BSP is designed to work only with ELF toolset configurations.
This is format used by the i386-rtems target.
4. Building RTEMS
-----------------
Obtaining, building and installing the tools for building the
PC386 BSP is covered in detail in the 'RTEMS 4.6.0 On-Line Library' ->
'Getting Started with RTEMS for C/C++ Users' -> 'Building RTEMS'.
When running configure, use the following values for the listed
options with an i386-rtems toolset:
--target=i386-rtems
--enable-rtemsbsp=pc386
5. RTEMS Tests
--------------
If you've completed the last step successfully, you'll find the
RTEMS sample and test files that can be loaded with GRUB in the
'<build_point>/pc386/tests' directory, RTEMS sample and test files in
a format suitable for use with NetBoot in the
'<build_point>/pc386/BootImgs' directory.
6. Loading RTEMS PC386 applications
-----------------------------------
6.1. Unarchiving
----------------
Files which have been "tarred, gzipped" (i.e. .tar.gz or .tgz
extension) may be unarchived with a command similar to one of the
following:
zcat <file>.tgz | tar xvof -
OR
gunzip -c <file>.tgz | tar xvof -
OR
tar xzvf <file>.tgz
NOTE: gunzip -c is equivalent to zcat. On commercial (non-Linux)
Unices, since the GNU utilities are not the standard 'tar' will be
gtar (GNU tar) and 'zcat' will be 'gzcat'.
Given that the necessary utility programs are installed, any of
the above commands will extract the contents of <file>.tar.gz into the
current directory. To view the contents of an archive without
restoring any files, use a command similar to the following:
zcat <file>.tgz | tar tvf -
6.2 Using GRUB to load RTEMS PC386 applications from Floppy
-----------------------------------------------------------
Using GRUB (GRand Unified Bootloader) is the simplest way to load
and run your PC386 BSP samples, tests and programs. You will need to build GRUB
so you need a working GCC and friends. The online documentation for GRUB lists
what you need:
- http://www.gnu.org/manual/grub/html_node/index.html
You can get the latest release of GRUB from its homepage:
- http://www.gnu.org/software/grub/
Once you obtain the .tar.gz archive from:
- ftp://alpha.gnu.org/gnu/grub/
Download the lastest version (grub-0.93.tar.gz), change to a temporary
directory (you won't need the grub files after this and can just go ahead and
delete the whole directory structure that was generated) and unarchive
'grub-0.93.tar.gz' following the instructions given above in [2. Unarchiving].
$ cd /tmp
$ mkdir grub
$ cd grub
$ cat grub-0.93.tar.gz | gzip -d | tar xf -
after this is done create a build directory and decend into it:
$ mkdir build
$ cd build
then configure GRUB with the standard options:
$ ../grub-0.93/configure
and if successful run make:
$ make
Once complete you should have the 'stage1' and 'stage2' files. They will be
in the directories with the same name.
You should have two (2) formatted diskettes available. One of
these will only be used temporarily to create the other one, and we'll
refer to it as 'RAW GRUB' diskette (you can label it accordingly if
you wish). The other diskette, which we will refer to as 'GRUB FS'
should be high-level formatted with one of GRUB's supported file
systems, which are: DOS FAT, BSD FFS, and Linux ext2fs.
A DOS FAT diskette can, obviously, be created under DOS with the
'FORMAT' command. Under Linux, the following commands are available to
add file systems to low-level formatted diskettes:
1. To add a DOS FAT file system to a low-level formatted diskette:
a) If you have mtools installed:
'mformat a:'.
b) Assuming that you are formatting the diskette in the first
floppy disk drive ('/dev/fd0' under Linux):
'mkdosfs /dev/fd0' or
'mkfs.msdos /dev/fd0'.
2. To add a Linux ext2fs file system to a low-level formatted
diskette, assuming that you are formatting the diskette in the
first floppy disk drive ('/dev/fd0' under Linux):
'mke2fs /dev/fd0' or
'mkfs.ext2 /dev/fd0'.
Next we will install using 'rawrite' or 'dd' to the 'GRUB RAW'
diskette.
NOTE: This will destroy any data currently on the diskette.
Execute your OS's equivalent of (this should work for recent
FreeBSD versions and Linux just fine):
dd if=stage1/stage1 of=/dev/fd0 bs=512 count=1
dd if=stage2/stage2 of=/dev/fd0 bs=512 seek=1
Under DOS/Windows/NT, courtesy of Eric Hanchrow (erich@microsoft.com):
* Use the copy /b command to binary concatenate the stage1 and
stage2 files together via:
copy /b stage1\stage1 stage2\stage2 grub.raw
* Use rawrite.exe (which is available in many places on the net and
in some Linux distributions) to write grub.raw to a diskette.
(CCJ: I am not sure about the Windows location etc)
Next stage: copy the 'stage1' and 'stage2' files to the 'GRUB FS'
diskette (if you are using Linux you can mount the diskette in an
appropriate mount point and then 'cp' the files to it, if it is either
a DOS FAT or an EXT2FS diskette, or in the case of a DOS FAT diskette
you can use 'mcopy' from 'mtools'.)
After this is done boot a PC using the 'GRUB RAW' diskette. After
this is done, you will get GRUB's command line interface. Exchange
'GRUB RAW' with the 'GRUB FS' diskette in the drive and issue the
following command from GRUB's prompt:
install=(fd0)/stage1 (fd0) (fd0)/stage2 0x8000 (fd0)/grubmenu
This command will make the 'GRUB FS' diskette bootable. After this
is done, you won't require the 'GRUB RAW' diskette anymore and you can
delete the 'stage1' file from the 'GRUB FS' diskette.
Next copy all the files you wish to load to the diskette. The GRUB
loadable test and sample files in the RTEMS distribution have '.exe'
extension and can be found under the build point in the 'pc386/tests'
directory. You can compress this files with gzip to save space if you
wish. GRUB loads 'gzipped' files transparently.
Finally you have to create a GRUB menu configuration file. We will
call this file 'grubmenu'. You can call it anything as long as you use
the correct name in the 'install' command where we used 'grubmenu'.
The 'grubmenu' file, as far as we are interested has the following
syntax:
title= Hello World Test
kernel= (fd0)/hello.exe.gz
You can add as many of this entries as you want to the 'grubmenu'
file. There should be one for each program you wish to load. The
'title=' line provides a description for the program that will appear
after boot in the GRUB menu for the user to choose and the 'kernel='
line describes where the file can be found by GRUB (you should leave
the '(fd0)/' part and just substitute the rest if you've copied the
files to the root directory of the diskette.
Just boot the PC with the 'GRUB FS' diskette and you will be able
to choose which program you want to load from GRUB's menu.
The GRUB documentation is available in HTML format in the 'docs'
directory of the GRUB tree starting with the 'index.html' file.
6.3 Using GRUB to load RTEMS PC386 applications via PXE NetBoot
----------------------------------------------------------------
PXE is the Intel Preboot Execution Environment. A number of PC
manufactures provide a PXE option in the BIOS. This is usually a
Net Boot option in a BIOS configuration screen. The simplist way to
load an RTEMS application via PXE is to use GRUB as a first stage
loader.
You will need to determine your network card, and have a working
network with a DHCP (or BOOTP), and TFTP server.
You may to find a TFTP server that does not support option
negotiations. A google search shows a number of PC's have a buggy
PXE loader. Supressing option negotiations seems to make them
work.
You will need to build GRUB for your network card. Follow the
procedure in item 6.2 up to the configure point. At this point
run the following configure command:
$ ../grub-0.93/configure --enable-diskless --enable-eepro100
for an Etherexpress Pro 100 network card, then run make:
$ make
Once complete you should have the 'stage2/pxegrub' file. Copy
this to your TFTP server's download directory. Configure your
DHCP server to provide an IP address and download the image. For
the ISC server found on operating systems such as Linux something
like the following should do:
#
# PC loading RTEMS via PXE and GRUB
#
group
{
filename "/tftpboot/pxeboot";
host rtems-pc { hardware ethernet 00:08:c7:73:41:65; }
}
If all works your PC should boot and load GRUB over the network:
GRUB version 0.93 (639K lower / 64512K upper memory)
Address: 10.10.10.10
NetMask: 255.255.255.0
Server: 10.10.10.1
Gateway: 10.10.10.1
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
Copy your RTEMS executable to the TFTP server directory then enter
the following GRUB commands:
grub> root (nd)
Filesystem type is tftp, using whole disk
grub> kernel ticker.exe
[Multiboot-elf, <0x100000:0x1e5a4:0x2b08>, shtab=0x122140, entry=0x10000c]
grub> boot
The GRUB documents how to get GRUB to load a configuration file.
6.4 Using NetBoot to load RTEMS PC386 applications
---------------------------------------------------
To load the '*.bt' files you can
Alternatively, if you have a PC connected to a network with a
BOOTP server and a TFTP server (this can very well be you're Linux
RTEMS host system), you can use Gero Kuhlmann's NetBoot loader, to
load RTEMS to a diskless PC across a network. You can get it from:
ftp://sunsite.unc.edu/pub/Linux/system/boot/ethernet/netboot-0.7.3.tar.gz
or in any of Sunsite's mirrors. It is also available from NetBoot's
homepage:
http://www.han.de/~gero/netboot
After unarchiving 'netboot-0.7.3.tar.gz' you should change to the
base directory of this and run:
./configure --disable-mknbi-dos --disable-mknbi-linux --disable-mknbi-mgl
Afterwards, you should follow the instructions contained in the
'INSTALL' file also contained in the base directory, on how to setup the
server(s) and to build a boot ROM for the client PC network card, or a
boot diskette, and the PC client should be able to load the '*.bt' files
from the server.
The important sections to check in the 'INSTALL FILE' are the last two:
- Setup of the server (only the BOOTP and TFTP parts - ignore NFS).
===================
- Setup of the client including building the bootrom
==================================================
all the rest can be safely ignored if you don't care to examine it.
7. Technical Information
------------------------
NOTE: All the following paths are relative to the base directory
of the RTEMS distribution.
As of the writing of this HOWTO, PC386 images can be loaded either
in low memory 0x10000 (64KB) until 0x97C00 (607K) using NetBoot or in
high memory from 0x100000 (1024KB) until the top of the available
memory using either NetBoot or GRUB.
If you want to change the default loading address from 1024KB to
something else, just change the value of the variable RELOCADDR in the
'make/custom/pc386.cfg' file to the new value you want (make sure you
follow the instructions indicated before the definition of RELOCADDR).
Remember that GRUB restricts the loading addresses to values above
0x100000 (1024KB), only NetBoot can load images in low memory.
After you make any changes to RELOCADDR and if you are using
NetLoader, you'll have to recompile the
'c/src/lib/libbsp/i386/pc386/start/start16.s' file. The easiest way to
achieve this is just to 'make clean' and the 'make all' again. The
quickest way is to change to
'<build_point>/c/src/lib/libbsp/i386/pc386/start' and 'make
RTEMS_BSP=pc386 clean all'.
When programming interrupt handlers take into account that the PIC
is reprogrammed and so you should use the interface functions provided
in '<build_point>/pc386/lib/include/irq.h> to guarantee that everything
works ok.

View File

@@ -1 +0,0 @@
The dec21140 network driver is found in libchip/networking.

View File

@@ -83,3 +83,475 @@ GDB can be support using:
```
The GDB stub details and in shared/comm/GDB.HOWTO.
SMP
---
The following files were developed by Erich Boleyn <erich@uruk.org>.
The original files were copied from http://www.uruk.org/mps/ and committed
into cvs as is. These files will be modified for RTEMS smp support,
but the original files are being committed in order to track any file
changes that occur. We are attempting to keep these changes as minimal
and conainted as possible.
* start/smp-imps.c
* ../include/bsp/smp-imps.h
* ../include/bsp/apic.h
Status
------
There are a wide range of PC configurations. This BSP has been tested
on only a handful. There are configurations which do not yet work. The
failure is suspected to be video card related. Here is a list of
successes and failures.
```
SUCCESSES
=========
GRUB - AMD K6 MMX 200Mhz + S3 ViRGE
GRUB - 486 DX 33Mhz + Cirrus Logic CL-GD540x/542x
GRUB - Pentium MMX 166Mhz + S3 Trio 64V2
GRUB - Pentium (P54C) 120Mhz + S3 Trio 64V+
GRUB - Pentium-S 133Mhz + S3 Trio 64V2
FAILURES
========
GRUB - 486 DX2 66Mhz + Cirrus Logic CL-GD5428 - reset
GRUB - PII 333 Mhz + STB Vision 128 - reset
GRUB - PII 300 Mhz + Permedia - reset
GRUB - Pentium 60 Mhz + Mach 32/64 - reset
```
dec21140
--------
The dec21140 network driver is found in libchip/networking.
HOWTO
-----
+-----------------------------------------------------------------------------+
| RTEMS 4.6.0 PC386 BSP HOWTO - 2003/05/08 |
| |
+-----------------------------------------------------------------------------+
| (C) Copyright 1998 - |
| - NavIST Group - Real-Time Distributed Systems and Industrial Automation |
| |
| http://pandora.ist.utl.pt |
| |
| Instituto Superior Tecnico * Lisboa * PORTUGAL |
+-----------------------------------------------------------------------------+
| Disclaimer: |
| |
| This file is provided "AS IS" without warranty of any kind, either |
| expressed or implied. |
+-----------------------------------------------------------------------------+
| History: |
| 12 June 2000 - Updated to 4.5 (Joel) |
| 8 May 2003 - PXE GRUB (Chris Johns) |
+-----------------------------------------------------------------------------+
1. Introduction
---------------
This tries to explain how to setup the RTEMS host environment so
that RTEMS applications can be built for and run in a bare PC 386 or
above.
It covers essentially the aspects of loading images, since
information concerning other issues such as building the development
tools and the RTEMS distribution can be found in the 'RTEMS 4.6.0
On-Line Library' under 'Getting Started with RTEMS for C/C++ Users'.
Please note that everything in the following text using the
notation '<...>' is just an alias to something and should always be
substituted by the real thing!
2. Building the GNU C/C++ Cross Compiler Toolset
------------------------------------------------
Obtaining, building and installing the tools for building the
PC386 BSP of RTEMS is covered in detail in the 'RTEMS 4.6.0 On-Line
Library' -> 'Getting Started with RTEMS for C/C++ Users'. You can
either use pre-built toolset executables or build your own from
the instructions given there.
This BSP is designed to work only with ELF toolset configurations.
This is format used by the i386-rtems target.
4. Building RTEMS
-----------------
Obtaining, building and installing the tools for building the
PC386 BSP is covered in detail in the 'RTEMS 4.6.0 On-Line Library' ->
'Getting Started with RTEMS for C/C++ Users' -> 'Building RTEMS'.
When running configure, use the following values for the listed
options with an i386-rtems toolset:
```shell
--target=i386-rtems
--enable-rtemsbsp=pc386
```
5. RTEMS Tests
--------------
If you've completed the last step successfully, you'll find the
RTEMS sample and test files that can be loaded with GRUB in the
'<build_point>/pc386/tests' directory, RTEMS sample and test files in
a format suitable for use with NetBoot in the
'<build_point>/pc386/BootImgs' directory.
6. Loading RTEMS PC386 applications
-----------------------------------
6.1. Unarchiving
----------------
Files which have been "tarred, gzipped" (i.e. .tar.gz or .tgz
extension) may be unarchived with a command similar to one of the
following:
```shell
zcat <file>.tgz | tar xvof -
```
OR
```shell
gunzip -c <file>.tgz | tar xvof -
```
OR
```shell
tar xzvf <file>.tgz
```
NOTE: gunzip -c is equivalent to zcat. On commercial (non-Linux)
Unices, since the GNU utilities are not the standard 'tar' will be
gtar (GNU tar) and 'zcat' will be 'gzcat'.
Given that the necessary utility programs are installed, any of
the above commands will extract the contents of <file>.tar.gz into the
current directory. To view the contents of an archive without
restoring any files, use a command similar to the following:
```shell
zcat <file>.tgz | tar tvf -
```
6.2 Using GRUB to load RTEMS PC386 applications from Floppy
-----------------------------------------------------------
Using GRUB (GRand Unified Bootloader) is the simplest way to load
and run your PC386 BSP samples, tests and programs. You will need to build GRUB
so you need a working GCC and friends. The online documentation for GRUB lists
what you need:
- http://www.gnu.org/manual/grub/html_node/index.html
You can get the latest release of GRUB from its homepage:
- http://www.gnu.org/software/grub/
Once you obtain the .tar.gz archive from:
- ftp://alpha.gnu.org/gnu/grub/
Download the lastest version (grub-0.93.tar.gz), change to a temporary
directory (you won't need the grub files after this and can just go ahead and
delete the whole directory structure that was generated) and unarchive
'grub-0.93.tar.gz' following the instructions given above in [2. Unarchiving].
```shell
$ cd /tmp
$ mkdir grub
$ cd grub
$ cat grub-0.93.tar.gz | gzip -d | tar xf -
```
after this is done create a build directory and decend into it:
```shell
$ mkdir build
$ cd build
``
then configure GRUB with the standard options:
```shell
$ ../grub-0.93/configure
```
and if successful run make:
```shell
$ make
```
Once complete you should have the 'stage1' and 'stage2' files. They will be
in the directories with the same name.
You should have two (2) formatted diskettes available. One of
these will only be used temporarily to create the other one, and we'll
refer to it as 'RAW GRUB' diskette (you can label it accordingly if
you wish). The other diskette, which we will refer to as 'GRUB FS'
should be high-level formatted with one of GRUB's supported file
systems, which are: DOS FAT, BSD FFS, and Linux ext2fs.
A DOS FAT diskette can, obviously, be created under DOS with the
'FORMAT' command. Under Linux, the following commands are available to
add file systems to low-level formatted diskettes:
1. To add a DOS FAT file system to a low-level formatted diskette:
a) If you have mtools installed:
'mformat a:'.
b) Assuming that you are formatting the diskette in the first
floppy disk drive ('/dev/fd0' under Linux):
'mkdosfs /dev/fd0' or
'mkfs.msdos /dev/fd0'.
2. To add a Linux ext2fs file system to a low-level formatted
diskette, assuming that you are formatting the diskette in the
first floppy disk drive ('/dev/fd0' under Linux):
'mke2fs /dev/fd0' or
'mkfs.ext2 /dev/fd0'.
Next we will install using 'rawrite' or 'dd' to the 'GRUB RAW'
diskette.
NOTE: This will destroy any data currently on the diskette.
Execute your OS's equivalent of (this should work for recent
FreeBSD versions and Linux just fine):
```shell
dd if=stage1/stage1 of=/dev/fd0 bs=512 count=1
dd if=stage2/stage2 of=/dev/fd0 bs=512 seek=1
```
Under DOS/Windows/NT, courtesy of Eric Hanchrow (erich@microsoft.com):
* Use the copy /b command to binary concatenate the stage1 and
stage2 files together via:
```shell
copy /b stage1\stage1 stage2\stage2 grub.raw
```
* Use rawrite.exe (which is available in many places on the net and
in some Linux distributions) to write grub.raw to a diskette.
(CCJ: I am not sure about the Windows location etc)
Next stage: copy the 'stage1' and 'stage2' files to the 'GRUB FS'
diskette (if you are using Linux you can mount the diskette in an
appropriate mount point and then 'cp' the files to it, if it is either
a DOS FAT or an EXT2FS diskette, or in the case of a DOS FAT diskette
you can use 'mcopy' from 'mtools'.)
After this is done boot a PC using the 'GRUB RAW' diskette. After
this is done, you will get GRUB's command line interface. Exchange
'GRUB RAW' with the 'GRUB FS' diskette in the drive and issue the
following command from GRUB's prompt:
```shell
install=(fd0)/stage1 (fd0) (fd0)/stage2 0x8000 (fd0)/grubmenu
```
This command will make the 'GRUB FS' diskette bootable. After this
is done, you won't require the 'GRUB RAW' diskette anymore and you can
delete the 'stage1' file from the 'GRUB FS' diskette.
Next copy all the files you wish to load to the diskette. The GRUB
loadable test and sample files in the RTEMS distribution have '.exe'
extension and can be found under the build point in the 'pc386/tests'
directory. You can compress this files with gzip to save space if you
wish. GRUB loads 'gzipped' files transparently.
Finally you have to create a GRUB menu configuration file. We will
call this file 'grubmenu'. You can call it anything as long as you use
the correct name in the 'install' command where we used 'grubmenu'.
The 'grubmenu' file, as far as we are interested has the following
syntax:
title= Hello World Test
kernel= (fd0)/hello.exe.gz
You can add as many of this entries as you want to the 'grubmenu'
file. There should be one for each program you wish to load. The
'title=' line provides a description for the program that will appear
after boot in the GRUB menu for the user to choose and the 'kernel='
line describes where the file can be found by GRUB (you should leave
the '(fd0)/' part and just substitute the rest if you've copied the
files to the root directory of the diskette.
Just boot the PC with the 'GRUB FS' diskette and you will be able
to choose which program you want to load from GRUB's menu.
The GRUB documentation is available in HTML format in the 'docs'
directory of the GRUB tree starting with the 'index.html' file.
6.3 Using GRUB to load RTEMS PC386 applications via PXE NetBoot
----------------------------------------------------------------
PXE is the Intel Preboot Execution Environment. A number of PC
manufactures provide a PXE option in the BIOS. This is usually a
Net Boot option in a BIOS configuration screen. The simplist way to
load an RTEMS application via PXE is to use GRUB as a first stage
loader.
You will need to determine your network card, and have a working
network with a DHCP (or BOOTP), and TFTP server.
You may to find a TFTP server that does not support option
negotiations. A google search shows a number of PC's have a buggy
PXE loader. Supressing option negotiations seems to make them
work.
You will need to build GRUB for your network card. Follow the
procedure in item 6.2 up to the configure point. At this point
run the following configure command:
```shell
$ ../grub-0.93/configure --enable-diskless --enable-eepro100
```
for an Etherexpress Pro 100 network card, then run make:
```shell
$ make
```
Once complete you should have the 'stage2/pxegrub' file. Copy
this to your TFTP server's download directory. Configure your
DHCP server to provide an IP address and download the image. For
the ISC server found on operating systems such as Linux something
like the following should do:
```shell
#
# PC loading RTEMS via PXE and GRUB
#
group
{
filename "/tftpboot/pxeboot";
host rtems-pc { hardware ethernet 00:08:c7:73:41:65; }
}
```
If all works your PC should boot and load GRUB over the network:
```shell
GRUB version 0.93 (639K lower / 64512K upper memory)
Address: 10.10.10.10
NetMask: 255.255.255.0
Server: 10.10.10.1
Gateway: 10.10.10.1
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
```
Copy your RTEMS executable to the TFTP server directory then enter
the following GRUB commands:
```shell
grub> root (nd)
Filesystem type is tftp, using whole disk
grub> kernel ticker.exe
[Multiboot-elf, <0x100000:0x1e5a4:0x2b08>, shtab=0x122140, entry=0x10000c]
grub> boot
```
The GRUB documents how to get GRUB to load a configuration file.
6.4 Using NetBoot to load RTEMS PC386 applications
---------------------------------------------------
To load the '*.bt' files you can
Alternatively, if you have a PC connected to a network with a
BOOTP server and a TFTP server (this can very well be you're Linux
RTEMS host system), you can use Gero Kuhlmann's NetBoot loader, to
load RTEMS to a diskless PC across a network. You can get it from:
ftp://sunsite.unc.edu/pub/Linux/system/boot/ethernet/netboot-0.7.3.tar.gz
or in any of Sunsite's mirrors. It is also available from NetBoot's
homepage:
http://www.han.de/~gero/netboot
After unarchiving 'netboot-0.7.3.tar.gz' you should change to the
base directory of this and run:
```shell
./configure --disable-mknbi-dos --disable-mknbi-linux --disable-mknbi-mgl
```
Afterwards, you should follow the instructions contained in the
'INSTALL' file also contained in the base directory, on how to setup the
server(s) and to build a boot ROM for the client PC network card, or a
boot diskette, and the PC client should be able to load the '*.bt' files
from the server.
The important sections to check in the 'INSTALL FILE' are the last two:
- Setup of the server (only the BOOTP and TFTP parts - ignore NFS).
===================
- Setup of the client including building the bootrom
==================================================
all the rest can be safely ignored if you don't care to examine it.
7. Technical Information
------------------------
NOTE: All the following paths are relative to the base directory
of the RTEMS distribution.
As of the writing of this HOWTO, PC386 images can be loaded either
in low memory 0x10000 (64KB) until 0x97C00 (607K) using NetBoot or in
high memory from 0x100000 (1024KB) until the top of the available
memory using either NetBoot or GRUB.
If you want to change the default loading address from 1024KB to
something else, just change the value of the variable RELOCADDR in the
'make/custom/pc386.cfg' file to the new value you want (make sure you
follow the instructions indicated before the definition of RELOCADDR).
Remember that GRUB restricts the loading addresses to values above
0x100000 (1024KB), only NetBoot can load images in low memory.
After you make any changes to RELOCADDR and if you are using
NetLoader, you'll have to recompile the
'c/src/lib/libbsp/i386/pc386/start/start16.s' file. The easiest way to
achieve this is just to 'make clean' and the 'make all' again. The
quickest way is to change to
'<build_point>/c/src/lib/libbsp/i386/pc386/start' and 'make
RTEMS_BSP=pc386 clean all'.
When programming interrupt handlers take into account that the PIC
is reprogrammed and so you should use the interface functions provided
in '<build_point>/pc386/lib/include/irq.h> to guarantee that everything
works ok.

View File

@@ -1,21 +0,0 @@
There are a wide range of PC configurations. This BSP has been tested
on only a handful. There are configurations which do not yet work. The
failure is suspected to be video card related. Here is a list of
successes and failures.
SUCCESSES
=========
GRUB - AMD K6 MMX 200Mhz + S3 ViRGE
GRUB - 486 DX 33Mhz + Cirrus Logic CL-GD540x/542x
GRUB - Pentium MMX 166Mhz + S3 Trio 64V2
GRUB - Pentium (P54C) 120Mhz + S3 Trio 64V+
GRUB - Pentium-S 133Mhz + S3 Trio 64V2
FAILURES
========
GRUB - 486 DX2 66Mhz + Cirrus Logic CL-GD5428 - reset
GRUB - PII 333 Mhz + STB Vision 128 - reset
GRUB - PII 300 Mhz + Permedia - reset
GRUB - Pentium 60 Mhz + Mach 32/64 - reset

View File

@@ -1,10 +0,0 @@
The following files were developed by Erich Boleyn <erich@uruk.org>.
The original files were copied from http://www.uruk.org/mps/ and committed
into cvs as is. These files will be modified for RTEMS smp support,
but the original files are being committed in order to track any file
changes that occur. We are attempting to keep these changes as minimal
and conainted as possible.
+ smp-imps.c
+ smp-imps.h
+ ../irq/apic.h

View File

@@ -1,31 +0,0 @@
Initialization :
set the CSR_UART_DIVISOR to the correct VALUE,
depending on the internal frequency of the LatticeMico32 softcore.
for the ML401 board, this value is calculated using this formula : clk_frequency/230400/16
clk_frequency = 100000000 Hz
=> we must set CSR_UART_DIVISOR to 27
How to send a byte to uart :
void writechar(char c)
{
CSR_UART_RXTX = c;
while(!(irq_pending() & IRQ_UARTTX));
irq_ack(IRQ_UARTTX);
}
How to receive a byte from uart :
char readchar()
{
char c;
while(!(irq_pending() & IRQ_UARTRX));
irq_ack(IRQ_UARTRX);
c = CSR_UART_RXTX;
return c;
}

View File

@@ -17,3 +17,40 @@ Includes drivers for:
- RS232 debug port
For more information: http://www.milkymist.org/
UART
----
Initialization:
set the CSR_UART_DIVISOR to the correct VALUE,
depending on the internal frequency of the LatticeMico32 softcore.
for the ML401 board, this value is calculated using this formula : clk_frequency/230400/16
clk_frequency = 100000000 Hz
=> we must set CSR_UART_DIVISOR to 27
How to send a byte to uart :
```c
void writechar(char c)
{
CSR_UART_RXTX = c;
while(!(irq_pending() & IRQ_UARTTX));
irq_ack(IRQ_UARTTX);
}
```
How to receive a byte from uart :
```c
char readchar()
{
char c;
while(!(irq_pending() & IRQ_UARTRX));
irq_ack(IRQ_UARTRX);
c = CSR_UART_RXTX;
return c;
}
```

View File

@@ -253,3 +253,314 @@ External interrupt lines (priority is fixed between 3 and 4):
+-----+--------+--------+--------+--------+--------+--------+--------+--------+
```
Timing tests
------------
```
TIMING TESTS 2005-01-28
========================
*** TIME TEST 1 ***
rtems_semaphore_create 19
rtems_semaphore_delete 21
rtems_semaphore_obtain: available 4
rtems_semaphore_obtain: not available -- NO_WAIT 5
rtems_semaphore_release: no waiting tasks 12
*** END OF TEST 1 ***
*** TIME TEST 2 ***
rtems_semaphore_obtain: not available -- caller blocks 34
*** END OF TEST 2 ***
*** TIME TEST 3 ***
rtems_semaphore_release: task readied -- preempts caller 27
*** END OF TEST 3 ***
*** TIME TEST 4 ***
rtems_task_restart: blocked task -- preempts caller 54
rtems_task_restart: ready task -- preempts caller 52
rtems_semaphore_release: task readied -- returns to caller 18
rtems_task_create 87
rtems_task_start 24
rtems_task_restart: suspended task -- returns to caller 27
rtems_task_delete: suspended task 66
rtems_task_restart: ready task -- returns to caller 28
rtems_task_restart: blocked task -- returns to caller 38
rtems_task_delete: blocked task 69
*** END OF TEST 4 ***
*** TIME TEST 5 ***
rtems_task_suspend: calling task 23
rtems_task_resume: task readied -- preempts caller 22
*** END OF TEST 5 ***
*** TIME TEST 6 ***
rtems_task_restart: calling task 30
rtems_task_suspend: returns to caller 9
rtems_task_resume: task readied -- returns to caller 12
rtems_task_delete: ready task 69
*** END OF TEST 6 ***
*** TIME TEST 7 ***
rtems_task_restart: suspended task -- preempts caller 44
*** END OF TEST 7 ***
*** TIME TEST 9 ***
rtems_message_queue_create 55
rtems_message_queue_send: no waiting tasks 20
rtems_message_queue_urgent: no waiting tasks 21
rtems_message_queue_receive: available 20
rtems_message_queue_flush: no messages flushed 8
rtems_message_queue_flush: messages flushed 12
rtems_message_queue_delete 29
*** END OF TEST 9 ***
*** TIME TEST 10 ***
rtems_message_queue_receive: not available -- NO_WAIT 10
rtems_message_queue_receive: not available -- caller blocks 38
*** END OF TEST 10 ***
*** TIME TEST 11 ***
rtems_message_queue_send: task readied -- preempts caller 37
*** END OF TEST 11 ***
*** TIME TEST 12 ***
rtems_message_queue_send: task readied -- returns to caller 23
*** END OF TEST 12 ***
*** TIME TEST 13 ***
rtems_message_queue_urgent: task readied -- preempts caller 35
*** END OF TEST 13 ***
*** TIME TEST 14 ***
rtems_message_queue_urgent: task readied -- returns to caller 24
*** END OF TEST 14 ***
*** TIME TEST 15 ***
rtems_event_receive: obtain current events 0
rtems_event_receive: not available -- NO_WAIT 5
rtems_event_receive: not available -- caller blocks 28
rtems_event_send: no task readied 5
rtems_event_receive: available 9
rtems_event_send: task readied -- returns to caller 16
*** END OF TEST 15 ***
*** TIME TEST 16 ***
rtems_event_send: task readied -- preempts caller 27
*** END OF TEST 16 ***
*** TIME TEST 17 ***
rtems_task_set_priority: preempts caller 39
*** END OF TEST 17 ***
*** TIME TEST 18 ***
rtems_task_delete: calling task 83
*** END OF TEST 18 ***
*** TIME TEST 19 ***
rtems_signal_catch 5
rtems_signal_send: returns to caller 12
rtems_signal_send: signal to self 20
exit ASR overhead: returns to calling task 15
exit ASR overhead: returns to preempting task 18
*** END OF TEST 19 ***
*** TIME TEST 20 ***
rtems_partition_create 20
rtems_region_create 40
rtems_partition_get_buffer: available 11
rtems_partition_get_buffer: not available 7
rtems_partition_return_buffer 12
rtems_partition_delete 11
rtems_region_get_segment: available 28
rtems_region_get_segment: not available -- NO_WAIT 29
rtems_region_return_segment: no waiting tasks 29
rtems_region_get_segment: not available -- caller blocks 55
rtems_region_return_segment: task readied -- preempts caller 72
rtems_region_return_segment: task readied -- returns to caller 58
rtems_region_delete 25
rtems_io_initialize 1
rtems_io_open 1
rtems_io_close 1
rtems_io_read 1
rtems_io_write 1
rtems_io_control 1
*** END OF TEST 20 ***
*** TIME TEST 21 ***
rtems_task_ident 60
rtems_message_queue_ident 60
rtems_semaphore_ident 69
rtems_partition_ident 59
rtems_region_ident 60
rtems_port_ident 59
rtems_timer_ident 61
rtems_rate_monotonic_ident 60
*** END OF TEST 21 ***
*** TIME TEST 22 ***
rtems_message_queue_broadcast: task readied -- returns to caller 32
rtems_message_queue_broadcast: no waiting tasks 14
rtems_message_queue_broadcast: task readied -- preempts caller 39
*** END OF TEST 22 ***
*** TIME TEST 23 ***
rtems_timer_create 8
rtems_timer_fire_after: inactive 12
rtems_timer_fire_after: active 12
rtems_timer_cancel: active 9
rtems_timer_cancel: inactive 8
rtems_timer_reset: inactive 14
rtems_timer_reset: active 15
rtems_timer_fire_when: inactive 21
rtems_timer_fire_when: active 21
rtems_timer_delete: active 12
rtems_timer_delete: inactive 11
rtems_task_wake_when 35
*** END OF TEST 23 ***
*** TIME TEST 24 ***
rtems_task_wake_after: yield -- returns to caller 3
rtems_task_wake_after: yields -- preempts caller 18
*** END OF TEST 24 ***
*** TIME TEST 25 ***
rtems_clock_tick 7
*** END OF TEST 25 ***
*** TIME TEST 26 ***
_ISR_Disable 1
_ISR_Flash 0
_ISR_Enable 0
_Thread_Disable_dispatch 1
_Thread_Enable_dispatch 3
_Thread_Set_state 7
_Thread_Disptach (NO FP) 16
context switch: no floating point contexts 12
context switch: self 2
context switch: to another task 1
fp context switch: restore 1st FP task 14
fp context switch: save idle, restore initialized 3
fp context switch: save idle, restore idle 13
fp context switch: save initialized, restore initialized 2
_Thread_Resume 7
_Thread_Unblock 6
_Thread_Ready 5
_Thread_Get 1
_Semaphore_Get 1
_Thread_Get: invalid id 0
*** END OF TEST 26 ***
*** TIME TEST 27 ***
interrupt entry overhead: returns to interrupted task 3
interrupt exit overhead: returns to interrupted task 3
interrupt entry overhead: returns to nested interrupt 2
interrupt exit overhead: returns to nested interrupt 2
interrupt entry overhead: returns to preempting task 4
interrupt exit overhead: returns to preempting task 20
*** END OF TEST 27 ***
*** TIME TEST 28 ***
rtems_port_create 12
rtems_port_external_to_internal 5
rtems_port_internal_to_external 6
rtems_port_delete 12
*** END OF TEST 28 ***
*** TIME TEST 29 ***
rtems_rate_monotonic_create 13
rtems_rate_monotonic_period: initiate period -- returns to caller 20
rtems_rate_monotonic_period: obtain status 10
rtems_rate_monotonic_cancel 13
rtems_rate_monotonic_delete: inactive 17
rtems_rate_monotonic_delete: active 16
rtems_rate_monotonic_period: conclude periods -- caller blocks 24
*** END OF TEST 29 ***
*** TIME CHECKER ***
Units may not be in microseconds for this test!!!
0 100000
Total time = 0
Average time = 0
NULL timer stopped at 0
LOOP (1000) timer stopped at 188
LOOP (10000) timer stopped at 1875
LOOP (50000) timer stopped at 9375
LOOP (100000) timer stopped at 18750
*** END OF TIME CHECKER ***
*** TIME TEST OVERHEAD ***
rtems_initialize_executive 0
rtems_shutdown_executive 0
rtems_task_create 0
rtems_task_ident 0
rtems_task_start 0
rtems_task_restart 0
rtems_task_delete 0
rtems_task_suspend 0
rtems_task_resume 0
rtems_task_set_priority 0
rtems_task_mode 0
rtems_task_get_note 0
rtems_task_set_note 0
rtems_task_wake_when 1
rtems_task_wake_after 0
rtems_interrupt_catch 0
rtems_clock_get 1
rtems_clock_set 1
rtems_clock_tick 0
rtems_timer_create 0
rtems_timer_delete 0
rtems_timer_ident 0
rtems_timer_fire_after 1
rtems_timer_fire_when 1
rtems_timer_reset 0
rtems_timer_cancel 0
rtems_semaphore_create 0
rtems_semaphore_delete 0
rtems_semaphore_ident 0
rtems_semaphore_obtain 0
rtems_semaphore_release 0
rtems_message_queue_create 0
rtems_message_queue_ident 0
rtems_message_queue_delete 0
rtems_message_queue_send 0
rtems_message_queue_urgent 0
rtems_message_queue_broadcast 0
rtems_message_queue_receive 0
rtems_message_queue_flush 0
rtems_event_send 0
rtems_event_receive 0
rtems_signal_catch 0
rtems_signal_send 0
rtems_partition_create 0
rtems_partition_ident 0
rtems_partition_delete 0
rtems_partition_get_buffer 0
rtems_partition_return_buffer 0
rtems_region_create 0
rtems_region_ident 0
rtems_region_delete 0
rtems_region_get_segment 0
rtems_region_return_segment 0
rtems_port_create 0
rtems_port_ident 0
rtems_port_delete 0
rtems_port_external_to_internal 0
rtems_port_internal_to_external 0
rtems_io_initialize 0
rtems_io_open 0
rtems_io_close 0
rtems_io_read 0
rtems_io_write 0
rtems_io_control 0
rtems_fatal_error_occurred 0
rtems_rate_monotonic_create 0
rtems_rate_monotonic_ident 0
rtems_rate_monotonic_delete 0
rtems_rate_monotonic_cancel 0
rtems_rate_monotonic_period 0
rtems_multiprocessing_announce 0
*** END OF TIME OVERHEAD ***
```

View File

@@ -1,305 +0,0 @@
TIMING TESTS 2005-01-28
========================
*** TIME TEST 1 ***
rtems_semaphore_create 19
rtems_semaphore_delete 21
rtems_semaphore_obtain: available 4
rtems_semaphore_obtain: not available -- NO_WAIT 5
rtems_semaphore_release: no waiting tasks 12
*** END OF TEST 1 ***
*** TIME TEST 2 ***
rtems_semaphore_obtain: not available -- caller blocks 34
*** END OF TEST 2 ***
*** TIME TEST 3 ***
rtems_semaphore_release: task readied -- preempts caller 27
*** END OF TEST 3 ***
*** TIME TEST 4 ***
rtems_task_restart: blocked task -- preempts caller 54
rtems_task_restart: ready task -- preempts caller 52
rtems_semaphore_release: task readied -- returns to caller 18
rtems_task_create 87
rtems_task_start 24
rtems_task_restart: suspended task -- returns to caller 27
rtems_task_delete: suspended task 66
rtems_task_restart: ready task -- returns to caller 28
rtems_task_restart: blocked task -- returns to caller 38
rtems_task_delete: blocked task 69
*** END OF TEST 4 ***
*** TIME TEST 5 ***
rtems_task_suspend: calling task 23
rtems_task_resume: task readied -- preempts caller 22
*** END OF TEST 5 ***
*** TIME TEST 6 ***
rtems_task_restart: calling task 30
rtems_task_suspend: returns to caller 9
rtems_task_resume: task readied -- returns to caller 12
rtems_task_delete: ready task 69
*** END OF TEST 6 ***
*** TIME TEST 7 ***
rtems_task_restart: suspended task -- preempts caller 44
*** END OF TEST 7 ***
*** TIME TEST 9 ***
rtems_message_queue_create 55
rtems_message_queue_send: no waiting tasks 20
rtems_message_queue_urgent: no waiting tasks 21
rtems_message_queue_receive: available 20
rtems_message_queue_flush: no messages flushed 8
rtems_message_queue_flush: messages flushed 12
rtems_message_queue_delete 29
*** END OF TEST 9 ***
*** TIME TEST 10 ***
rtems_message_queue_receive: not available -- NO_WAIT 10
rtems_message_queue_receive: not available -- caller blocks 38
*** END OF TEST 10 ***
*** TIME TEST 11 ***
rtems_message_queue_send: task readied -- preempts caller 37
*** END OF TEST 11 ***
*** TIME TEST 12 ***
rtems_message_queue_send: task readied -- returns to caller 23
*** END OF TEST 12 ***
*** TIME TEST 13 ***
rtems_message_queue_urgent: task readied -- preempts caller 35
*** END OF TEST 13 ***
*** TIME TEST 14 ***
rtems_message_queue_urgent: task readied -- returns to caller 24
*** END OF TEST 14 ***
*** TIME TEST 15 ***
rtems_event_receive: obtain current events 0
rtems_event_receive: not available -- NO_WAIT 5
rtems_event_receive: not available -- caller blocks 28
rtems_event_send: no task readied 5
rtems_event_receive: available 9
rtems_event_send: task readied -- returns to caller 16
*** END OF TEST 15 ***
*** TIME TEST 16 ***
rtems_event_send: task readied -- preempts caller 27
*** END OF TEST 16 ***
*** TIME TEST 17 ***
rtems_task_set_priority: preempts caller 39
*** END OF TEST 17 ***
*** TIME TEST 18 ***
rtems_task_delete: calling task 83
*** END OF TEST 18 ***
*** TIME TEST 19 ***
rtems_signal_catch 5
rtems_signal_send: returns to caller 12
rtems_signal_send: signal to self 20
exit ASR overhead: returns to calling task 15
exit ASR overhead: returns to preempting task 18
*** END OF TEST 19 ***
*** TIME TEST 20 ***
rtems_partition_create 20
rtems_region_create 40
rtems_partition_get_buffer: available 11
rtems_partition_get_buffer: not available 7
rtems_partition_return_buffer 12
rtems_partition_delete 11
rtems_region_get_segment: available 28
rtems_region_get_segment: not available -- NO_WAIT 29
rtems_region_return_segment: no waiting tasks 29
rtems_region_get_segment: not available -- caller blocks 55
rtems_region_return_segment: task readied -- preempts caller 72
rtems_region_return_segment: task readied -- returns to caller 58
rtems_region_delete 25
rtems_io_initialize 1
rtems_io_open 1
rtems_io_close 1
rtems_io_read 1
rtems_io_write 1
rtems_io_control 1
*** END OF TEST 20 ***
*** TIME TEST 21 ***
rtems_task_ident 60
rtems_message_queue_ident 60
rtems_semaphore_ident 69
rtems_partition_ident 59
rtems_region_ident 60
rtems_port_ident 59
rtems_timer_ident 61
rtems_rate_monotonic_ident 60
*** END OF TEST 21 ***
*** TIME TEST 22 ***
rtems_message_queue_broadcast: task readied -- returns to caller 32
rtems_message_queue_broadcast: no waiting tasks 14
rtems_message_queue_broadcast: task readied -- preempts caller 39
*** END OF TEST 22 ***
*** TIME TEST 23 ***
rtems_timer_create 8
rtems_timer_fire_after: inactive 12
rtems_timer_fire_after: active 12
rtems_timer_cancel: active 9
rtems_timer_cancel: inactive 8
rtems_timer_reset: inactive 14
rtems_timer_reset: active 15
rtems_timer_fire_when: inactive 21
rtems_timer_fire_when: active 21
rtems_timer_delete: active 12
rtems_timer_delete: inactive 11
rtems_task_wake_when 35
*** END OF TEST 23 ***
*** TIME TEST 24 ***
rtems_task_wake_after: yield -- returns to caller 3
rtems_task_wake_after: yields -- preempts caller 18
*** END OF TEST 24 ***
*** TIME TEST 25 ***
rtems_clock_tick 7
*** END OF TEST 25 ***
*** TIME TEST 26 ***
_ISR_Disable 1
_ISR_Flash 0
_ISR_Enable 0
_Thread_Disable_dispatch 1
_Thread_Enable_dispatch 3
_Thread_Set_state 7
_Thread_Disptach (NO FP) 16
context switch: no floating point contexts 12
context switch: self 2
context switch: to another task 1
fp context switch: restore 1st FP task 14
fp context switch: save idle, restore initialized 3
fp context switch: save idle, restore idle 13
fp context switch: save initialized, restore initialized 2
_Thread_Resume 7
_Thread_Unblock 6
_Thread_Ready 5
_Thread_Get 1
_Semaphore_Get 1
_Thread_Get: invalid id 0
*** END OF TEST 26 ***
*** TIME TEST 27 ***
interrupt entry overhead: returns to interrupted task 3
interrupt exit overhead: returns to interrupted task 3
interrupt entry overhead: returns to nested interrupt 2
interrupt exit overhead: returns to nested interrupt 2
interrupt entry overhead: returns to preempting task 4
interrupt exit overhead: returns to preempting task 20
*** END OF TEST 27 ***
*** TIME TEST 28 ***
rtems_port_create 12
rtems_port_external_to_internal 5
rtems_port_internal_to_external 6
rtems_port_delete 12
*** END OF TEST 28 ***
*** TIME TEST 29 ***
rtems_rate_monotonic_create 13
rtems_rate_monotonic_period: initiate period -- returns to caller 20
rtems_rate_monotonic_period: obtain status 10
rtems_rate_monotonic_cancel 13
rtems_rate_monotonic_delete: inactive 17
rtems_rate_monotonic_delete: active 16
rtems_rate_monotonic_period: conclude periods -- caller blocks 24
*** END OF TEST 29 ***
*** TIME CHECKER ***
Units may not be in microseconds for this test!!!
0 100000
Total time = 0
Average time = 0
NULL timer stopped at 0
LOOP (1000) timer stopped at 188
LOOP (10000) timer stopped at 1875
LOOP (50000) timer stopped at 9375
LOOP (100000) timer stopped at 18750
*** END OF TIME CHECKER ***
*** TIME TEST OVERHEAD ***
rtems_initialize_executive 0
rtems_shutdown_executive 0
rtems_task_create 0
rtems_task_ident 0
rtems_task_start 0
rtems_task_restart 0
rtems_task_delete 0
rtems_task_suspend 0
rtems_task_resume 0
rtems_task_set_priority 0
rtems_task_mode 0
rtems_task_get_note 0
rtems_task_set_note 0
rtems_task_wake_when 1
rtems_task_wake_after 0
rtems_interrupt_catch 0
rtems_clock_get 1
rtems_clock_set 1
rtems_clock_tick 0
rtems_timer_create 0
rtems_timer_delete 0
rtems_timer_ident 0
rtems_timer_fire_after 1
rtems_timer_fire_when 1
rtems_timer_reset 0
rtems_timer_cancel 0
rtems_semaphore_create 0
rtems_semaphore_delete 0
rtems_semaphore_ident 0
rtems_semaphore_obtain 0
rtems_semaphore_release 0
rtems_message_queue_create 0
rtems_message_queue_ident 0
rtems_message_queue_delete 0
rtems_message_queue_send 0
rtems_message_queue_urgent 0
rtems_message_queue_broadcast 0
rtems_message_queue_receive 0
rtems_message_queue_flush 0
rtems_event_send 0
rtems_event_receive 0
rtems_signal_catch 0
rtems_signal_send 0
rtems_partition_create 0
rtems_partition_ident 0
rtems_partition_delete 0
rtems_partition_get_buffer 0
rtems_partition_return_buffer 0
rtems_region_create 0
rtems_region_ident 0
rtems_region_delete 0
rtems_region_get_segment 0
rtems_region_return_segment 0
rtems_port_create 0
rtems_port_ident 0
rtems_port_delete 0
rtems_port_external_to_internal 0
rtems_port_internal_to_external 0
rtems_io_initialize 0
rtems_io_open 0
rtems_io_close 0
rtems_io_read 0
rtems_io_write 0
rtems_io_control 0
rtems_fatal_error_occurred 0
rtems_rate_monotonic_create 0
rtems_rate_monotonic_ident 0
rtems_rate_monotonic_delete 0
rtems_rate_monotonic_cancel 0
rtems_rate_monotonic_period 0
rtems_multiprocessing_announce 0
*** END OF TIME OVERHEAD ***