RTEMS BSD Porting project.
Switch branches/tags
Clone or download
Latest commit 9f87c45 Nov 13, 2018
Permalink
Failed to load latest commit information.
buildset IPFW(4): Remove FreeBSD import Aug 24, 2018
dhcpcd dhcpcd: Add hooks May 8, 2018
freebsd-org @ 59f44d2 Update to FreeBSD head 2018-10-23 Oct 25, 2018
freebsd Update to FreeBSD head 2018-10-23 Oct 25, 2018
ipsec-tools Update to FreeBSD head 2018-10-23 Oct 25, 2018
linux Update to FreeBSD head 2018-06-01 Sep 21, 2018
mDNSResponder mDNSResponder: Fix for update to v765.1.2 Oct 16, 2018
patches Tool patches: Add newlib patch needed Oct 24, 2012
rtems_waf @ 1b89636 Update rtems_waf Oct 25, 2018
rtemsbsd Include missing <sys/types.h> Nov 13, 2018
testsuite openssl01: Call standard initialization functions Oct 25, 2018
.gitignore Add support to build using waf. May 20, 2015
.gitmodules rtems_waf: Move to the public repositories. Jun 18, 2018
CONTRIBUTING.md CONTRIBUTING.md: Avoid explicit commit numbers Sep 21, 2018
Changes kern/kern_subr.c added for hashinit Mar 8, 2012
Makefile.todo Update to FreeBSD head 2018-10-23 Oct 25, 2018
README.waf waf: Add configurations with different modules. Apr 10, 2018
builder.py Allow *.c as kernel space header files Aug 27, 2018
config.inc config.inc: Remove unused values. Mar 22, 2018
create-kernel-namespace.sh Update to FreeBSD head 2016-08-23 Jan 10, 2017
firmware-gen.py firmware-gen.py: Add script to generate firmware c files. Jan 17, 2017
freebsd-to-rtems.py freebsd-to-rtems.py: Use all modules. Apr 10, 2018
libbsd.py openssl01: New test Oct 25, 2018
libbsd.txt libbsd.txt: Use rtems_bsd_ifconfig_lo0() Sep 21, 2018
userspace-header-gen.py userspace-header-gen.py: Revert interpreter change Aug 31, 2018
waf Add waf 2.0.1 for parity with examples-v2 Oct 26, 2018
waf_libbsd.py waf: Allow to only generate lex and yacc. Aug 1, 2018
wscript waf: Add configurations with different modules. Apr 10, 2018

README.waf

RTEMS LibBSD Waf
~~~~~~~~~~~~~~~~

Welcome to building LibBSD for RTEMS using Waf. This package is a library
containing various parts of the FreeBSD kernel ported to RTEMS. The library
replaces the networking port of FreeBSD in the RTEMS kernel sources. This
package is designed to be updated from the FreeBSD kernel sources and contains
more than just the networking code.

To build this package you need a current RTEMS tool set for your architecture,
and a recent RTEMS kernel for your BSP configured with networking disabled
built and installed. If you already have this you can skip to step 3 of the
build procedure.

Waf Setup
~~~~~~~~~

You can find the Waf project at:

 https://waf.io/

Waf is not intended to be installed by distribution packages so we recommend
you download a recent waf version and install it in your home directory.

Waf is a Python program so you will also need to have a current Python version
installed and in your path.

Download the latest signed executable file version to $HOME/bin and symlink it
to waf. Add the directory $HOME/bin to your path if it is not already in your
default path.

Building and Installing LibBSD
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The following instructions show you how to build and install RTEMS Tools and
RTEMS kernel for your BSP in separate paths. Using separate paths for the tools
and BSPs lets you manage what you have installed. If you are happy with a
single path you can use the same path in each stage.

The waf build support for RTEMS requires you provide your BSP name as an
architecture and BSP pair. You must provide both or waf will generate an error
message during the configure phase.

We will build an Xilinx Zynq QEMU BSP using the name
'arm/xilinx_zynq_a9_qemu'.

Steps
-----

-------------------------------------------------------------------------------
sandbox="$PWD/sandbox"
mkdir sandbox
cd "$sandbox"
git clone git://git.rtems.org/rtems-source-builder.git
git clone git://git.rtems.org/rtems.git
git clone git://git.rtems.org/rtems-libbsd.git
cd "$sandbox"
cd rtems-source-builder/rtems
../source-builder/sb-set-builder --prefix="$sandbox/rtems-4.12" 4.12/rtems-arm
cd "$sandbox"
cd rtems
PATH="$sandbox/rtems-4.12/bin:$PATH" ./bootstrap
cd "$sandbox"
mkdir b-xilinx_zynq_a9_qemu
cd b-xilinx_zynq_a9_qemu
PATH="$sandbox/rtems-4.12/bin:$PATH" "$sandbox/rtems/configure" \
  --target=arm-rtems4.12 --prefix="$sandbox/rtems-4.12" \
  --disable-networking --enable-rtemsbsp=xilinx_zynq_a9_qemu
PATH="$sandbox/rtems-4.12/bin:$PATH" make
PATH="$sandbox/rtems-4.12/bin:$PATH" make install
cd "$sandbox"
cd rtems-libbsd
git submodule init
git submodule update rtems_waf
waf configure --prefix="$sandbox/rtems-4.12" \
  --rtems-bsps=arm/xilinx_zynq_a9_qemu \
  --buildset=buildset/default.ini
