User manual, devel install and windows install.

This commit is contained in:
Chris Johns 2016-03-09 15:37:31 +11:00 committed by Amar Takhar
parent cec0d2be4e
commit c05e43b4a3
17 changed files with 1612 additions and 56 deletions

View File

@ -13,8 +13,6 @@ Waf
---
Waf build system. For more information see http://www.waf.io/
See :ref:`waf`.
Test Suite
----------
@ -32,4 +30,3 @@ Program List
============
List of all available programs in RTEMS

View File

@ -3,10 +3,23 @@ sys.path.append(os.path.abspath('../common/'))
from conf import *
version = '1.0'
release = '5.0'
version = '4.11.0'
release = '4.11.0'
project = "RTEMS User Manual"
exclude_patterns = ['config/build.rst',
'config/runtime.rst',
'start/depend.rst',
'start/transition.rst',
'start/installation.rst',
'start/windows.rst',
'test/create.rst',
'test/running.rst',
'tools/build.rst',
'tools/simulation.rst',
'waf/index.rst']
latex_documents = [
('index', 'user.tex', u'RTEMS User Documentation', u'RTEMS Documentation Project', 'manual'),
('index', 'user.tex', u'RTEMS User Manual', u'RTEMS Documentation Project', 'manual'),
]

View File

@ -1,9 +1,5 @@
:orphan:
Build Configuration
===================
.. index:: Build Configuration
XXX: build configuration

View File

@ -1,9 +1,5 @@
:orphan:
Runtime
=======
.. index:: Runtime Configuration
XXX: runtime config

View File

@ -7,9 +7,6 @@ Glossary
Waf
Waf build system. For more information see http://www.waf.io/
See :ref:`waf`.
Test Suite
Testsuite
RTEMS test suite located in the ``testsuites/`` directory.

View File

@ -1,31 +1,26 @@
.. highlight:: c
============================
RTEMS |version| user manual.
RTEMS |version| User Manual.
============================
Table of Contents
-----------------
.. toctree::
:maxdepth: 2
:maxdepth: 3
:numbered:
overview/index
.. toctree::
:maxdepth: 2
:numbered:
start/index
config/index
tools/index
waf/index
test/index
bsp/index
architecture/index
bsp/index
support/index
additional/index

View File

@ -2,12 +2,134 @@
Overview
=========
Welcome to the :ref:term:`RTEMS` user manual.
Welcome to the :ref:term:`RTEMS` User Manual.
This document will attempt to cover every topic required as a user of RTEMS.
This document covers all the topic required as a user of RTEMS to use the RTEMS
operating system.
.. note::
Developers should look at the :r:url:`devel` for technical information the
RTEMS, Real-Time Executive for Multiprocessor Systems, is a real-time executive
(kernel) which provides a high performance environment for embedded
applications including the following features:
.. sidebar:: Developers
Developers should look at the :r:url:`devel` for technical information the
design and development of RTEMS is located there.
- multitasking capabilities
- homogeneous and heterogeneous multiprocessor systems
- event-driven, priority-based, preemptive scheduling
- optional rate monotonic scheduling
- intertask communication and synchronization
- priority inheritance
- responsive interrupt management
- dynamic memory allocation
- high level of user configurability
RTEMS provides features found in moderen operating system:
- file systems
- networking
- USB
- perminante media such as flash disks, cards and USB devices
Real-time Application Systems
=============================
Real-time application systems are a special class of computer applications.
They have a complex set of characteristics that distinguish them from other
software problems. Generally, they must adhere to more rigorous requirements.
The correctness of the system depends not only on the results of computations,
but also on the time at which the results are produced. The most important and
complex characteristic of real-time application systems is that they must
receive and respond to a set of external stimuli within rigid and critical time
constraints referred to as deadlines. Systems can be buried by an avalanche of
interdependent, asynchronous or cyclical event streams.
Deadlines can be further characterized as either hard or soft based upon the
value of the results when produced after the deadline has passed. A deadline
is hard if the results have no value or if their use will result in a
catastrophic event. In contrast, results which are produced after a soft
deadline may have some value.
Another distinguishing requirement of real-time application systems is the
ability to coordinate or manage a large number of concurrent activities. Since
software is a synchronous entity, this presents special problems. One
instruction follows another in a repeating synchronous cycle. Even though
mechanisms have been developed to allow for the processing of external
asynchronous events, the software design efforts required to process and manage
these events and tasks are growing more complicated.
The design process is complicated further by spreading this activity over a set
of processors instead of a single processor. The challenges associated with
designing and building real-time application systems become very complex when
multiple processors are involved. New requirements such as interprocessor
communication channels and global resources that must be shared between
competing processors are introduced. The ramifications of multiple processors
complicate each and every characteristic of a real-time system.
Real-time Executive
===================
Fortunately, real-time operating systems or real-time executives serve as a
cornerstone on which to build the application system. A real-time multitasking
executive allows an application to be cast into a set of logical, autonomous
processes or tasks which become quite manageable. Each task is internally
synchronous, but different tasks execute independently, resulting in an
asynchronous processing stream. Tasks can be dynamically paused for many
reasons resulting in a different task being allowed to execute for a period of
time. The executive also provides an interface to other system components such
as interrupt handlers and device drivers. System components may request the
executive to allocate and coordinate resources, and to wait for and trigger
synchronizing conditions. The executive system calls effectively extend the
CPU instruction set to support efficient multitasking. By causing tasks to
travel through well-defined state transitions, system calls permit an
application to demand-switch between tasks in response to real-time events.
By proper grouping of responses to stimuli into separate tasks, a system can
now asynchronously switch between independent streams of execution, directly
responding to external stimuli as they occur. This allows the system design to
meet critical performance specifications which are typically measured by
guaranteed response time and transaction throughput. The multiprocessor
extensions of RTEMS provide the features necessary to manage the extra
requirements introduced by a system distributed across several processors. It
removes the physical barriers of processor boundaries from the world of the
system designer, enabling more critical aspects of the system to receive the
required attention. Such a system, based on an efficient real-time,
multiprocessor executive, is a more realistic model of the outside world or
environment for which it is designed. As a result, the system will always be
more logical, efficient, and reliable.
By using the directives provided by RTEMS, the real-time applications developer
is freed from the problem of controlling and synchronizing multiple tasks and
processors. In addition, one need not develop, test, debug, and document
routines to manage memory, pass messages, or provide mutual exclusion. The
developer is then able to concentrate solely on the application. By using
standard software components, the time and cost required to develop
sophisticated real-time applications is significantly reduced.
Open Source
===========
RTEMS is an open source operating and an open source project. As a user you
have access to all the source code and we encourage you to work with the source
code and to integrate the processes used to build tools, the kernel and any 3rd
party libraries into your project's configuration management processes. The
RTEMS project is always improving the way it develivers the kernel to you and
so your feedback is important.
What we used in the RTEMS project to develop and maintain RTEMS does not
dictate what you use to develop and maintain your project. You can and should
select the work-flow that best suites the demands of your project and what you
are delivering.

View File

@ -1,8 +1,53 @@
:orphan:
.. comment: Copyright (c) 2016 Chris Johns <chrisj@rtems.org>
.. comment: All rights reserved.
Dependencies
============
.. index:: Dependencies
XXX: List dependencies
RTEMS applications are developed using cross-development tools running on a
host computer, typically your desktop or a special build server. All RTEMS
tools and runtime libraries are built from source on your host machine. The
RTEMS Project does not maintain binary builds of the tools. This may appear be
the opposite to what you normally experience with host operating systems, and
it is, however this approach works well. RTEMS is not a host operating system
and it is not a distrbution. Providing binary packages for every possible host
operating system is to big a task for the RTEMS Project and it is not a good
use of the core developers time. Their time is better spent making RTEMS better
and faster.
Developer Computer
------------------
The rule for selecting a computer for a developer is `more is better` but we do
understand there are limits. Projects set up different configurations and what
is described here is not an approved set up, rather it is a guide. Some
projects have a suitable development machine per developer while others set up
a tightly controlled central build server. RTEMS is flexible and lets you
engineering a development environment that suites you. The basic specs are:
- Multicore processor
- 8G bytes RAM
- 256G harddisk
RTEMS makes no demands on graphics.
Host Software
-------------
A wide range of host operating systems and hardware can be used. The host
operating systems supported are:
- Linux
- FreeBSD
- NetBSD
- Apple OS X
- Windows
- Solaris
The functionality on POSIX operating such as Linux and FreeBSD is similar and
most features on Windows are supported but you are best to ask on
:r:list:`users` if you have a specific question.
Install and set up your host operating system. We recommend you maintain your
operating system by installing any updates.

View File

@ -1,10 +1,15 @@
.. comment: Copyright (c) 2016 Chris Johns <chrisj@rtems.org>
.. comment: All rights reserved.
===============
Getting Started
===============
XXX: Very brief overview.
RTEMS is an open source operating and an open source project. As a user you
have access to all the source code and this `Getting Started`_ section will show
you how you build the RTEMS compiler tools, kernel and 3rd party libraries from
source.
.. include:: depend.rst
.. include:: installation.rst
.. include:: transition.rst
.. include:: windows.rst

View File

