nuttx/configs/or1k/README.txt
Matt Thompson d212e15a43 This commit adds basic architectural support for the OpenRISK mor1kx architecture. The initial commit was verified on a Qemu simulation but is otherwise untested.
Squashed commit of the following:

Author: Gregory Nutt <gnutt@nuttx.org>
    Update README.
    configs/or1k:  Should include header file file where exported functin is prototyped.
    arch/or1k/src:  Eliminate some warnings.
    arch/or1k:  Complete review
    Fix some recently introduced build issues
    configs/or1k/nsh:  Convert to proper, compressed defconfig file.
    Another README update.
    Update README
    configs/or1k:  Updates from initial review.
    Update README.

Author: Matt Thompson <matt@extent3d.com>

    or1k: Added configurable CPU frequency to Kconfig. Calculate tick timer match period based on configured frequency.
    OpenRISC: Enable instruction and data cache
    OpenRISC: Initial support.
2018-04-26 11:22:28 -06:00

207 lines
6.6 KiB
Plaintext

README
======
Generic OpenRISC board, suitable for use with Qemu, for example.
Contents
========
o STATUS
o Pre-built or1k-elf Toolchain (newlib)
o OpenRISC GNU tool chain from source
o OpenOCD
o Qemu
STATUS
======
2018-04-23: I have been trying to retrace all of Matt Thompson's steps to
get or1k building running on Qemu. I am stuck at the moment because it
looks like there is some problem with my Kubuntu package manager. The
Qemu configuration gives:
ERROR: glib-2.22 gthread-2.0 is requred to compile QEMU.
But it looks like to do have a later version of gthread-2.0 installed.
Pre-built or1k-elf Toolchain (newlib)
=====================================
Ref: https://openrisc.io/newlib/
Download and Install the Toolchain
You can install pre-compiled toolchains and install them on your Linux system.
We have prebuilt-toolchains for releases of the different components that are
preferably installed to /opt/toolchains/or1k-elf. You can find all releases
here. Those are current releases:
GCC 4.9.2, Binutils 2.26, Newlib 2.3.0 (+or1k backports), GDB 7.11
https://github.com/openrisc/newlib/releases/download/v2.3.0-1/or1k-elf_gcc4.9.3_binutils2.26_newlib2.3.0-1_gdb7.11.tgz
GCC 5.2.0, Binutils 2.26, Newlib 2.3.0 (+or1k backports), GDB 7.11
https://github.com/openrisc/newlib/releases/download/v2.3.0-1/or1k-elf_gcc5.2.0_binutils2.26_newlib2.3.0-1_gdb7.11.tgz
After downloading a release you can extract it anywhere in your filesystem, we
recommend to /opt/toolchains/or1k-elf/. You need to add the toolchain to your
path:
export PATH=/opt/toolchains/or1k-elf/bin:${PATH}
OpenRISC GNU tool chain from source
===================================
ref: https://github.com/juliusbaxter/mor1kx-dev-env/wiki/OpenRISC-tool-chain-installation-guide
These instructions are as per the project's GNU tool chain page on [OpenCores]
(http://opencores.org/or1k).
What is required first is a copy of the tool chain source. There are two
repositories - one for GCC (called or1k-gcc) and one for the rest of the GNU
tools and libraries (binutils, GDB, newlib, called or1k-src). We must get the
entirety of both.
You will need to download the repositories as a zip file OR use git.
Download zip files (save into $HOME/or1k):
or1k-src - https://github.com/openrisc/or1k-src/archive/or1k.zip
or1k-gcc - https://github.com/openrisc/or1k-gcc/archive/or1k.zip
and unzip into the $HOME/or1k directory, making 2 directories or1k-src-or1k/
and or1k-gcc-or1k/
Rename those directories to be without the trailing -or1k so
mv or1k-src-or1k or1k-src
mv or1k-gcc-or1k or1k-gcc
or with git clone:
mkdir $HOME/or1k && cd $HOME/or1k
git clone git://github.com/openrisc/or1k-src.git
git clone git://github.com/openrisc/or1k-gcc.git
Once the source trees are in place, we will build.
We will install the tool chain into /opt/or1k-toolchain. Make sure that
directory is writeable eg.:
sudo mkdir /opt/or1k-toolchain
sudo chown $USER /opt/or1k-toolchain
The following commands will build the tool chain (starting in the $HOME/or1k
directory):
# Build the first set of tools, binutils etc.
# NOTE: on 32-bit machines --disable-werror is needed due to an enum acting as bit mask is considered signed
mkdir bld-or1k-src bld-or1k-gcc
cd bld-or1k-src
../or1k-src/configure --target=or1k-elf --prefix=/opt/or1k-toolchain --enable-shared --disable-itcl --disable-tk --disable-tcl --disable-winsup --disable-libgui --disable-rda --disable-sid --disable-sim --disable-gdb --with-sysroot --disable-newlib --disable-libgloss --disable-werror
make
make install
# Build gcc
cd ../bld-or1k-gcc
../or1k-gcc/configure --target=or1k-elf --prefix=/opt/or1k-toolchain --enable-languages=c --disable-shared --disable-libssp
make
make install
# build newlib and gdb (without or1ksim in this case)
cd ../bld-or1k-src
../or1k-src/configure --target=or1k-elf --prefix=/opt/or1k-toolchain --enable-shared --disable-itcl --disable-tk --disable-tcl --disable-winsup --disable-libgui --disable-rda --disable-sid --enable-sim --disable-or1ksim --enable-gdb --with-sysroot --enable-newlib --enable-libgloss --disable-werror
make
make install
# build gcc again, this time with newlib
cd ../bld-or1k-gcc
../or1k-gcc/configure --target=or1k-elf --prefix=/opt/or1k-toolchain --enable-languages=c,c++ --disable-shared --disable-libssp --with-newlib
make
make install
Finally, we will want to run the following to put this path in our .bashrc file:
echo "# OpenRISC tool chain path" >> ~/.bashrc
echo "export PATH=$PATH:/opt/or1k-toolchain/bin"
OpenOCD
=======
ref: https://github.com/juliusbaxter/mor1kx-dev-env/wiki/OpenRISC-tool-chain-installation-guide
OpenOCD is the debug proxy we'll use to talk to the board over JTAG.
Download the source to $HOME/or1k with
git clone https://github.com/openrisc/openOCD.git
Go into the OpenOCD directory and, the very first time, you must bootstrap it:
./bootstrap
Once that is finished, configure and compile it:
./configure --enable-usb_blaster_libftdi --enable-adv_debug_sys --enable-altera_vjtag --enable-maintainer-mode
make
You can run make install if you like, too.
Qemu
====
The compiled ELF that works in or1ksim (https://github.com/openrisc/or1ksim).
Ref: https://github.com/openrisc/or1ksim
Or1ksim is a generic OpenRISC 1000 architecture simulator capable of emulating
OpenRISC based computer systems at the instruction level. It includes models of
a range of peripherals, allowing complete systems to be modeled. For full
details see http://opencores.org/or1k/Or1ksim
This is a variant of the standard Or1ksim, which uses or1k as the architecture
name, rather than or32. At some stage in the future this will be merged in, so
that either architecture name is supported.
Or1k Build
----------
Or1ksim uses a standard GNU autoconf/automake installation and is designed to
be built in a separate build directory. So from the main directory, a minimal
install can be done with
cd or1ksim
mkdir bd
cd bd
../configure
make
sudo make install
This will install the executables 'sim', 'profile', and 'mprofile' at
/user/local/bin and libraries at /usr/local/lib.
The UART must be enabled in sim.cfg BEFORE the build in order for the NSH
configuration to work:
section uart
- enabled = 0
+ enabled = 1
Qemu Build
----------
Download:
https://www.qemu.org/download/#source
Configure and build
Ref: https://wiki.qemu.org/Documentation/Platforms/OpenRISC
./configure --target-list=or1k-softmmu
make
Then this command will get it running:
qemu-system-or1k -kernel nuttx-or1k-sim.elf -serial stdio -nographic -monitor none