waf
waf install
qemu-system-arm -no-reboot -serial null -serial mon:stdio -net none \
  -nographic -M xilinx-zynq-a9 -m 256M \
  -kernel build/arm-rtems4.12-xilinx_zynq_a9_qemu/selectpollkqueue01.exe
-------------------------------------------------------------------------------

1. Create a sandbox directory:

    $ sandbox="$PWD/sandbox"
    $ mkdir sandbox

1. Clone the repositories:

    $ cd "$sandbox"
    $ git clone git://git.rtems.org/rtems-source-builder.git
    $ git clone git://git.rtems.org/rtems.git
    $ git clone git://git.rtems.org/rtems-libbsd.git

2. Build and install the tools. In this example the path is
   $sandbox/rtems-4.12:

    $ cd "$sandbox"
    $ cd rtems-source-builder/rtems
    $ ../source-builder/sb-set-builder --prefix="$sandbox/rtems-4.12" 4.12/rtems-arm

3. Bootstrap the RTEMS sources:

    $ cd "$sandbox"
    $ cd rtems
    $ PATH="$sandbox/rtems-4.12/bin:$PATH" ./bootstrap

5. Build and install the RTEMS Board Support Packages (BSP) you want to use. In
   this example the path is /opt/rtems/4.12/bsps:

    $ cd "$sandbox"
    $ mkdir b-xilinx_zynq_a9_qemu
    $ cd b-xilinx_zynq_a9_qemu
    $ PATH="$sandbox/rtems-4.12/bin:$PATH" "$sandbox/rtems/configure" \
        --target=arm-rtems4.12 --prefix="$sandbox/rtems-4.12" \
        --disable-networking --enable-rtemsbsp=xilinx_zynq_a9_qemu
    $ PATH="$sandbox/rtems-4.12/bin:$PATH" make
    $ PATH="$sandbox/rtems-4.12/bin:$PATH" make install

6. Populate the rtems_waf git submodule.  Note, make sure you specify
   'rtems_waf' or the FreeBSD kernel source will be cloned:

   $ cd "$sandbox"
   $ cd rtems-libbsd
   $ git submodule init
   $ git submodule update rtems_waf

7. Run Waf's configure with your specific settings. In this case the path to
   the tools and RTEMS are provided on the command line and so do not need to
   be in your path or environment [1].  You can use
   '--rtems-archs=arm,sparc,i386' or
   '--rtems-bsps=arm/xilinx_zynq_a9_qemu,sparc/sis,i386/pc586' to build for
   more than BSP at a time.  Note, you must provide the architecture and BSP as
   a pair. Providing just the BSP name will fail. This call also explicitly
   provides a buildset via the '--buildset=buildset/default.ini' option. If no
   buildset is provided the default one (which is the same as the one provided
   explicitly here) will be used. You can also provide multiple buildsets as a
   coma separated list or via multiple '--buildset=x' options.

   $ cd "$sandbox"
   $ cd rtems-libbsd
   $ waf configure --prefix="$sandbox/rtems-4.12" \
       --rtems-bsps=arm/xilinx_zynq_a9_qemu \
       --buildset=buildset/default.ini

8. Build and install.  The LibBSD package will be installed into the prefix
   provided to configure:

   $ cd "$sandbox"
   $ cd rtems-libbsd
   $ waf
   $ waf install

9. Run the tests on QEMU, for example:

   $ qemu-system-arm -no-reboot -serial null -serial mon:stdio -net none \
   $   -nographic -M xilinx-zynq-a9 -m 256M \
   $   -kernel build/arm-rtems4.12-xilinx_zynq_a9_qemu/selectpollkqueue01.exe

[1] It is good practice to keep your environment as empty as possible. Setting
    paths to tools or specific values to configure or control a build is
    dangerous because settings can leak between different builds and change
    what you expect a build to do. The waf tool used here lets you specify on
    the command line the tools and RTEMS paths and this is embedded in waf's
    configuration information. If you have a few source trees working at any
    one time with different tool sets or configurations you can easly move
    between them safe in the knowledge that one build will not infect another.

Updating RTEMS Waf Support
~~~~~~~~~~~~~~~~~~~~~~~~~~

If you have a working libbsd repository and new changes to the `rtems_waf`
submodule has been made, you will need update. A `git status` will indicate
there are new commits with:

  $ git status
      [ snip output ]
            modified:   rtems_waf (new commits)
      [ snip output ]

To update:

  $ git submodule update rtems_waf

Please make sure you use the exact command or you might find you are cloning
the whole of the FreeBSD source tree. If that happens simply git ^C and try
again.

The following is for developers only who need to move libbsd to a newer
versions:

 $ git submodule update rtems_waf
 $ cd rtems_waf
 $ git checkout master
 $ git pull
 $ cd ..
 $ git commit -m "Update rtems_waf" rtems_waf

FreeBSD Developer Support
~~~~~~~~~~~~~~~~~~~~~~~~~

The --freebsd-option provides a tool you can set special kernel options. This
is a developer tool and should only be used if you are familiar with the
internals of the FreeBSD kernel and what these options do.

The options are listed in:

 https://github.com/freebsd/freebsd/blob/master/sys/conf/NOTES

An example to turn on a verbose kernel boot, verbose sysinit and bus debugging
configure with:

 --freebsd-options=bootverbose,verbose_sysinit,bus_debug

The LibBSD waf support splits the options and converts them to uppercase and
adds them -D options on the compiler command line.