File:  [NetBSD Developer Wiki] / wikisrc / ports / evbarm.mdwn
Revision 1.65: download - view: text, annotated - select for diffs
Sat Nov 24 16:22:20 2018 UTC (4 years, 10 months ago) by wiki
Branches: MAIN
CVS tags: HEAD
web commit by schmonz: We're already inside something triple-quoted (the template). Use a heredoc for the table data.

[[!template id=port
port="evbarm"
port_alt="arm"
port_var1="earm"
port_var2="earmeb"
port_var3="earmv6hf"
port_var4="earmv7hf"
port_var5="earmv7hfeb"
port_var_install_notes="evbarm-earm"
cur_rel="8.0"
future_rel="9.0"
changes_cur="8.0"
changes_future="9.0"
thumbnail="http://www.netbsd.org/images/ports/evbarm/adi_brh.gif"
about="""
NetBSD/evbarm is the port of NetBSD to various evaluation and prototyping
boards based on CPUs implementing the ARM architecture. NetBSD/evbarm also
supports some specific embedded system products based on prototype board
designs.

Matt Thomas is the maintainer of NetBSD/evbarm.

### CPU types

The evbarm port can be built with a variety of CPU options, corresponding to the
[large array of ARM CPU architectures](https://en.wikipedia.org/wiki/ARM_architecture#Cores).
There are
four main variables: the word size, the instruction set, the
endianness, and whether there is hardware floating point.  By default
the CPU type is "earm", and this implies aarch32 (32-bit), \todo cpu
architecture, little endian (el when explicitly stated), and soft
(Emulated) floating point.  Another example, suitable for Raspberry PI
2, is earmv7hf, which is aarch32, the v7 instruction set, little
endian, and hardware floating point.

Typically, various boards are best compiled with a CPU type that
matches the board's CPU and floating point support, but generally a
lower CPU instruction set version is workable on a newer board.  See
build.sh and look for aliases for the evbarm port.

Through NetBSD 8, the evbarm port has supported exclusively the
aarch32 (32-bit CPU) sub-family of the ARM architecture.  Some
processors, such as many supporting the armv8 CPU architecture, also
support a 64-bit instruction set, referred to as aarch64.  This is
sometimes referred to as a distinct port, [[NetBSD/aarch64|aarch64]],
with code in src/sys/arch/aarch64, but it is built as the evbarm port
with aarch64 cpu type, and available as the alias evbarm64.

Note that MACHINE_ARCH=aarch64 currently refers to the A64 instruction
set and the aarch64 architecture, built for the armv8 architecture.
(Note also that armv8 is the first architecture to support aarch64, so
this will not be an issue until at least armv9.)

#### ABI types

There are two basic ABIs on ARM.  One, called oabi, assumed a
particular kind of hardware floating point (FPA).  This results in
faulting any floating-point instructions for kernel emulation on a
vast number of CPus, which is very slow.  A newer one, called eabi,
has two variants.  Both have stricter alignment rules, tending to 8
byte rather than 4 bytes for 8-byte types (but actually read the specs
if you care).  The one without "hf" emulates floating point without
causing traps/emulation, and "hf" uses VFP instructions, which are
present on modern CPUs. See the
[TS-7200](https://wiki.embeddedarm.com/wiki/EABI_vs_OABI) and
[Debian](https://wiki.debian.org/ArmEabiPort) documentation.

Now, EABI is normal, and OABI is crufty.  The only real reason NetBSD
retains OABI support is binary compatibility with older releases.  The
"arm" and "armeb" MACHINE_ARCH targets are OABI; the rest of the
targets, all having "earm" are EABI.

\todo CHECK THIS: The "aarch64" MACHINE_ARCH target is an EABI variant.

### Relationship of MACHINE_ARCH to official ARM terminology

Note that these are all little endian, and have big endian variants
with a "eb" suffix.   

[[!table data=<<EOT
MACHINE_ARCH |bits | ARM architecture version            |ABI
arm          |32   |?                                    |oabi
earm         |32   |armv4 (effectively an alias)         |eabi
earmv4       |32   |armv4 (no thumb, so ok on strongarm) |eabi
earmv5       |32   |armv5t                               |eabi
earmv6       |32   |armv6                                |eabi
earmv7       |32   |armv7                                |eabi
aarch64      |64   |armv8                                |\todo ? eabi
EOT]]

\todo Explain why, if we have armv4, and this is confusing, we still have earm as a MACHINE_ARCH.

\todo Explain why aarch64 is a MACHINE_ARCH, when it seems like it
should be something like armv8hf_64.

\todo Explain if MACHINE_ARCH values correspond to a particular
argument to some CPU selection command in gcc (and/or clang).

### Kernels and userland

The evbarm userland can be used on any system that can run code of the
CPU type used for the build.  Typically, a particular board requires a
kernel for that board.

### anita and qemu

anita can be used to test builds.  (In addition to anita, install qemu and dtb-arm-vexpress from pkgsrc.)   The release subdirectory should follow the naming convention on the autobuild cluster, used below.

 - evbarm-earmv7hf uses "qemu-system-arm -M vexpress-a15"
 - evbarm-aarch64 uses "qemu-system-aarch64 -M virt"
 - Information on how to test emulated versions of other specific hardware is welcome.

### Board specific information
 - [[Allwinner sunxi family SoCs|Allwinner]]
 - [[BeagleBone and BeagleBone Black|BeagleBone]]
 - [[NVIDIA Tegra|Tegra]]
 - [[ODROID C1 and C1+|ODROID-C1]]
 - [[Raspberry Pi 1, 2 and 3|Raspberry Pi]]

"""

supported_hardware="""

**NOTE**: This list is incomplete. For a full list of configurations, please see the [evbarm kernel configs](http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/evbarm/conf/) directory in CVS.

[[!toc startlevel=3]]

### ADI Engineering **BRH** ("Big Red Head")

The BRH is an evaluation and development platform for the Intel **i80200**
XScale processor. The BRH is based on ADI's **BECC** ("Big Endian Companion
Chip"). The BRH is capable of both big- and little-endian operation, although
NetBSD currently only supports little-endian operation.

Support for the BRH was written by Jason Thorpe, and contributed by Wasabi
Systems, Inc.

 * On-board NS16550-compatible serial ports (_com_)
 * On-board Intel i82559 Ethernet on the PCI bus (_fxp_)
 * On-chip timer on the BECC (used as system clock)
 * Other devices inserted into the PCI slot

The BRH comes with 128M of SDRAM. Systems with BECC revision 7 or less are
limited to 64M due to the layout of the PCI DMA windows. Users of these
systems should obtain an FPGA upgrade from ADI to revision 8 or later of the
BECC.

### Allwinner Technology
Various boards based on [[Allwinner]] SoCs are supported, including the BananaPi, Cubieboard 2, Cubietruck, Cubieboard 4, and Merrii Hummingbird A31.

### Arcom **Viper**

The Arcom Viper is a single board computer based on the PXA255 XScale
processor.

Support for the Arcom Viper was written by Antti Kantee.

 * On-chip timers (_saost_ used as system clock)
 * On-chip serial ports (_com_)
 * On-board SMC91C111 ethernet (_sm_)

### ARM, Ltd. **Integrator**

The Integrator/AP is an ATX form-factor board that is used for development of
ARM processor-based designs. It supports up to four processors on plug-in core
modules, and provides clocks, a bus interface, and interrupt support. The
Integrator/AP also supports logic modules which provide additional
peripherals, and can accommodate up to three PCI expansion cards. The
Integrator/AP can also be inserted into a CompactPCI backplane.

Support for the Integrator was written by Richard Earnshaw, and contributed by
ARM, Ltd.

 * PrimeCell PL010 UARTs in the System Controller FPGA (_plcom_)
 * PrimeCell PL030 Real-time Clock in the System Controller FPGA (_plrtc_)
 * PrimeCell PL181 MultiMedia Card Interface
 * Other devices inserted into the PCI expansion slots

### Atmark Techno **Armadillo-9**

The Armadillo-9 is a single board computer based on the EP9315 processor.

Support for the Armadillo-9 was written by Katsuomi Hamajima.

 * On-CPU RS232 UARTs (2) (_epcom_)
 * On-CPU 10/100 Ethernet MAC (_epe_)
 * system clock from on-CPU timers (_epclk_)
 * CompactFlash socket (_eppcic_)
 * USB 1.1 ports (_ohci_)

### BeagleBoard.org **BeagleBoard** and **BeagleBoard-xM**
The [[BeagleBoard]] is a low-power open-source hardware single-board computer from BeagleBoard.org.

### BeagleBoard.org **BeagleBone** and **BeagleBone Black**
The [[BeagleBone]] is a low-cost credit-card-sized computer from BeagleBoard.org.

### Gumstix, Inc. **gumstix**

The [gumstix](http://www.gumstix.com/) is a small form-factor motherboard
based on the PXA255 and PXA270 XScale processor. Supports only PXA255 now.

Support for the gumstix was written by KIYOHARA Takashi.

 * basix
 * cfstix
 * etherstix
 * netCF
 * netDUO
 * netDUO-mmc
 * netMMC

When booting, it is necessary to set these with u-boot dynamically.

<pre> > go 0xa0200000 busheader=basix</pre>

 * audiostix
 * console-st (waysmall - STUART)
 * console-hw (waysmall)
 * GPSstix (GPS not test)
 * tweener

### Hardkernel ODROID-C1 and ODROID-C1+

The [[ODROID-C1]] is a quad core Cortex-A5 small form-factor board from Hardkernel co., Ltd.

### Intel **DBPXA250** ("Lubbock")

DBPXA250 (a.k.a. Lubbock) is an evaluation and development platform for the
Intel **PXA250** XScale Core application processor. More information about the **DBPXA250** can be found at [Intel website](http://www.intel.com/design/pca/applicationsprocessors/swsup/index.htm).

Support for the **DBPXA250** was written by Hiroyuki Bessho, and contributed
by Genetec Corp.

 * On-chip timers (_saost_ used as system clock)
 * On-chip 2 serial port (_com_)
 * On-board SMC91C96 ethernet (_sm_)
 * On-board SA-1111 StrongArm companion chip (_sacc_)
 * PS/2 keyboard (_pckbd_)
 * 640x480 LCD (_lcd_)
 * PCMCIA and CF card slots

### Intel **IQ31244**

The IQ31244 is a development platform for the Intel **IOP321** I/O Processor
chipset and the Intel **i31244** SATA controller.

Initial support for the IQ31244 was written by Jason Thorpe, and contributed
by Wasabi Systems, Inc.

 * Quad on-board Intel i31244 SATA controllers on the PCI-X bus (_artsata_)
 * On-board Intel i82546EB Gigabit Ethernet on the PCI-X bus (_wm_)
 * On-board NS16550-compatible serial port (_com_)
 * On-chip timers (TMR0 used as system clock)
 * On-chip Application Accelerator Unit (_iopaau_)
 * On-chip watchdog timer (_iopwdog_)
 * On-board compact flash reader (_wdc_)
 * Other devices inserted into the PCI-X expansion slot

### Intel **IQ80310**

The IQ80310 is the reference platform for the Intel **IOP310** I/O Processor
chipset, which is comprised of the i80200 XScale processor and the i80312 I/O
Companion chip.

Support for the IQ80310 was written by Jason Thorpe and Allen Briggs, and
contributed by Wasabi Systems, Inc.

 * On-board Intel i82559 Ethernet on the PCI bus (_fxp_)
 * On-board timer in the CPLD (used as system clock)
 * On-board NS16550-compatible serial ports (_com_)
 * Other devices inserted into the PCI expansion slots

### Intel **IQ80321**

The IQ80321 is the reference platform for the Intel **IOP321** I/O Processor
(i80321 XScale processor).

Support for the IQ80321 was written by Jason Thorpe, and contributed by Wasabi
Systems, Inc.

 * On-board Intel i82544EI Gigabit Ethernet on the PCI-X bus (_wm_)
 * On-board NS16550-compatible serial port (_com_)
 * On-chip timers (TMR0 used as system clock)
 * On-chip Application Accelerator Unit (_iopaau_)
 * On-chip watchdog timer (_iopwdog_)
 * Other devices inserted into the PCI-X expansion slots

### Intel **IXM1200**

The IXM1200 is the reference platform for the Intel **IXP1200** Network
Processor.

Support for the IXM1200 was written by Ichiro FUKUHARA and Naoto Shimazaki.

 * On-board Intel i82559 Ethernet on the PCI bus (_fxp_)
 * On-board Intel i21555 Non-Transparent PCI-PCI Bridge (_nppb_)
 * On-chip timers (ixpclk0 used as system clock)
 * On-chip serial port (_ixpcom_)

### NOVATEC **NTNP425B** ("ZAO425")

NTNP425B is an evaluation and development platform for the Intel **IXP425**
XScale Core NetworkProcessor. NTNP425B is based on the reference board of
Intel **IXDP425**. The **NTNP425B** is capable of only big-endian operation.
Since the library for micro-engine(NPE) offered from Intel Corp. is big-
endian. More information about the **NTNP425B** can be found on [product
catalogue of **NTNP425B**(2.5MB,PDF
file)](http://www.novatec.co.jp/NTNP425BBrochureE.pdf).

Support for the NTNP425B was written by Ichiro FUKUHARA.

 * On-chip timers (_ixpclk0_ used as system clock)
 * On-chip 2 serial port (_ixpcom0_ and _ixpcom1_)
 * Other devices inserted into the PCI/mPCI slot
 * On-chip watchdog timer (_ixpwdog_)

### NVIDIA Tegra K1
Support for NVIDIA [[Tegra]] K1 SoCs is present in NetBSD-current and
8.0_BETA. The Jetson TK1 board is currently supported.

### Raspberry Pi Foundation **Raspberry Pi**/**Raspberry Pi 2**/**Raspberry Pi 3**
The [[Raspberry Pi]] is a low-cost credit-card-sized computer from the Raspberry Pi Foundation.  The Raspberry Pi, Pi 2, and Pi 3 are supported.

### Samsung **SMDK2410**

The SMDK2410 is the reference platform for the Samsung **S3C2410** processor,
which has an ARM920T core.

More information on the S3C2410 can be found at [Samsung Electronics web page]
(http://www.samsung.com/Products/Semiconductor/MobileSoC/ApplicationProcessor/
ARM9Series/S3C2410/S3C2410.htm).

Support for the SMDK2410 was written by Hiroyuki Bessho, and contributed by
Genetec Corp.

 * On-chip serial ports (_sscom_)
 * On-chip USB host controller (_ohc_)
 * On-chip timers (used as system clock)
 * On-chip SPI (_ssspi_, used for other on-board devices)
 * 240x320 TFT LCD (_lcd_)
 * keyboard. (_sskbd_)

### Samsung **SMDK2800**

The SMDK2800 is the reference platform for the **Samsung S3C2800** processor,
which has an ARM920T core.

S3C2800 has built-in PCI controller, and SMDK2800 has three PCI slots.

Support for the SMDK2800 was written by Hiroyuki Bessho, and contributed by
Fujitsu Component Ltd., and Genetec Corp.

 * On-chip serial ports (_sscom_)
 * On-chip Host-PCI bridge (_sspci_)
 * On-chip timers (used as system clock)
 * Other devices inserted into the PCI slots

### Team ASA, Inc. **Npwr**

The Npwr is an IOP310-based design targeted at the network-attached storage
space. The Npwr comes in several configurations (single or dual Gigabit
Ethernet, single or dual Ultra160 SCSI), and can be purchased as a bare board
or as a small server appliance. More information on the Npwr can be found at
the [Team ASA web page](http://www.teamasa.com/).

Support for the Npwr was written by Jason Thorpe and Allen Briggs, and
contributed by Wasabi Systems, Inc.

 * On-board Intel i82544 Gigabit Ethernet on the PCI bus (_wm_)
 * On-board LSI Logic 53c1010 Ultra160 SCSI on the PCI bus (_siop_)
 * On-board timer in the CPLD (used as system clock)
 * On-board NS16550-compatible serial port (_com_)

### Technologic Systems **TS-7200**

The TS-7200 is a low-cost mass-produced PC/104 embedded single board computer
intended as a general purpose core for real embedded applications. The TS-7200
uses the Cirrus Logic EP9302 ARM9 system-on-chip and comes with a PC/104 (isa)
bus and can either boot to CompactFlash or onboard flash. The board also has
general purpose digital IO and optional multichannel analog-to-digital
converters. More information on the TS-7200 can be found at [Technologic
Systems](http://www.embeddedarm.com/epc/ts7200-spec-h.html).

Support for the TS-7200 was written by Jesse Off

* On-CPU RS232 UARTs (2) (_epcom_)
* On-CPU 10/100 Ethernet MAC (_epe_)
* CompactFlash socket (_wdc_)
* USB 1.1 ports (2) (_ohci_)
* Watchdog timer on CPLD (_tspld_)
* TMP124 high precision temperature sensor via sysctl
* 64Hz system clock from on-CPU timers (_epclk_)
* HD44780 2x24 text mode LCD (_tslcd_)
* 4x4 16 button matrix keypad (_wskbd_)
* TS-5620 battery backed RTC daughter-card (_tsrtc_)
* 1,2,4 port serial TS-SER daughter cards (_com_)
* Up to 4 10Mb TS-ETH10 daughter cards (_tscs_)
* Other devices inserted into the PC/104 (_isa_) expansion slot

"""
additional="""
  * The [NetBSD Diskless HOWTO](http://www.netbsd.org/docs/network/netboot/)
  * [ Porting NetBSD/evbarm to the Arcom Viper](http://www.cs.hut.fi/~pooka/pubs/EuroBSDCon2005/viper.pdf), presented at EuroBSDCon 2005.
"""
]]
[[!tag tier1port]]

CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb