--- wikisrc/ports/evbarm.mdwn 2016/03/22 21:08:32 1.31 +++ wikisrc/ports/evbarm.mdwn 2018/12/23 02:46:57 1.69 @@ -1,18 +1,16 @@ [[!template id=port port="evbarm" port_alt="arm" -port_var1="arm" -port_var2="armeb" -port_var3="earm" -port_var4="earmeb" -port_var5="earmv6hf" -port_var6="earmv7hf" -port_var7="earmv7hfeb" -port_var_install_notes="evbarm-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 @@ -22,12 +20,103 @@ 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), earmv5 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. Unless otherwise noted, all use the A32 or +aarch32 instruction set. + +[[!table data=<