@ -1,12 +1,28 @@
:orphan:
.. comment: Copyright (c) 2016 Chris Johns <chrisj@rtems.org>
.. comment: All rights reserved.
Installation
============
.. index:: Installation
XXX: Some notes about waf etc.
RTEMS is built from source on your host machine. Releases are available from
our :r:url:`ftp` and each release contains a Quick Start build guide. If you
are wanting to track changes to RTEMS as they happen or you want to make
changes to RTEMS to send back to the project on our :r:list:`devel` then you
can use the developer's version available in our :r:url:`git`.
RTEMS supports development on a wide vararity of hosts. There is no preferred
host operating system the project requires you use. This means you are able to
decide on a host operating system that is your passion, suites your needs, or
in some cases is decided for you by your employer. Our aim is to provide a
consistent user experience and on matching hardware the experience should feel
similar.
The RTEMS core development team uses POSIX type operating systems, that is
Unix. The `Released Version`_ and `Development Version`_ sections assume
Unix. Microsoft Windows is documented in a separate section
:ref:`microsoft-windows-installation`.
Released Version
----------------
@ -15,10 +31,612 @@ Released Version
XXX: Tarball
Development Version
-------------------
.. index:: Git
XXX: Git
RTEMS provides open access to it's development processes. The project encouages
all users to inspect, review, comment and contribute to the code base. The
processes described here are the same processes the core development team use
when developing and maintaining RTEMS.
.. warning::
The development version is not for use in production and it can break from
time to time.
.. sidebar:: *GDB and Python*
RTEMS uses Python in GDB to aid debugging which means GDB needs to be built
with Python development libraries. Please check the RSB documentation and
install the packages specified for your host. Make sure a python development
package is included.
The following procedure assumes you have installed and configured your host
operating. It also assumes you have installed any dependent packages needed
when building the tools and the kernel.
You need to select a location to build and install the RTEMS Tool chain and
RTEMS. Make sure there is plenty of disk space and a fast disk is
recommended. Our procedure will document building and installing the tools in a
home directory called :file:`development/rtems`. Using a home directory means
you can do this without needing to be root. You can also use
:file:`/opt/rtems/build` if you have access to that path.
The location used to install the tools and kernel is called the `prefix`. It is
best to have a `prefix` for each different version of RTEMS you are using. If
you are using RTEMS 4.11 in production it is not a good to install a
development version of 4.12 over the top. A separate `prefix` for each version
avoids this.
The RTEMS tool chain changes less often than the RTEMS kernel. One method of
working with development releases is to have a separate `prefix` for the RTEMS
tools and a different one for the RTEMS kernel. You can then update each
without interacting with the other. You can also have a number of RTEMS
versions available to test with.
This procedure will build a SPARC tool chain.
RTEMS Tools Chain
~~~~~~~~~~~~~~~~~
Clone the RTEMS Source Builder (RSB) repository:
.. code-block:: shell
$ cd
$ mkdir -p development/rtems
$ cd development/rtems
$ git clone git://git.rtems.org/rtems-source-builder.git rsb
Cloning into 'rsb'...
remote: Counting objects: 5837, done.
remote: Compressing objects: 100% (2304/2304), done.
remote: Total 5837 (delta 4014), reused 5056 (delta 3494)
Receiving objects: 100% (5837/5837), 2.48 MiB | 292.00 KiB/s, done.
Resolving deltas: 100% (4014/4014), done.
Checking connectivity... done.
.. sidebar:: *Downloading the source*
You need an internet connection to download the source. The downloaded source
is cached locally and the RSB checksums it. If you run a build again the
download output will be missing. Using the RSB from git will download the
source from the upstream project's home site and this could be `http`, `ftp`,
or `git`.
Check all the host packages you need are present. Current libraries are not
checked and this includes checking for the python development libraries GDB
requires:
.. code-block:: shell
$ cd rsb
$ ./source-builder/sb-check
RTEMS Source Builder - Check, 4.12 (e645642255cc)
Environment is ok
Build a tool chain for the SPARC architecure. We are using the SPARC
architecture because GDB has a good simulator that lets us run and test the
samples RTEMS builds by default. The current development version
is `4.12` and is on master:
.. code-block:: shell
$ cd rtems
$ ../source-builder/sb-set-builder \
--prefix=/usr/home/chris/development/rtems/4.12 4.12/rtems-sparc
RTEMS Source Builder - Set Builder, 4.12 (e645642255cc)
Build Set: 4.12/rtems-sparc
Build Set: 4.12/rtems-autotools.bset
Build Set: 4.12/rtems-autotools-internal.bset
config: tools/rtems-autoconf-2.69-1.cfg
package: autoconf-2.69-x86_64-linux-gnu-1
Creating source directory: sources
download: ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz -> sources/autoconf-2.69.tar.gz
downloading: sources/autoconf-2.69.tar.gz - 1.8MB of 1.8MB (100%)
building: autoconf-2.69-x86_64-linux-gnu-1
config: tools/rtems-automake-1.12.6-1.cfg
package: automake-1.12.6-x86_64-linux-gnu-1
download: ftp://ftp.gnu.org/gnu/automake/automake-1.12.6.tar.gz -> sources/automake-1.12.6.tar.gz
downloading: sources/automake-1.12.6.tar.gz - 2.0MB of 2.0MB (100%)
Creating source directory: patches
download: https://git.rtems.org/rtems-tools/plain/tools/4.12/automake/automake-1.12.6-bugzilla.redhat.com-1239379.diff -> patches/automake-1.12.6-bugzilla.redhat.com-1239379.diff
downloading: patches/automake-1.12.6-bugzilla.redhat.com-1239379.diff - 408.0 bytes of 408.0 bytes (100%)
building: automake-1.12.6-x86_64-linux-gnu-1
cleaning: autoconf-2.69-x86_64-linux-gnu-1
cleaning: automake-1.12.6-x86_64-linux-gnu-1
Build Set: Time 0:00:17.465024
Build Set: 4.12/rtems-autotools-base.bset
config: tools/rtems-autoconf-2.69-1.cfg
package: autoconf-2.69-x86_64-linux-gnu-1
building: autoconf-2.69-x86_64-linux-gnu-1
reporting: tools/rtems-autoconf-2.69-1.cfg -> autoconf-2.69-x86_64-linux-gnu-1.txt
reporting: tools/rtems-autoconf-2.69-1.cfg -> autoconf-2.69-x86_64-linux-gnu-1.xml
config: tools/rtems-automake-1.12.6-1.cfg
package: automake-1.12.6-x86_64-linux-gnu-1
building: automake-1.12.6-x86_64-linux-gnu-1
reporting: tools/rtems-automake-1.12.6-1.cfg -> automake-1.12.6-x86_64-linux-gnu-1.txt
reporting: tools/rtems-automake-1.12.6-1.cfg -> automake-1.12.6-x86_64-linux-gnu-1.xml
installing: autoconf-2.69-x86_64-linux-gnu-1 -> /usr/home/chris/development/rtems/4.12
installing: automake-1.12.6-x86_64-linux-gnu-1 -> /usr/home/chris/development/rtems/4.12
cleaning: autoconf-2.69-x86_64-linux-gnu-1
cleaning: automake-1.12.6-x86_64-linux-gnu-1
Build Set: Time 0:00:05.358624
Build Set: Time 0:00:22.824422
config: devel/expat-2.1.0-1.cfg
package: expat-2.1.0-x86_64-linux-gnu-1
download: http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz -> sources/expat-2.1.0.tar.gz
redirect: http://internode.dl.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz
downloading: sources/expat-2.1.0.tar.gz - 549.4kB of 549.4kB (100%)
building: expat-2.1.0-x86_64-linux-gnu-1
reporting: devel/expat-2.1.0-1.cfg -> expat-2.1.0-x86_64-linux-gnu-1.txt
reporting: devel/expat-2.1.0-1.cfg -> expat-2.1.0-x86_64-linux-gnu-1.xml
config: tools/rtems-binutils-2.26-1.cfg
package: sparc-rtems4.12-binutils-2.26-x86_64-linux-gnu-1
download: ftp://ftp.gnu.org/gnu/binutils/binutils-2.26.tar.bz2 -> sources/binutils-2.26.tar.bz2
downloading: sources/binutils-2.26.tar.bz2 - 24.4MB of 24.4MB (100%)
download: https://git.rtems.org/rtems-tools/plain/tools/4.12/binutils/binutils-2.26-rtems-aarch64-x86_64.patch -> patches/binutils-2.26-rtems-aarch64-x86_64.patch
downloading: patches/binutils-2.26-rtems-aarch64-x86_64.patch - 3.2kB of 3.2kB (100%)
building: sparc-rtems4.12-binutils-2.26-x86_64-linux-gnu-1
reporting: tools/rtems-binutils-2.26-1.cfg -> sparc-rtems4.12-binutils-2.26-x86_64-linux-gnu-1.txt
reporting: tools/rtems-binutils-2.26-1.cfg -> sparc-rtems4.12-binutils-2.26-x86_64-linux-gnu-1.xml
config: tools/rtems-gcc-6-20160228-newlib-2.3.0.20160226-1.cfg
package: sparc-rtems4.12-gcc-6-20160228-newlib-2.3.0.20160226-x86_64-linux-gnu-1
download: ftp://gcc.gnu.org/pub/gcc/snapshots/6-20160228/gcc-6-20160228.tar.bz2 -> sources/gcc-6-20160228.tar.bz2
downloading: sources/gcc-6-20160228.tar.bz2 - 90.8MB of 90.8MB (100%)
download: ftp://sourceware.org/pub/newlib/newlib-2.3.0.20160226.tar.gz -> sources/newlib-2.3.0.20160226.tar.gz
downloading: sources/newlib-2.3.0.20160226.tar.gz - 16.9MB of 16.9MB (100%)
download: http://www.mpfr.org/mpfr-2.4.2/mpfr-2.4.2.tar.bz2 ->
sources/mpfr-2.4.2.tar.bz2
downloading: sources/mpfr-2.4.2.tar.bz2 - 1.0MB of 1.0MB (100%)
download: http://www.multiprecision.org/mpc/download/mpc-0.8.1.tar.gz -> sources/mpc-0.8.1.tar.gz
downloading: sources/mpc-0.8.1.tar.gz - 532.2kB of 532.2kB (100%)
download: ftp://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.bz2 -> sources/gmp-4.3.2.tar.bz2
downloading: sources/gmp-4.3.2.tar.bz2 - 1.8MB of 1.8MB (100%)
building: sparc-rtems4.12-gcc-6-20160228-newlib-2.3.0.20160226-x86_64-linux-gnu-1
reporting: tools/rtems-gcc-6-20160228-newlib-2.3.0.20160226-1.cfg -> sparc-rtems4.12-gcc-6-20160228-newlib-2.3.0.20160226-x86_64-linux-gnu-1.txt
reporting: tools/rtems-gcc-6-20160228-newlib-2.3.0.20160226-1.cfg -> sparc-rtems4.12-gcc-6-20160228-newlib-2.3.0.20160226-x86_64-linux-gnu-1.xml
config: tools/rtems-gdb-7.9-1.cfg
package: sparc-rtems4.12-gdb-7.9-x86_64-linux-gnu-1
download: http://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.xz -> sources/gdb-7.9.tar.xz
downloading: sources/gdb-7.9.tar.xz - 17.0MB of 17.0MB (100%)
download: https://git.rtems.org/rtems-tools/plain/tools/4.12/gdb/gdb-sim-arange-inline.diff -> patches/gdb-sim-arange-inline.diff
downloading: patches/gdb-sim-arange-inline.diff - 761.0 bytes of 761.0 bytes (100%)
download: https://git.rtems.org/rtems-tools/plain/tools/4.12/gdb/gdb-sim-cgen-inline.diff -> patches/gdb-sim-cgen-inline.diff
downloading: patches/gdb-sim-cgen-inline.diff - 706.0 bytes of 706.0 bytes (100%)
download: https://git.rtems.org/rtems-tools/plain/tools/4.12/gdb/gdb-7.9-aarch64-x86_64.patch -> patches/gdb-7.9-aarch64-x86_64.patch
downloading: patches/gdb-7.9-aarch64-x86_64.patch - 1.7kB of 1.7kB (100%)
building: sparc-rtems4.12-gdb-7.9-x86_64-linux-gnu-1
reporting: tools/rtems-gdb-7.9-1.cfg -> sparc-rtems4.12-gdb-7.9-x86_64-linux-gnu-1.txt
reporting: tools/rtems-gdb-7.9-1.cfg -> sparc-rtems4.12-gdb-7.9-x86_64-linux-gnu-1.xml
config: tools/rtems-tools-4.12-1.cfg
package: rtems-tools-HEAD-1
Creating source directory: sources/git
git: clone: git://git.rtems.org/rtems-tools.git -> sources/git/rtems-tools.git
git: reset: git://git.rtems.org/rtems-tools.git
git: fetch: git://git.rtems.org/rtems-tools.git -> sources/git/rtems-tools.git
git: checkout: git://git.rtems.org/rtems-tools.git => HEAD
git: pull: git://git.rtems.org/rtems-tools.git
building: rtems-tools-HEAD-1
reporting: tools/rtems-tools-4.12-1.cfg -> rtems-tools-HEAD-1.txt
reporting: tools/rtems-tools-4.12-1.cfg -> rtems-tools-HEAD-1.xml
installing: expat-2.1.0-x86_64-linux-gnu-1 -> /usr/home/chris/development/rtems/4.12
installing: sparc-rtems4.12-binutils-2.26-x86_64-linux-gnu-1 -> /usr/home/chris/development/rtems/4.12
installing: sparc-rtems4.12-gcc-6-20160228-newlib-2.3.0.20160226-x86_64-linux-gnu-1 -> /usr/home/chris/development/rtems/4.12
installing: sparc-rtems4.12-gdb-7.9-x86_64-linux-gnu-1 -> /usr/home/chris/development/rtems/4.12
installing: rtems-tools-HEAD-1 -> /usr/home/chris/development/rtems/4.12
cleaning: expat-2.1.0-x86_64-linux-gnu-1
cleaning: sparc-rtems4.12-binutils-2.26-x86_64-linux-gnu-1
cleaning: sparc-rtems4.12-gcc-6-20160228-newlib-2.3.0.20160226-x86_64-linux-gnu-1
cleaning: sparc-rtems4.12-gdb-7.9-x86_64-linux-gnu-1
cleaning: rtems-tools-HEAD-1
Build Set: Time 0:31:09.754219
RTEMS Kernel
~~~~~~~~~~~~
We need to set our path to include the RTEMS tools we built in the previous
section. The RTEMS tools needs to be first in your path because RTEMS provides
specific versions of the ``autoconf`` and ``automake`` tools. We want to use
the RTEMS version and not your host's versions:
.. code-block:: shell
$ export PATH=$HOME/development/rtems/4.12/bin:$PATH
Create a new location to build the RTEMS kernel:
.. code-block:: shell
$ cd
$ cd development/rtems
$ mkdir kernel
$ cd kernel
Clone the RTEMS respository:
.. code-block:: shell
$ git clone git://git.rtems.org/rtems.git rtems
Cloning into 'rtems'...
remote: Counting objects: 483342, done.
remote: Compressing objects: 100% (88974/88974), done.
remote: Total 483342 (delta 390053), reused 475669 (delta 383809)
Receiving objects: 100% (483342/483342), 69.88 MiB | 1.37 MiB/s, done.
Resolving deltas: 100% (390053/390053), done.
Checking connectivity... done.
The developers version of the code from git requires ``bootstrapping``. This is
an ``autoconf`` and ``automake`` bootstrap to create the various files generated
by ``autoconf`` and ``automake``. RTEMS does not keep these generated files
under version control. The bootstrap process is slow so to speed it up the RSB
provides a command that can perform the bootstrap in parallel using your
available cores:
.. code-block:: shell
$ ./bootstrap -c && ./bootstrap -p && \
$HOME/development/rtems/rsb/rsb/source-builder/sb-bootstrap
removing automake generated Makefile.in files
removing configure files
removing aclocal.m4 files
Generating ./cpukit/dtc/libfdt/preinstall.am
Generating ./cpukit/zlib/preinstall.am
Generating ./cpukit/libdl/preinstall.am
Generating ./cpukit/posix/preinstall.am
Generating ./cpukit/pppd/preinstall.am
Generating ./cpukit/librpc/preinstall.am
Generating ./cpukit/preinstall.am
Generating ./cpukit/sapi/preinstall.am
Generating ./cpukit/score/preinstall.am
Generating ./cpukit/score/cpu/mips/preinstall.am
Generating ./cpukit/score/cpu/sh/preinstall.am
Generating ./cpukit/score/cpu/sparc/preinstall.am
Generating ./cpukit/score/cpu/no_cpu/preinstall.am
Generating ./cpukit/score/cpu/arm/preinstall.am
Generating ./cpukit/score/cpu/m32c/preinstall.am
Generating ./cpukit/score/cpu/moxie/preinstall.am
Generating ./cpukit/score/cpu/v850/preinstall.am
Generating ./cpukit/score/cpu/sparc64/preinstall.am
Generating ./cpukit/score/cpu/or1k/preinstall.am
Generating ./cpukit/score/cpu/i386/preinstall.am
Generating ./cpukit/score/cpu/nios2/preinstall.am
Generating ./cpukit/score/cpu/epiphany/preinstall.am
Generating ./cpukit/score/cpu/m68k/preinstall.am
Generating ./cpukit/score/cpu/lm32/preinstall.am
Generating ./cpukit/score/cpu/powerpc/preinstall.am
Generating ./cpukit/score/cpu/bfin/preinstall.am
Generating ./cpukit/libpci/preinstall.am
Generating ./cpukit/libcrypt/preinstall.am
Generating ./cpukit/rtems/preinstall.am
Generating ./cpukit/telnetd/preinstall.am
Generating ./cpukit/libnetworking/preinstall.a
......
Generating ./c/src/lib/libbsp/powerpc/gen5200/preinstall.am
Generating ./c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am
Generating ./c/src/lib/libbsp/bfin/TLL6527M/preinstall.am
Generating ./c/src/lib/libbsp/bfin/bf537Stamp/preinstall.am
Generating ./c/src/lib/libbsp/bfin/eZKit533/preinstall.am
Generating ./c/src/librtems++/preinstall.am
Generating ./c/src/libchip/preinstall.am
Generating ./c/src/wrapup/preinstall.am
Generating ./c/src/ada/preinstall.am
RTEMS Source Builder - RTEMS Bootstrap, 4.12 (e645642255cc modified)
1/139: autoreconf: configure.ac
2/139: autoreconf: cpukit/configure.ac
3/139: autoreconf: tools/cpu/configure.ac
4/139: autoreconf: tools/cpu/generic/configure.ac
5/139: autoreconf: tools/cpu/sh/configure.ac
6/139: autoreconf: tools/cpu/nios2/configure.ac
7/139: autoreconf: tools/build/configure.ac
8/139: autoreconf: doc/configure.ac
......
124/139: autoreconf: c/src/make/configure.ac
125/139: autoreconf: c/src/librtems++/configure.ac
126/139: autoreconf: c/src/ada-tests/configure.ac
127/139: autoreconf: testsuites/configure.ac
128/139: autoreconf: testsuites/libtests/configure.ac
129/139: autoreconf: testsuites/mptests/configure.ac
130/139: autoreconf: testsuites/fstests/configure.ac
131/139: autoreconf: testsuites/sptests/configure.ac
132/139: autoreconf: testsuites/tmtests/configure.ac
133/139: autoreconf: testsuites/smptests/configure.ac
134/139: autoreconf: testsuites/tools/configure.ac
135/139: autoreconf: testsuites/tools/generic/configure.ac
136/139: autoreconf: testsuites/psxtests/configure.ac
137/139: autoreconf: testsuites/psxtmtests/configure.ac
138/139: autoreconf: testsuites/rhealstone/configure.ac
139/139: autoreconf: testsuites/samples/configure.ac
Bootstrap time: 0:02:47.398824
We build RTEMS in a directory outside of the source tree we have just cloned
and ``bootstrapped``. You cannot build RTEMS while in the source tree. Lets
create a suitable directory using the name of the BSP we are going to build:
.. code-block:: shell
$ cd ..
$ mkdir erc32
$ cd erc32
Configure RTEMS using the ``configure`` command. We use a full path to
``configure`` so the object files built contain the absolute path of the source
files. If you are source level debugging you will be able to access the source
code to RTEMS from the debugger. We will build for the ``erc32`` BSP with POSIX
enabled and the networking stack disabled:
.. code-block:: shell
$ $HOME/development/rtems/kernel/rtems/configure --prefix=$HOME/development/rtems/4.12 \
--target=sparc-rtems4.12 --enable-rtemsbsp=erc32 --enable-posix \
--disable-networking
checking for gmake... no
checking for make... make
checking for RTEMS Version... 4.11.99.0
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... sparc-unknown-rtems4.12
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking that generated files are newer than configure... done
......
checking target system type... sparc-unknown-rtems4.12
checking rtems target cpu... sparc
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for sparc-rtems4.12-strip... sparc-rtems4.12-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
target architecture: sparc.
available BSPs: erc32.
'make all' will build the following BSPs: erc32.
other BSPs can be built with 'make RTEMS_BSP="bsp1 bsp2 ..."'
config.status: creating Makefile
Build RTEMS using two cores:
.. code-block:: shell
$ make -j 2
Making all in tools/build
make[1]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/build'
make all-am
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/build'
gcc -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/tools/build -g -O2 -MT cklength.o -MD -MP -MF .deps/cklength.Tpo -c -o cklength.o /home/chris/development/rtems/kernel/rtems/tools/build/cklength.c
gcc -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/tools/build -g -O2 -MT eolstrip.o -MD -MP -MF .deps/eolstrip.Tpo -c -o eolstrip.o /home/chris/development/rtems/kernel/rtems/tools/build/eolstrip.c
mv -f .deps/cklength.Tpo .deps/cklength.Po
mv -f .deps/eolstrip.Tpo .deps/eolstrip.Po
gcc -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/tools/build -g -O2 -MT compat.o -MD -MP -MF .deps/compat.Tpo -c -o compat.o /home/chris/development/rtems/kernel/rtems/tools/build/compat.c
gcc -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/tools/build -g -O2 -MT packhex.o -MD -MP -MF .deps/packhex.Tpo -c -o packhex.o /home/chris/development/rtems/kernel/rtems/tools/build/packhex.c
mv -f .deps/compat.Tpo .deps/compat.Po
gcc -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/tools/build -g -O2 -MT unhex.o -MD -MP -MF .deps/unhex.Tpo -c -o unhex.o /home/chris/development/rtems/kernel/rtems/tools/build/unhex.c
mv -f .deps/packhex.Tpo .deps/packhex.Po
gcc -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/tools/build -g -O2 -MT rtems-bin2c.o -MD -MP -MF .deps/rtems-bin2c.Tpo -c -o rtems-bin2c.o /home/chris/development/rtems/kernel/rtems/tools/build/rtems-bin2c.c
mv -f .deps/unhex.Tpo .deps/unhex.Po
gcc -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/tools/build -g -O2 -MT binpatch.o -MD -MP -MF .deps/binpatch.Tpo -c -o binpatch.o /home/chris/development/rtems/kernel/rtems/tools/build/binpatch.c
mv -f .deps/rtems-bin2c.Tpo .deps/rtems-bin2c.Po
gcc -g -O2 -o cklength cklength.o
mv -f .deps/binpatch.Tpo .deps/binpatch.Po
gcc -g -O2 -o eolstrip eolstrip.o compat.o
gcc -g -O2 -o packhex packhex.o
gcc -g -O2 -o rtems-bin2c rtems-bin2c.o compat.o
gcc -g -O2 -o unhex unhex.o compat.o
gcc -g -O2 -o binpatch binpatch.o
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/build'
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/build'
Making all in tools/cpu
make[1]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
Making all in generic
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/cpu/generic'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/cpu/generic'
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
make[2]: Nothing to be done for 'all-am'.
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
Making all in testsuites/tools
make[1]: Entering directory '/home/chris/development/rtems/kernel/erc32/testsuites/tools'
Making all in generic
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/testsuites/tools/generic'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/testsuites/tools/generic'
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/testsuites/tools'
make[2]: Nothing to be done for 'all-am'.
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/testsuites/tools'
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32/testsuites/tools'
Making all in sparc-rtems4.12/c
make[1]: Entering directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c'
Making all in .
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c'
Configuring RTEMS_BSP=erc32
checking for gmake... no
checking for make... make
checking build system type... x86_64-pc-linux-gnu
checking host system type... sparc-unknown-rtems4.12
......
cp paranoia.exe paranoia.ralf
make[6]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32/testsuites/samples/paranoia'
Making all in nsecs
make[6]: Entering directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32/testsuites/samples/nsecs'
sparc-rtems4.12-gcc -B../../../../../erc32/lib/ -specs bsp_specs -qrtems -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/c/src/../../testsuites/samples/nsecs -I.. -I/home/chris/development/rtems/kernel/rtems/c/src/../../testsuites/samples/../support/include -mcpu=cypress -O2 -g -ffunction-sections -fdata-sections -Wall -Wmissing-prototypes -Wimplicit-function-declaration -Wstrict-prototypes -Wnested-externs -MT init.o -MD -MP -MF .deps/init.Tpo -c -o init.o /home/chris/development/rtems/kernel/rtems/c/src/../../testsuites/samples/nsecs/init.c
sparc-rtems4.12-gcc -B../../../../../erc32/lib/ -specs bsp_specs -qrtems -DHAVE_CONFIG_H -I. -I/home/chris/development/rtems/kernel/rtems/c/src/../../testsuites/samples/nsecs -I.. -I/home/chris/development/rtems/kernel/rtems/c/src/../../testsuites/samples/../support/include -mcpu=cypress -O2 -g -ffunction-sections -fdata-sections -Wall -Wmissing-prototypes -Wimplicit-function-declaration -Wstrict-prototypes -Wnested-externs -MT empty.o -MD -MP -MF .deps/empty.Tpo -c -o empty.o /home/chris/development/rtems/kernel/rtems/c/src/../../testsuites/samples/nsecs/empty.c
mv -f .deps/empty.Tpo .deps/empty.Po
mv -f .deps/init.Tpo .deps/init.Po
sparc-rtems4.12-gcc -B../../../../../erc32/lib/ -specs bsp_specs -qrtems -mcpu=cypress -O2 -g -ffunction-sections -fdata-sections -Wall -Wmissing-prototypes -Wimplicit-function-declaration -Wstrict-prototypes -Wnested-externs -Wl,--gc-sections -mcpu=cypress -o nsecs.exe init.o empty.o
sparc-rtems4.12-nm -g -n nsecs.exe > nsecs.num
sparc-rtems4.12-size nsecs.exe
text data bss dec hex filename
121392 1888 6624 129904 1fb70 nsecs.exe
cp nsecs.exe nsecs.ralf
make[6]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32/testsuites/samples/nsecs'
make[5]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32/testsuites/samples'
make[4]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32/testsuites/samples'
make[4]: Entering directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32/testsuites'
make[4]: Nothing to be done for 'all-am'.
make[4]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32/testsuites'
make[3]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32/testsuites'
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c/erc32'
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c'
make[1]: Entering directory '/home/chris/development/rtems/kernel/erc32'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32'
All that remains to be done is to install the kernel. Installing RTEMS copies
the API headers and architecture specific libraries to a locaiton under the
`prefix` you provide. You can install any number of BSPs under the same
`prefix`. We recommend you have a separate `prefix` for different versions of
RTEMS. Do not mix versions of RTEMS under the same `prefix`. Make installs
RTEMS with the following command:
.. code-block:: shell
$ make install
Making install in tools/build
make[1]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/build'
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/build'
/bin/mkdir -p '/home/chris/development/rtems/4.12/bin'
/usr/bin/install -c cklength eolstrip packhex unhex rtems-bin2c '/home/chris/development/rtems/4.12/bin'
/bin/mkdir -p '/home/chris/development/rtems/4.12/bin'
/usr/bin/install -c install-if-change '/home/chris/development/rtems/4.12/bin'
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/build'
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/build'
Making install in tools/cpu
make[1]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
Making install in generic
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/cpu/generic'
make[3]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/cpu/generic'
make[3]: Nothing to be done for 'install-exec-am'.
make[3]: Nothing to be done for 'install-data-am'.
make[3]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/cpu/generic'
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/cpu/generic'
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
make[3]: Entering directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
make[3]: Nothing to be done for 'install-exec-am'.
make[3]: Nothing to be done for 'install-data-am'.
make[3]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/cpu'
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32/tools/cpu
......
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32/sparc-rtems4.12/c'
make[1]: Entering directory '/home/chris/development/rtems/kernel/erc32'
make[2]: Entering directory '/home/chris/development/rtems/kernel/erc32'
make[2]: Nothing to be done for 'install-exec-am'.
/bin/mkdir -p '/home/chris/development/rtems/4.12/make'
/usr/bin/install -c -m 644 /home/chris/development/rtems/kernel/rtems/make/main.cfg /home/chris/development/rtems/kernel/rtems/make/leaf.cfg '/home/chris/development/rtems/4.12/make'
/bin/mkdir -p '/home/chris/development/rtems/4.12/share/rtems4.12/make/Templates'
/usr/bin/install -c -m 644 /home/chris/development/rtems/kernel/rtems/make/Templates/Makefile.dir /home/chris/development/rtems/kernel/rtems/make/Templates/Makefile.leaf /home/chris/development/rtems/kernel/rtems/make/Templates/Makefile.lib '/home/chris/development/rtems/4.12/share/rtems4.12/make/Templates'
/bin/mkdir -p '/home/chris/development/rtems/4.12/make/custom'
/usr/bin/install -c -m 644 /home/chris/development/rtems/kernel/rtems/make/custom/default.cfg '/home/chris/development/rtems/4.12/make/custom'
make[2]: Leaving directory '/home/chris/development/rtems/kernel/erc32'
make[1]: Leaving directory '/home/chris/development/rtems/kernel/erc32'
Contributing Patches
~~~~~~~~~~~~~~~~~~~~
RTEMS welcomes fixes to bugs and new features. The RTEMS Project likes to have
bugs fixed against a ticket created on our :r:url:`devel`. Please raise a
ticket if you have a bug. Any changes that are made can be tracked against the
ticket. If you want to add a new a feature please post a message to
:r:list:`devel` describing what you would like to implement. The RTEMS
maintainer will help decide if the feature is in the best interest of the
project. Not everything is and the maintainers need to evalulate how much
effort it is to maintain the feature. Once accepted into the source tree it
becomes the responsibility of the maintainers to keep the feature updated and
working.
Changes to the source tree are tracked using git. If you have not made changes
and enter the source tree and enter a git status command you will see nothing
has changed:
.. code-block:: shell
$ cd ../rtems
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
We will make a change to the source code. In this example I change the help
message to the RTEMS shell's ``halt`` command. Running the same git status
command reports:
.. code-block:: shell
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: cpukit/libmisc/shell/main_halt.c
no changes added to commit (use "git add" and/or "git commit -a")
As an example I have a ticket open and the ticket number is 9876. I commit the
change with the follow git command:
.. code-block:: shell
$ git commit cpukit/libmisc/shell/main_halt.c
An editor is opened and I enter my commit message. The first line is a title
and the following lines form a body. My message is:
.. code-block:: shell
shell: Add more help detail to the halt command.
Closes #9876.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i or -o; assuming --only paths...
#
# Committer: Chris Johns <chrisj@rtems.org>
#
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
# modified: cpukit/libmisc/shell/main_halt.c
When you save and exit the editor git will report the commit's status:
.. code-block:: shell
$ git commit cpukit/libmisc/shell/main_halt.c
[master 9f44dc9] shell: Add more help detail to the halt command.
1 file changed, 1 insertion(+), 1 deletion(-)
You can either email the patch to :r:list:`devel` with the following git
command:
.. code-block:: shell
$ git send-email --to=devel@rtems.org -1
<add output here>
Or you can ask git to create a patch file using:
.. code-block:: shell
$ git format-patch -1
0001-shell-Add-more-help-detail-to-the-halt-command.patch
This patch can be attached to a ticket.

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -1,9 +1,5 @@
:orphan:
Transition
===========
.. index:: Transition, Autotools
XXX: Transition from auto* to waf.

788
user/start/windows.rst Normal file
View File

@ -0,0 +1,788 @@
.. comment: Copyright (c) 2016 Chris Johns <chrisj@rtems.org>
.. comment: All rights reserved.
.. _microsoft-windows-installation:
Microsoft Windows Installation
==============================
.. index:: Microsoft Windows Installation
This section details how you create an RTEMS development environment on
Windows. The installation documented here is on `Windows 7 64bit Professional`.
RTEMS Development on Windows
----------------------------
RTEMS supports Windows as a development host and the tools for most
architectures are available. The RTEMS Project relies on the GNU tools for
compilers and debuggers and we use the simulators that come with GDB and
QEMU. The Windows support for these tools varies and the RTEMS Project is
committed to helping the open source community improve the Windows
experience. If something is not working or supported please email the
:r:list:`users`.
The RTEMS Project's Windows tools are native Windows executables giving the
user the best possible experience on Windows. Native Windows programs use the
standard Windows DLLs and paths. Integration with standard Windows integrated
development tools such as editors is straight forward. POSIX emulation
environments such as Cygwin and the MSYS2 shell have special executables that
require a POSIX emulation DLL and these emulation DLLs add an extra layer of
complexity as well as a performance over-head. The RTEMS Project uses these
POSIX emulation shells to run configure scripts that come with various open
source packages such as `gcc` so they form an important and valued part of the
environment we describe here. The output of this procedure forms the tools you
use during your application development and they do not depend the emulation
DLLs.
The performance of the compiler is as good as you can have on Windows and the
performance compiling a single file will be similar to that on a host like
Linux or FreeBSD given the same hardware. Building the tools from source is
much slower on Windows because POSIX shells and related tools are used and the
POSIX emulation overhead it much much slower than a native POSIX operating
system like Linux and FreeBSD. This overhead is only during the building of the
tools and the RTEMS kernel and if you use a suitable build system that is
native to Windows your application development should be similar to other
operating systems.
Windows path length is limited and can cause problems when building the
tools. The standard Windows API has a ``MAX_PATH`` length of 260
characters. This can effect some of the tools used by RTEMS. It is recommended
you keep the top level directories as short as possible when building the RTEMS
tools and you also keep an eye on the path length when developing your
application. The RTEMS built tools can handle much longer path lengths however
some of the GNU tools such as those in the ``binutils`` package cannot.
POSIX Support
-------------
Building the RTEMS compilers, debugger, the RTEMS kernel and a number of other
3rd party packages requires a POSIX environment. On Windows you can use Cygwin
or MSYS2. This document focuses on MSYS2. It is smaller than Cygwin and comes
with the Arch Linux package manager ``pacman``.
MSYS2 provides MinGW64 support as well as a POSIX shell called MSYS2. The
MinGW64 compiler and related tools produce 64bit native Windows
executables. The shell is a standard Bourne shell and the MSYS2 environment is
a stripped Cygwin shell with enough support to run the various ``configure``
scripts needed to build the RTEMS tools and the RTEMS kernel.
MSYS2 is built around the ``pacman`` packing tool. This makes MSYS2 a
distribution and that is a welcome feature on Windows. You get a powerful tool
to manage your development environment on Windows.
Python
------
We need Python to build the tools as the RSB is written in Python and we need
suitable Python libraries to link to GDB as RTEMS makes use of GDB's Python
support. This place specific demands on the Python we need installed and
available and MSYS2 provides suitable Python versions we can use. You need to
make sure you have the correct type and version of Python installed.
We cannot use the Python executables created by the Python project (python.org)
as they are built by Microsoft's C (MSC) compiler. Linking the MSC Python
libraries with the MinGW64 executables is not easy and MSYS provided us with a
simple solution so we do not support this.
MSYS2 provides two types and versions of Python executables, MinGW and MSYS and
Python version 2 and 3. For Windows we need the MinGW executable so we have
suitables libraries and we have to have Python vrrsion 2 because on Windows GDB
only builds with Python2.
You also need to install the MSYS version of Python along with the MinGW64
Python2 package. The MSYS Python is version 3 and the RSB can support version 2
and 3 of Python and it helps handle some of the long paths building GCC can
generate.
Installing MSYS2
----------------
MSYS2 is installed on a new machine using the MSYS2 installer found on
https://msys2.github.io/. Please select the ``x86_64`` variant for 64bit
support. Run the installer followin the 7 steps listed on the page.
MSYS2 uses the ``pacman`` package manager. The Arch Linux project has detailed
documentation on how to use ``pacman``. What is shown here is a just few
examples of what you can do.
Open a 64bit MSYS shell from the Start Menu:
.. figure:: msys2-minw64-start-menu.png
:width: 50%
:align: center
:alt: MSYS2 64bit Shell Start Menu
The packages we require are:
* python
* mingw-w64-x86_64-python2
* mingw-w64-x86_64-gcc
* git
* bison
* cvs
* diffutils
* make
* patch
* tar
* texinfo
* unzip
.. note::
The actual output provided may vary due to changes in the dependent packages
or newer package versions.
Install the packages using ``pacman``:
.. code-block:: shell
~
$ pacman -S python mingw-w64-x86_64-python2 mingw-w64-x86_64-gcc \
> bison cvs diffutils git make patch tar texinfo unzip
resolving dependencies...
looking for conflicting packages...
Packages (74) db-5.3.28-2 expat-2.1.0-2 gdbm-1.11-3 heimdal-1.5.3-8
libgdbm-1.11-3 mingw-w64-x86_64-binutils-2.26-21
mingw-w64-x86_64-bzip2-1.0.6-5
mingw-w64-x86_64-ca-certificates-20150426-2
mingw-w64-x86_64-crt-git-5.0.0.4627.03684c4-1
mingw-w64-x86_64-expat-2.1.0-6 mingw-w64-x86_64-gcc-libs-5.3.0-2
mingw-w64-x86_64-gdbm-1.11-3 mingw-w64-x86_64-gettext-0.19.6-2
mingw-w64-x86_64-gmp-6.1.0-1
mingw-w64-x86_64-headers-git-5.0.0.4627.53be55d-1
mingw-w64-x86_64-isl-0.15-1 mingw-w64-x86_64-libffi-3.2.1-3
mingw-w64-x86_64-libiconv-1.14-5
mingw-w64-x86_64-libsystre-1.0.1-2
mingw-w64-x86_64-libtasn1-4.7-1
mingw-w64-x86_64-libtre-git-r122.c2f5d13-4
mingw-w64-x86_64-libwinpthread-git-5.0.0.4573.628fdbf-1
mingw-w64-x86_64-mpc-1.0.3-2 mingw-w64-x86_64-mpfr-3.1.3.p0-2
mingw-w64-x86_64-ncurses-6.0.20160220-2
mingw-w64-x86_64-openssl-1.0.2.g-1
mingw-w64-x86_64-p11-kit-0.23.1-3
mingw-w64-x86_64-readline-6.3.008-1 mingw-w64-x86_64-tcl-8.6.5-1
mingw-w64-x86_64-termcap-1.3.1-2 mingw-w64-x86_64-tk-8.6.5-1
mingw-w64-x86_64-windows-default-manifest-6.4-2
mingw-w64-x86_64-winpthreads-git-5.0.0.4573.628fdbf-1
mingw-w64-x86_64-zlib-1.2.8-9 openssh-7.1p2-1 perl-5.22.0-2
perl-Authen-SASL-2.16-2 perl-Convert-BinHex-1.123-2
perl-Encode-Locale-1.04-1 perl-Error-0.17024-1
perl-File-Listing-6.04-2 perl-HTML-Parser-3.71-3
perl-HTML-Tagset-3.20-2 perl-HTTP-Cookies-6.01-2
perl-HTTP-Daemon-6.01-2 perl-HTTP-Date-6.02-2
perl-HTTP-Message-6.06-2 perl-HTTP-Negotiate-6.01-2
perl-IO-Socket-SSL-2.016-1 perl-IO-stringy-2.111-1
perl-LWP-MediaTypes-6.02-2 perl-MIME-tools-5.506-1
perl-MailTools-2.14-1 perl-Net-HTTP-6.09-1
perl-Net-SMTP-SSL-1.02-1 perl-Net-SSLeay-1.70-1
perl-TermReadKey-2.33-1 perl-TimeDate-2.30-2 perl-URI-1.68-1
perl-WWW-RobotRules-6.02-2 perl-libwww-6.13-1 vim-7.4.1468-1
bison-3.0.4-1 cvs-1.11.23-2 diffutils-3.3-3 git-2.7.2-1
make-4.1-4 mingw-w64-x86_64-gcc-5.3.0-2
mingw-w64-x86_64-python2-2.7.11-4 patch-2.7.5-1 python-3.4.3-3
tar-1.28-3 texinfo-6.0-1 unzip-6.0-2
Total Download Size: 114.10 MiB
Total Installed Size: 689.61 MiB
:: Proceed with installation? [Y/n] y
:: Retrieving packages...
mingw-w64-x86_64-gm... 477.1 KiB 681K/s 00:01 [#####################] 100%
mingw-w64-x86_64-li... 24.2 KiB 755K/s 00:00 [#####################] 100%
mingw-w64-x86_64-gc... 541.9 KiB 705K/s 00:01 [#####################] 100%
mingw-w64-x86_64-ex... 106.7 KiB 702K/s 00:00 [#####################] 100%
mingw-w64-x86_64-bz... 77.9 KiB 666K/s 00:00 [#####################] 100%
mingw-w64-x86_64-li... 600.2 KiB 703K/s 00:01 [#####################] 100%
mingw-w64-x86_64-ge... 3.0 MiB 700K/s 00:04 [#####################] 100%
mingw-w64-x86_64-gd... 151.8 KiB 483K/s 00:00 [#####################] 100%
mingw-w64-x86_64-li... 34.5 KiB 705K/s 00:00 [#####################] 100%
mingw-w64-x86_64-li... 69.2 KiB 713K/s 00:00 [#####################] 100%
mingw-w64-x86_64-li... 9.3 KiB 778K/s 00:00 [#####################] 100%
mingw-w64-x86_64-nc... 1800.5 KiB 701K/s 00:03 [#####################] 100%
mingw-w64-x86_64-li... 171.4 KiB 708K/s 00:00 [#####################] 100%
mingw-w64-x86_64-p1... 193.5 KiB 709K/s 00:00 [#####################] 100%
mingw-w64-x86_64-ca... 382.1 KiB 705K/s 00:01 [#####################] 100%
mingw-w64-x86_64-zl... 148.6 KiB 704K/s 00:00 [#####################] 100%
mingw-w64-x86_64-op... 3.3 MiB 624K/s 00:05 [#####################] 100%
mingw-w64-x86_64-te... 12.6 KiB 76.7K/s 00:00 [#####################] 100%
mingw-w64-x86_64-re... 327.4 KiB 277K/s 00:01 [#####################] 100%
mingw-w64-x86_64-tc... 2.9 MiB 699K/s 00:04 [#####################] 100%
mingw-w64-x86_64-tk... 1869.2 KiB 703K/s 00:03 [#####################] 100%
mingw-w64-x86_64-py... 10.9 MiB 699K/s 00:16 [#####################] 100%
mingw-w64-x86_64-bi... 12.7 MiB 688K/s 00:19 [#####################] 100%
mingw-w64-x86_64-he... 5.0 MiB 645K/s 00:08 [#####################] 100%
mingw-w64-x86_64-cr... 2.6 MiB 701K/s 00:04 [#####################] 100%
mingw-w64-x86_64-is... 524.3 KiB 684K/s 00:01 [#####################] 100%
mingw-w64-x86_64-mp... 265.2 KiB 705K/s 00:00 [#####################] 100%
mingw-w64-x86_64-mp... 62.3 KiB 82.9K/s 00:01 [#####################] 100%
mingw-w64-x86_64-wi... 1484.0 B 0.00B/s 00:00 [#####################] 100%
mingw-w64-x86_64-wi... 33.2 KiB 346K/s 00:00 [#####################] 100%
mingw-w64-x86_64-gc... 25.1 MiB 701K/s 00:37 [#####################] 100%
python-3.4.3-3-x86_64 12.1 MiB 700K/s 00:18 [#####################] 100%
bison-3.0.4-1-x86_64 1045.1 KiB 703K/s 00:01 [#####################] 100%
heimdal-1.5.3-8-x86_64 543.7 KiB 703K/s 00:01 [#####################] 100%
cvs-1.11.23-2-x86_64 508.2 KiB 388K/s 00:01 [#####################] 100%
diffutils-3.3-3-x86_64 265.7 KiB 478K/s 00:01 [#####################] 100%
expat-2.1.0-2-x86_64 13.1 KiB 817K/s 00:00 [#####################] 100%
vim-7.4.1468-1-x86_64 6.1 MiB 700K/s 00:09 [#####################] 100%
openssh-7.1p2-1-x86_64 653.4 KiB 703K/s 00:01 [#####################] 100%
db-5.3.28-2-x86_64 41.7 KiB 719K/s 00:00 [#####################] 100%
libgdbm-1.11-3-x86_64 20.4 KiB 754K/s 00:00 [#####################] 100%
gdbm-1.11-3-x86_64 108.5 KiB 704K/s 00:00 [#####################] 100%
perl-5.22.0-2-x86_64 12.4 MiB 702K/s 00:18 [#####################] 100%
perl-Error-0.17024-... 17.1 KiB 742K/s 00:00 [#####################] 100%
perl-Authen-SASL-2.... 42.4 KiB 731K/s 00:00 [#####################] 100%
perl-Encode-Locale-... 9.7 KiB 745K/s 00:00 [#####################] 100%
perl-HTTP-Date-6.02... 8.6 KiB 784K/s 00:00 [#####################] 100%
perl-File-Listing-6... 7.7 KiB 769K/s 00:00 [#####################] 100%
perl-HTML-Tagset-3.... 10.3 KiB 732K/s 00:00 [#####################] 100%
perl-HTML-Parser-3.... 76.9 KiB 516K/s 00:00 [#####################] 100%
perl-LWP-MediaTypes... 18.0 KiB 752K/s 00:00 [#####################] 100%
perl-URI-1.68-1-any 75.6 KiB 609K/s 00:00 [#####################] 100%
perl-HTTP-Message-6... 71.3 KiB 625K/s 00:00 [#####################] 100%
perl-HTTP-Cookies-6... 20.4 KiB 499K/s 00:00 [#####################] 100%
perl-HTTP-Daemon-6.... 14.2 KiB 749K/s 00:00 [#####################] 100%
perl-HTTP-Negotiate... 11.4 KiB 817K/s 00:00 [#####################] 100%
perl-Net-HTTP-6.09-... 19.8 KiB 732K/s 00:00 [#####################] 100%
perl-WWW-RobotRules... 12.2 KiB 766K/s 00:00 [#####################] 100%
perl-libwww-6.13-1-any 122.2 KiB 661K/s 00:00 [#####################] 100%
perl-TimeDate-2.30-... 35.9 KiB 718K/s 00:00 [#####################] 100%
perl-MailTools-2.14... 58.4 KiB 712K/s 00:00 [#####################] 100%
perl-IO-stringy-2.1... 52.6 KiB 721K/s 00:00 [#####################] 100%
perl-Convert-BinHex... 30.1 KiB 733K/s 00:00 [#####################] 100%
perl-MIME-tools-5.5... 180.4 KiB 705K/s 00:00 [#####################] 100%
perl-Net-SSLeay-1.7... 191.2 KiB 708K/s 00:00 [#####################] 100%
perl-IO-Socket-SSL-... 112.5 KiB 703K/s 00:00 [#####################] 100%
perl-Net-SMTP-SSL-1... 3.5 KiB 881K/s 00:00 [#####################] 100%
perl-TermReadKey-2.... 20.9 KiB 745K/s 00:00 [#####################] 100%
git-2.7.2-1-x86_64 3.6 MiB 702K/s 00:05 [#####################] 100%
make-4.1-4-x86_64 387.0 KiB 671K/s 00:01 [#####################] 100%
patch-2.7.5-1-x86_64 75.9 KiB 684K/s 00:00 [#####################] 100%
tar-1.28-3-x86_64 671.9 KiB 379K/s 00:02 [#####################] 100%
texinfo-6.0-1-x86_64 992.7 KiB 625K/s 00:02 [#####################] 100%
unzip-6.0-2-x86_64 93.1 KiB 705K/s 00:00 [#####################] 100%
(74/74) checking keys in keyring [#####################] 100%
(74/74) checking package integrity [#####################] 100%
(74/74) loading package files [#####################] 100%
(74/74) checking for file conflicts [#####################] 100%
(74/74) checking available disk space [#####################] 100%
:: Processing package changes...
( 1/74) installing python [#####################] 100%
( 2/74) installing mingw-w64-x86_64-gmp [#####################] 100%
( 3/74) installing mingw-w64-x86_64-libwinpthr... [#####################] 100%
( 4/74) installing mingw-w64-x86_64-gcc-libs [#####################] 100%
( 5/74) installing mingw-w64-x86_64-expat [#####################] 100%
( 6/74) installing mingw-w64-x86_64-bzip2 [#####################] 100%
( 7/74) installing mingw-w64-x86_64-libiconv [#####################] 100%
( 8/74) installing mingw-w64-x86_64-gettext [#####################] 100%
( 9/74) installing mingw-w64-x86_64-gdbm [#####################] 100%
(10/74) installing mingw-w64-x86_64-libffi [#####################] 100%
(11/74) installing mingw-w64-x86_64-libtre-git [#####################] 100%
(12/74) installing mingw-w64-x86_64-libsystre [#####################] 100%
(13/74) installing mingw-w64-x86_64-ncurses [#####################] 100%
(14/74) installing mingw-w64-x86_64-libtasn1 [#####################] 100%
(15/74) installing mingw-w64-x86_64-p11-kit [#####################] 100%
(16/74) installing mingw-w64-x86_64-ca-certifi... [#####################] 100%
(17/74) installing mingw-w64-x86_64-zlib [#####################] 100%
(18/74) installing mingw-w64-x86_64-openssl [#####################] 100%
(19/74) installing mingw-w64-x86_64-termcap [#####################] 100%
(20/74) installing mingw-w64-x86_64-readline [#####################] 100%
(21/74) installing mingw-w64-x86_64-tcl [#####################] 100%
(22/74) installing mingw-w64-x86_64-tk [#####################] 100%
(23/74) installing mingw-w64-x86_64-python2 [#####################] 100%
(24/74) installing mingw-w64-x86_64-binutils [#####################] 100%
(25/74) installing mingw-w64-x86_64-headers-git [#####################] 100%
(26/74) installing mingw-w64-x86_64-crt-git [#####################] 100%
(27/74) installing mingw-w64-x86_64-isl [#####################] 100%
(28/74) installing mingw-w64-x86_64-mpfr [#####################] 100%
(29/74) installing mingw-w64-x86_64-mpc [#####################] 100%
(30/74) installing mingw-w64-x86_64-windows-de... [#####################] 100%
(31/74) installing mingw-w64-x86_64-winpthread... [#####################] 100%
(32/74) installing mingw-w64-x86_64-gcc [#####################] 100%
(33/74) installing bison [#####################] 100%
(34/74) installing heimdal [#####################] 100%
(35/74) installing cvs [#####################] 100%
(36/74) installing diffutils [#####################] 100%
(37/74) installing expat [#####################] 100%
(38/74) installing vim [#####################] 100%
(39/74) installing openssh [#####################] 100%
(40/74) installing db [#####################] 100%
(41/74) installing libgdbm [#####################] 100%
(42/74) installing gdbm [#####################] 100%
(43/74) installing perl [#####################] 100%
(44/74) installing perl-Error [#####################] 100%
(45/74) installing perl-Authen-SASL [#####################] 100%
(46/74) installing perl-Encode-Locale [#####################] 100%
(47/74) installing perl-HTTP-Date [#####################] 100%
(48/74) installing perl-File-Listing [#####################] 100%
(49/74) installing perl-HTML-Tagset [#####################] 100%
(50/74) installing perl-HTML-Parser [#####################] 100%
(51/74) installing perl-LWP-MediaTypes [#####################] 100%
(52/74) installing perl-URI [#####################] 100%
(53/74) installing perl-HTTP-Message [#####################] 100%
(54/74) installing perl-HTTP-Cookies [#####################] 100%
(55/74) installing perl-HTTP-Daemon [#####################] 100%
(56/74) installing perl-HTTP-Negotiate [#####################] 100%
(57/74) installing perl-Net-HTTP [#####################] 100%
(58/74) installing perl-WWW-RobotRules [#####################] 100%
(59/74) installing perl-libwww [#####################] 100%
Optional dependencies for perl-libwww
perl-LWP-Protocol-HTTPS: for https:// url schemes
(60/74) installing perl-TimeDate [#####################] 100%
(61/74) installing perl-MailTools [#####################] 100%
(62/74) installing perl-IO-stringy [#####################] 100%
(63/74) installing perl-Convert-BinHex [#####################] 100%
module test... pass.
(64/74) installing perl-MIME-tools [#####################] 100%
(65/74) installing perl-Net-SSLeay [#####################] 100%
(66/74) installing perl-IO-Socket-SSL [#####################] 100%
(67/74) installing perl-Net-SMTP-SSL [#####################] 100%
(68/74) installing perl-TermReadKey [#####################] 100%
(69/74) installing git [#####################] 100%
Optional dependencies for git
python2: various helper scripts
subversion: git svn
(70/74) installing make [#####################] 100%
(71/74) installing patch [#####################] 100%
Optional dependencies for patch
ed: for patch -e functionality
(72/74) installing tar [#####################] 100%
(73/74) installing texinfo [#####################] 100%
(74/74) installing unzip [#####################] 100%
Building the RTEMS Tools
------------------------
Create a workspace for RTEMS using the following shell command:
.. sidebar:: *Creating Tool Archives*
Add ``--bset-tar-file`` to the ``sb-set-builder`` command line to create
tar files of the built package set.
.. code-block:: shell
~
$ mkdir -p /c/opt/rtems
The ``/c`` path is an internal MSYS2 mount point of the ``C:`` drive. The
command creates the RTEMS work space on the ``C:`` drive. If you wish to use
another drive please subsitute ``/c`` with your drive letter.
We build and install all RTEMS packages under the `prefix` we just created. Change to that
directory and get a copy of the RSB:
.. code-block:: shell
~
$ cd /c/opt/rtems
/c/opt/rtems
$ git clone git://git.rtems.org/rtems-source-builder.git rsb
Cloning into 'rsb'...
remote: Counting objects: 5716, done.
remote: Compressing objects: 100% (2183/2183), done.
remote: Total 5716 (delta 3919), reused 5071 (delta 3494)
Receiving objects: 100% (5716/5716), 2.46 MiB | 656.00 KiB/s, done.
Resolving deltas: 100% (3919/3919), done.
Checking connectivity... done.
Checking out files: 100% (630/630), done.
/c/opt/rtems
$ cd rsb
We are building RTEMS 4.11 tools so select the *4.11* branch:
.. code-block:: shell
/c/opt/rtems/rsb
$ git checkout 4.11
Branch 4.11 set up to track remote branch 4.11 from origin.
Switched to a new branch '4.11'
/c/opt/rtems/rsb
$
Check the RSB has a valid environment:
.. code-block:: shell
/c/opt/rtems/rsb
$ cd rtems
/c/opt/rtems/rsb/rtems
$ ../source-builder/sb-check
RTEMS Source Builder - Check, 4.11 (01ac76f2f90f)
Environment is ok
/c/opt/rtems/rsb/rtems
$
To build a set of RTEMS tools for the Intel ``i386`` architecture:
.. code-block:: shell
/c/opt/rtems/rsb/rtems
$ ../source-builder/sb-set-builder --prefix=/c/opt/rtems/4.11 4.11/rtems-i386
RTEMS Source Builder - Set Builder, 4.11 (01ac76f2f90f)
Build Set: 4.11/rtems-i386
Build Set: 4.11/rtems-autotools.bset
Build Set: 4.11/rtems-autotools-internal.bset
config: tools/rtems-autoconf-2.69-1.cfg
package: autoconf-2.69-x86_64-w64-mingw32-1
Creating source directory: sources
download: ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz -> sources/autoconf-2.69.tar.gz
downloading: sources/autoconf-2.69.tar.gz - 1.8MB of 1.8MB (100%)
building: autoconf-2.69-x86_64-w64-mingw32-1
config: tools/rtems-automake-1.12.6-1.cfg
package: automake-1.12.6-x86_64-w64-mingw32-1
download: ftp://ftp.gnu.org/gnu/automake/automake-1.12.6.tar.gz -> sources/automake-1.12.6.tar.gz
downloading: sources/automake-1.12.6.tar.gz - 2.0MB of 2.0MB (100%)
building: automake-1.12.6-x86_64-w64-mingw32-1
cleaning: autoconf-2.69-x86_64-w64-mingw32-1
cleaning: automake-1.12.6-x86_64-w64-mingw32-1
Build Set: Time 0:00:42.515625
Build Set: 4.11/rtems-autotools-base.bset
config: tools/rtems-autoconf-2.69-1.cfg
package: autoconf-2.69-x86_64-w64-mingw32-1
building: autoconf-2.69-x86_64-w64-mingw32-1
reporting: tools/rtems-autoconf-2.69-1.cfg -> autoconf-2.69-x86_64-w64-mingw32-1.txt
reporting: tools/rtems-autoconf-2.69-1.cfg -> autoconf-2.69-x86_64-w64-mingw32-1.xml
config: tools/rtems-automake-1.12.6-1.cfg
package: automake-1.12.6-x86_64-w64-mingw32-1
building: automake-1.12.6-x86_64-w64-mingw32-1
reporting: tools/rtems-automake-1.12.6-1.cfg -> automake-1.12.6-x86_64-w64-mingw32-1.txt
reporting: tools/rtems-automake-1.12.6-1.cfg -> automake-1.12.6-x86_64-w64-mingw32-1.xml
tarball: tar/rtems-4.11-autotools-x86_64-w64-mingw32-1.tar.bz2
installing: autoconf-2.69-x86_64-w64-mingw32-1 -> C:\opt\rtems\4.11
installing: automake-1.12.6-x86_64-w64-mingw32-1 -> C:\opt\rtems\4.11
cleaning: autoconf-2.69-x86_64-w64-mingw32-1
cleaning: automake-1.12.6-x86_64-w64-mingw32-1
Build Set: Time 0:00:37.718750
Build Set: Time 0:01:20.234375
config: devel/expat-2.1.0-1.cfg
package: expat-2.1.0-x86_64-w64-mingw32-1
download: http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz -> sources/expat-2.1.0.tar.gz
redirect: http://iweb.dl.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz
downloading: sources/expat-2.1.0.tar.gz - 549.4kB of 549.4kB (100%)
building: expat-2.1.0-x86_64-w64-mingw32-1
reporting: devel/expat-2.1.0-1.cfg -> expat-2.1.0-x86_64-w64-mingw32-1.txt
reporting: devel/expat-2.1.0-1.cfg -> expat-2.1.0-x86_64-w64-mingw32-1.xml
config: tools/rtems-binutils-2.24-1.cfg
package: i386-rtems4.11-binutils-2.24-x86_64-w64-mingw32-1
download: ftp://ftp.gnu.org/gnu/binutils/binutils-2.24.tar.bz2 -> sources/binutils-2.24.tar.bz2
downloading: sources/binutils-2.24.tar.bz2 - 21.7MB of 21.7MB (100%)
building: i386-rtems4.11-binutils-2.24-x86_64-w64-mingw32-1
reporting: tools/rtems-binutils-2.24-1.cfg -> i386-rtems4.11-binutils-2.24-x86_64-w64-mingw32-1.txt
reporting: tools/rtems-binutils-2.24-1.cfg -> i386-rtems4.11-binutils-2.24-x86_64-w64-mingw32-1.xml
config: tools/rtems-gcc-4.9.3-newlib-2.2.0-20150423-1.cfg
package: i386-rtems4.11-gcc-4.9.3-newlib-2.2.0.20150423-x86_64-w64-mingw32-1
download: ftp://ftp.gnu.org/gnu/gcc/gcc-4.9.3/gcc-4.9.3.tar.bz2 -> sources/gcc-4.9.3.tar.bz2
downloading: sources/gcc-4.9.3.tar.bz2 - 85.8MB of 85.8MB (100%)
download: ftp://sourceware.org/pub/newlib/newlib-2.2.0.20150423.tar.gz -> sources/newlib-2.2.0.20150423.tar.gz
downloading: sources/newlib-2.2.0.20150423.tar.gz - 16.7MB of 16.7MB (100%)
download: http://www.mpfr.org/mpfr-3.0.1/mpfr-3.0.1.tar.bz2 -> sources/mpfr-3.0.1.tar.bz2
downloading: sources/mpfr-3.0.1.tar.bz2 - 1.1MB of 1.1MB (100%)
download: http://www.multiprecision.org/mpc/download/mpc-0.8.2.tar.gz -> sources/mpc-0.8.2.tar.gz
downloading: sources/mpc-0.8.2.tar.gz - 535.5kB of 535.5kB (100%)
download: ftp://ftp.gnu.org/gnu/gmp/gmp-5.0.5.tar.bz2 -> sources/gmp-5.0.5.tar.bz2
downloading: sources/gmp-5.0.5.tar.bz2 - 2.0MB of 2.0MB (100%)
building: i386-rtems4.11-gcc-4.9.3-newlib-2.2.0.20150423-x86_64-w64-mingw32-1
reporting: tools/rtems-gcc-4.9.3-newlib-2.2.0-20150423-1.cfg ->
i386-rtems4.11-gcc-4.9.3-newlib-2.2.0.20150423-x86_64-w64-mingw32-1.txt
reporting: tools/rtems-gcc-4.9.3-newlib-2.2.0-20150423-1.cfg ->
i386-rtems4.11-gcc-4.9.3-newlib-2.2.0.20150423-x86_64-w64-mingw32-1.xml
config: tools/rtems-gdb-7.9-1.cfg
package: i386-rtems4.11-gdb-7.9-x86_64-w64-mingw32-1
download: http://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.xz -> sources/gdb-7.9.tar.xz
downloading: sources/gdb-7.9.tar.xz - 17.0MB of 17.0MB (100%)
download: https://git.rtems.org/rtems-tools/plain/tools/4.11/gdb/gdb-sim-arange-inline.diff -> patches/gdb-sim-arange-inline.diff
downloading: patches/gdb-sim-arange-inline.diff - 761.0 bytes of 761.0 bytes (100%)
download: https://git.rtems.org/rtems-tools/plain/tools/4.11/gdb/gdb-sim-cgen-inline.diff -> patches/gdb-sim-cgen-inline.diff
downloading: patches/gdb-sim-cgen-inline.diff - 706.0 bytes of 706.0 bytes (100%)
building: i386-rtems4.11-gdb-7.9-x86_64-w64-mingw32-1
reporting: tools/rtems-gdb-7.9-1.cfg ->
i386-rtems4.11-gdb-7.9-x86_64-w64-mingw32-1.txt
reporting: tools/rtems-gdb-7.9-1.cfg ->
i386-rtems4.11-gdb-7.9-x86_64-w64-mingw32-1.xml
config: tools/rtems-tools-4.11-1.cfg
package: rtems-tools-4.11-1
Creating source directory: sources/git
git: clone: git://git.rtems.org/rtems-tools.git -> sources/git/rtems-tools.git
git: reset: git://git.rtems.org/rtems-tools.git
git: fetch: git://git.rtems.org/rtems-tools.git -> sources/git/rtems-tools.git
git: checkout: git://git.rtems.org/rtems-tools.git => 4.11
git: pull: git://git.rtems.org/rtems-tools.git
building: rtems-tools-4.11-1
reporting: tools/rtems-tools-4.11-1.cfg -> rtems-tools-4.11-1.txt
reporting: tools/rtems-tools-4.11-1.cfg -> rtems-tools-4.11-1.xml
config: tools/rtems-kernel-4.11.cfg
installing: expat-2.1.0-x86_64-w64-mingw32-1 -> C:\opt\rtems\4.11
installing: i386-rtems4.11-binutils-2.24-x86_64-w64-mingw32-1 -> C:\opt\rtems\4.11
installing: i386-rtems4.11-gcc-4.9.3-newlib-2.2.0.20150423-x86_64-w64-mingw32-1 -> C:\opt\rtems\4.11
installing: i386-rtems4.11-gdb-7.9-x86_64-w64-mingw32-1 -> C:\opt\rtems\4.11
installing: rtems-tools-4.11-1 -> C:\opt\rtems\4.11
cleaning: expat-2.1.0-x86_64-w64-mingw32-1
cleaning: i386-rtems4.11-binutils-2.24-x86_64-w64-mingw32-1
cleaning: i386-rtems4.11-gcc-4.9.3-newlib-2.2.0.20150423-x86_64-w64-mingw32-1
cleaning: i386-rtems4.11-gdb-7.9-x86_64-w64-mingw32-1
cleaning: rtems-tools-4.11-1
Build Set: Time 1:32:58.972919
/c/opt/rtems/rsb/rtems
$
Building the RTEMS Kernel
-------------------------
We can now build the RTEMS kernel using the RTEMS tools we have just
built. First we need to set the path to the tools:
.. code-block:: shell
/c/opt/rtems
$ export PATH=/c/opt/rtems/4.11/bin:$PATH
/c/opt/rtems
$
We currently build RTEMS from the git release branch for 4.11:
.. code-block:: shell
/c/opt/rtems
$ mkdir kernel
/c/opt/rtems
$ cd kernel
/c/opt/rtems/kernel
$ git clone git://git.rtems.org/rtems.git rtems
Cloning into 'rtems'...
remote: Counting objects: 482766, done.
remote: Compressing objects: 100% (88781/88781), done.
remote: Total 482766 (delta 389610), reused 475155 (delta 383437)
Receiving objects: 100% (482766/482766), 69.77 MiB | 697.00 KiB/s, done.
Resolving deltas: 100% (389610/389610), done.
Checking connectivity... done.
Checking out files: 100% (10626/10626), done.
/c/opt/rtems/kernel
$ cd rtems
/c/opt/rtems/kernel/rtems
$ git checkout 4.11
Checking out files: 100% (2553/2553), done.
Branch 4.11 set up to track remote branch 4.11 from origin.
Switched to a new branch '4.11'
/c/opt/rtems/kernel
$
The kernel code cloned from git needs to be `bootstrapped`. Bootstrapping
creates ``autoconf`` and ``automake`` generated files. To bootstrap we first
clean away any files, then generate the pre-install header file lists and
finally we generate the ``autoconf`` and ``automake`` files using the RSB's
bootstrap tool.
.. code-block:: shell
/c/opt/rtems/kernel/rtems
$ ./bootstrap -c
removing automake generated Makefile.in files
removing configure files
removing aclocal.m4 files
/c/opt/rtems/kernel/rtems
$ ./bootstrap -p
Generating ./c/src/ada/preinstall.am
Generating ./c/src/lib/libbsp/arm/altera-cyclone-v/preinstall.am
Generating ./c/src/lib/libbsp/arm/atsam/preinstall.am
Generating ./c/src/lib/libbsp/arm/beagle/preinstall.am
Generating ./c/src/lib/libbsp/arm/csb336/preinstall.am
Generating ./c/src/lib/libbsp/arm/csb337/preinstall.am
Generating ./c/src/lib/libbsp/arm/edb7312/preinstall.am
Generating ./c/src/lib/libbsp/arm/gdbarmsim/preinstall.am
.......
Generating ./cpukit/score/cpu/mips/preinstall.am
Generating ./cpukit/score/cpu/moxie/preinstall.am
Generating ./cpukit/score/cpu/nios2/preinstall.am
Generating ./cpukit/score/cpu/no_cpu/preinstall.am
Generating ./cpukit/score/cpu/or1k/preinstall.am
Generating ./cpukit/score/cpu/powerpc/preinstall.am
Generating ./cpukit/score/cpu/sh/preinstall.am
Generating ./cpukit/score/cpu/sparc/preinstall.am
Generating ./cpukit/score/cpu/sparc64/preinstall.am
Generating ./cpukit/score/cpu/v850/preinstall.am
Generating ./cpukit/score/preinstall.am
Generating ./cpukit/telnetd/preinstall.am
Generating ./cpukit/wrapup/preinstall.am
Generating ./cpukit/zlib/preinstall.am
/c/opt/rtems/kernel/rtems
$ /c/opt/rtems/rsb/source-builder/sb-bootstrap
RTEMS Source Builder - RTEMS Bootstrap, 4.11 (76188ee494dd)
1/139: autoreconf: configure.ac
2/139: autoreconf: c/configure.ac
3/139: autoreconf: c/src/configure.ac
4/139: autoreconf: c/src/ada-tests/configure.ac
5/139: autoreconf: c/src/lib/libbsp/arm/configure.ac
6/139: autoreconf: c/src/lib/libbsp/arm/altera-cyclone-v/configure.ac
7/139: autoreconf: c/src/lib/libbsp/arm/atsam/configure.ac
8/139: autoreconf: c/src/lib/libbsp/arm/beagle/configure.ac
9/139: autoreconf: c/src/lib/libbsp/arm/csb336/configure.ac
10/139: autoreconf: c/src/lib/libbsp/arm/csb337/configure.ac
11/139: autoreconf: c/src/lib/libbsp/arm/edb7312/configure.ac
.......
129/139: autoreconf: testsuites/samples/configure.ac
130/139: autoreconf: testsuites/smptests/configure.ac
131/139: autoreconf: testsuites/sptests/configure.ac
132/139: autoreconf: testsuites/tmtests/configure.ac
133/139: autoreconf: testsuites/tools/configure.ac
134/139: autoreconf: testsuites/tools/generic/configure.ac
135/139: autoreconf: tools/build/configure.ac
136/139: autoreconf: tools/cpu/configure.ac
137/139: autoreconf: tools/cpu/generic/configure.ac
138/139: autoreconf: tools/cpu/nios2/configure.ac
139/139: autoreconf: tools/cpu/sh/configure.ac
Bootstrap time: 0:20:38.759766
/c/opt/rtems/kernel/rtems
$
We will build the RTEMS kernel for the ``i386`` target and the ``pc686``
BSP. You can check the available BSPs by running the ``rtems-bsps`` command
found in the to directory of the RTEMS kernel source. We build the Board
Support Package (BSP) outside the kernel source tree:
.. code-block:: shell
/c/opt/rtems/kernel/rtems
$ cd ..
/c/opt/rtems/kernel
$ mkdir pc686
/c/opt/rtems/kernel
$ cd pc686
/c/opt/rtems/kernel/pc686
$
Configure the RTEMS kernel to build ``pc686`` BSP for the ``i386`` target with
netwoeking disabled, We will build the externel libBSD stack later:
.. code-block:: shell
/c/opt/rtems/kernel/pc686
$ /c/opt/rtems/kernel/rtems/configure --prefix=/c/opt/rtems/4.11 \
--target=i386-rtems4.11 --disable-networking --enable-rtemsbsp=pc686
checking for gmake... no
checking for make... make
checking for RTEMS Version... 4.11.99.0
checking build system type... x86_64-pc-mingw64
checking host system type... x86_64-pc-mingw64
checking target system type... i386-pc-rtems4.11
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking that generated files are newer than configure... done
configure: creating ./config.status
configure: configuring in ./tools/build
.......
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
target architecture: i386.
available BSPs: pc686.
'make all' will build the following BSPs: pc686.
other BSPs can be built with 'make RTEMS_BSP="bsp1 bsp2 ..."'
config.status: creating Makefile
/c/opt/rtems/kernel/pc686
$
Build the kernel:
.. code-block:: shell
/c/opt/rtems/kernel/pc686
$ make
Making all in tools/build
make[1]: Entering directory '/c/opt/rtems/kernel/pc686/tools/build'
make all-am
make[2]: Entering directory '/c/opt/rtems/kernel/pc686/tools/build'
gcc -DHAVE_CONFIG_H -I. -I/c/opt/rtems/kernel/rtems/tools/build -g -O2 -MT
cklength.o -MD -MP -MF .deps/cklength.Tpo -c -o cklength.o
/c/opt/rtems/kernel/rtems/tools/build/cklength.c
gcc -DHAVE_CONFIG_H -I. -I/c/opt/rtems/kernel/rtems/tools/build -g -O2 -MT
eolstrip.o -MD -MP -MF .deps/eolstrip.Tpo -c -o eolstrip.o
/c/opt/rtems/kernel/rtems/tools/build/eolstrip.c
..........
i386-rtems4.11-objcopy -O binary nsecs.nxe nsecs.bin
../../../../../pc686/build-tools/bin2boot -v nsecs.ralf 0x00097E00
../../../../../pc686/lib/start16.bin 0x00097C00 0 nsecs.bin 0x00100000 0
header address 0x00097e00, its memory size 0xzx
first image address 0x00097c00, its memory size 0x00000200
second image address 0x00100000, its memory size 0x0003d800
rm -f nsecs.nxe
make[6]: Leaving directory '/c/opt/rtems/kernel/pc686/i386-rtems4.11/c/pc686/testsuites/samples/nsecs'
make[5]: Leaving directory '/c/opt/rtems/kernel/pc686/i386-rtems4.11/c/pc686/testsuites/samples'
make[4]: Leaving directory '/c/opt/rtems/kernel/pc686/i386-rtems4.11/c/pc686/testsuites/samples'
make[4]: Entering directory '/c/opt/rtems/kernel/pc686/i386-rtems4.11/c/pc686/testsuites'
make[4]: Nothing to be done for 'all-am'.
make[4]: Leaving directory '/c/opt/rtems/kernel/pc686/i386-rtems4.11/c/pc686/testsuites'
make[3]: Leaving directory '/c/opt/rtems/kernel/pc686/i386-rtems4.11/c/pc686/testsuites'
make[2]: Leaving directory '/c/opt/rtems/kernel/pc686/i386-rtems4.11/c/pc686'
make[1]: Leaving directory '/c/opt/rtems/kernel/pc686/i386-rtems4.11/c'
make[1]: Entering directory '/c/opt/rtems/kernel/pc686'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/c/opt/rtems/kernel/pc686'
/c/opt/rtems/kernel/pc696
$
Install the kernel to our prefix:
.. code-block:: shell
/c/opt/rtems/kernel/pc686
$ make install
Making install in tools/build
make[1]: Entering directory '/c/opt/rtems/kernel/pc686/tools/build'
make[2]: Entering directory '/c/opt/rtems/kernel/pc686/tools/build'
/usr/bin/mkdir -p '/c/opt/rtems/4.11/bin'
/usr/bin/install -c cklength.exe eolstrip.exe packhex.exe unhex.exe
rtems-bin2c.exe '/c/opt/rtems/4.11/bin'
/usr/bin/mkdir -p '/c/opt/rtems/4.11/bin'
/usr/bin/install -c install-if-change '/c/opt/rtems/4.11/bin'
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/c/opt/rtems/kernel/pc686/tools/build'
make[1]: Leaving directory '/c/opt/rtems/kernel/pc686/tools/build'
Making install in tools/cpu
make[1]: Entering directory '/c/opt/rtems/kernel/pc686/tools/cpu'
Making install in generic
make[2]: Entering directory '/c/opt/rtems/kernel/pc686/tools/cpu/generic'
make[3]: Entering directory '/c/opt/rtems/kernel/pc686/tools/cpu/generic'
make[3]: Nothing to be done for 'install-exec-am'.
make[3]: Nothing to be done for 'install-data-am'.
make[3]: Leaving directory '/c/opt/rtems/kernel/pc686/tools/cpu/generic'
make[2]: Leaving directory '/c/opt/rtems/kernel/pc686/tools/cpu/generic'
make[2]: Entering directory '/c/opt/rtems/kernel/pc686/tools/cpu'
make[3]: Entering directory '/c/opt/rtems/kernel/pc686/tools/cpu'
make[3]: Nothing to be done for 'install-exec-am'.
make[3]: Nothing to be done for 'install-data-am'.
..........
make[2]: Entering directory '/c/opt/rtems/kernel/pc686'
make[2]: Nothing to be done for 'install-exec-am'.
/usr/bin/mkdir -p '/c/opt/rtems/4.11/make'
/usr/bin/install -c -m 644 /c/opt/rtems/kernel/rtems/make/main.cfg
/c/opt/rtems/kernel/rtems/make/leaf.cfg '/c/opt/rtems/4.11/make'
/usr/bin/mkdir -p '/c/opt/rtems/4.11/share/rtems4.11/make/Templates'
/usr/bin/install -c -m 644
/c/opt/rtems/kernel/rtems/make/Templates/Makefile.dir
/c/opt/rtems/kernel/rtems/make/Templates/Makefile.leaf
/c/opt/rtems/kernel/rtems/make/Templates/Makefile.lib
'/c/opt/rtems/4.11/share/rtems4.11/make/Templates'
/usr/bin/mkdir -p '/c/opt/rtems/4.11/make/custom'
/usr/bin/install -c -m 644 /c/opt/rtems/kernel/rtems/make/custom/default.cfg
'/c/opt/rtems/4.11/make/custom'
make[2]: Leaving directory '/c/opt/rtems/kernel/pc686'
make[1]: Leaving directory '/c/opt/rtems/kernel/pc686'
/c/opt/rtems/kernel/pc686
$
Building the RTEMS BSD Library
------------------------------
The RTEMS BSD Library or libBSD as it is also know is a package of FreeBSD code
ported to RTEMS. It provides a number of advantanced services including a
networking stack

View File

@ -1,9 +1,5 @@
:orphan:
Creating A Test
===============
.. index:: Creating a Test
XXX: How to create a test.

View File

@ -1,5 +1,3 @@
:orphan:
Running
========
.. index:: Running a Test
@ -24,4 +22,3 @@ XXX: Simulator
Hardware
--------
XXX: Running on real hardware.

View File

@ -1,5 +1,3 @@
:orphan:
Build Tools
===========
.. index:: Tools, rtems-config, rtems-cc

View File

@ -1,5 +1,3 @@
:orphan:
Simulation
==========
.. index:: Simulation Tools, rtems-run
@ -11,4 +9,3 @@ rtems-run
---------
XXX: rtems-run