--- wikisrc/ports/evbarm.mdwn 2015/10/08 06:42:53 1.25 +++ wikisrc/ports/evbarm.mdwn 2018/11/23 11:58:27 1.62 @@ -1,10 +1,16 @@ [[!template id=port port="evbarm" port_alt="arm" -cur_rel="7.0" -future_rel="7.0" -changes_cur="6.0" -changes_future="7.0" +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 @@ -13,14 +19,113 @@ supports some specific embedded system p 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" sufix. + +[[!table data=\"\"\" +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 +\"\"\"]] + +\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") +### 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 @@ -40,7 +145,7 @@ limited to 64M due to the layout of the systems should obtain an FPGA upgrade from ADI to revision 8 or later of the BECC. -### Allwinner Technology A20/A31 +### Allwinner Technology Various boards based on [[Allwinner]] SoCs are supported, including the BananaPi, Cubieboard 2, Cubietruck, Cubieboard 4, and Merrii Hummingbird A31. ### Arcom **Viper** @@ -52,7 +157,7 @@ Support for the Arcom Viper was written * On-chip timers (_saost_ used as system clock) * On-chip serial ports (_com_) - * On-board SMC91C111 ethernet (_sm_) + * On-board SMC91C111 ethernet (_sm_) ### ARM, Ltd. **Integrator** @@ -102,7 +207,7 @@ Support for the gumstix was written by K * netCF * netDUO * netDUO-mmc - * netMMC + * netMMC When booting, it is necessary to set these with u-boot dynamically. @@ -114,11 +219,11 @@ When booting, it is necessary to set the * GPSstix (GPS not test) * tweener -### Hardkernel ODROID-C1 +### 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") +### 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). @@ -192,7 +297,7 @@ Support for the IXM1200 was written by I * On-chip timers (ixpclk0 used as system clock) * On-chip serial port (_ixpcom_) -### NOVATEC **NTNP425B** ("ZAO425") +### 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 @@ -210,13 +315,11 @@ Support for the NTNP425B was written by * On-chip watchdog timer (_ixpwdog_) ### NVIDIA Tegra K1 -Support for NVIDIA [[Tegra]] K1 SoCs is present in NetBSD-current. The Jetson TK1 board is currently supported. - -### Raspberry Pi Foundation **Raspberry Pi**/**Raspberry Pi 2** -The [[Raspberry Pi]] is a low-cost credit-card-sized computer from the Raspberry Pi Foundation. Both the Raspberry Pi and Raspberry Pi 2 are supported. +Support for NVIDIA [[Tegra]] K1 SoCs is present in NetBSD-current and +8.0_BETA. The Jetson TK1 board is currently supported. -### Rockchip PX2/RK3066/RK3188/RK3188+ -Various [[Rockchip]] family SoCs are supported by the ROCKCHIP kernel. +### 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** @@ -250,7 +353,7 @@ 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 + * Other devices inserted into the PCI slots ### Team ASA, Inc. **Npwr** @@ -297,7 +400,7 @@ Support for the TS-7200 was written by J """ 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. + * [ Porting NetBSD/evbarm to the Arcom Viper](http://www.cs.hut.fi/~pooka/pubs/EuroBSDCon2005/viper.pdf), presented at EuroBSDCon 2005. """ ]] [[!tag tier1port]]