In Ubuntu 12.04 and Debian, in addition to arm and armel, there is also a version called armhf. What is this?
As we all know, armel is the main ARM ABI at present. armhf is a variant of armel, the main difference is in floating point calculation.
In Armel, there are three conventions for floating-point calculations.
Taking gcc as an example, there are three corresponding -mfloat-abi parameter values:
soft
Soft means that all floating-point operations are implemented in the software layer, which is of course not very efficient and is suitable for early ARM processors that do not have floating-point calculation units;
softfp
Softfp is currently the default setting for Armel. It delegates floating-point calculations to the FPU, but passes function parameters using general-purpose integer registers instead of FPU registers.
hard
hard uses the FPU floating-point registers to pass function parameters to the FPU for processing.
It should be noted that in terms of compatibility, soft is compatible with the latter two, but softfp and hard modes are not compatible.
By default, armel uses softfp, so the hard mode armel is used as a separate abi, called armhf.
2. Value
Using softfp mode, there will be unnecessary conversions from floating point to integer and from integer to floating point.
Using hard mode can save an average of 20 CPU cycles for each floating-point related function call[1].
For an architecture like ARM where every cycle counts, this improvement is undoubtedly huge.
Without changing the source code or configuration, using armhf can improve performance by 20-25% on some applications[2].
For some programs that rely heavily on floating-point operations, the performance can be improved by 300%[3].
3. Use
Enabling armhf requires hardware support. According to the Debian wiki, it requires an ARMv7 CPU, Thumb-2 instruction set, and VFP3D16 floating-point processor[4].
In the gcc compilation parameters, use -mfloat-abi=hard -mfpu=vfp.
In terms of tools, CodeSourcery first supported the hard mode. You can also compile the tool chain yourself [5].
4. History of Linux with armfp
On May 20, 2010, Konstantinos Margaritis published a document announcing that Ubuntu Larmic would be ported to hard mode[6].
This news later sparked a discussion on powerdeveloper about performance improvements[7].
On July 6, 2010, Hector Oron sent the email discussion between him and Konstantinos to the debian-arm mailing list [8].
It was called armelfp, which attracted the attention of the community and got the official name armhf.
On July 18, 2010, the unofficial debian-armhf port work started[9].
On November 24, 2011, the port became an official Debian activity.
Currently, more than 90% of the software in the Debian repository has been ported[10].
Debian plans to release an armhf version in Wheezy (7.0), and Ubuntu also plans to release an armhf version in Precise Pangolin 12.04 LTS.
In addition, for the Toshiba AC100 mentioned earlier, armhf debian and ubuntu images are now available for installation and trial [11, 12].
Previous article:ARM MP-core boot process
Next article:Some suggestions for beginners on whether to choose to learn ARM7 or ARM9
- Popular Resources
- Popular amplifiers
- Learn ARM development(16)
- Learn ARM development(17)
- Learn ARM development(18)
- Embedded system debugging simulation tool
- A small question that has been bothering me recently has finally been solved~~
- Learn ARM development (1)
- Learn ARM development (2)
- Learn ARM development (4)
- Learn ARM development (6)
Professor at Beihang University, dedicated to promoting microcontrollers and embedded systems for over 20 years.
- LED chemical incompatibility test to see which chemicals LEDs can be used with
- Application of ARM9 hardware coprocessor on WinCE embedded motherboard
- What are the key points for selecting rotor flowmeter?
- LM317 high power charger circuit
- A brief analysis of Embest's application and development of embedded medical devices
- Single-phase RC protection circuit
- stm32 PVD programmable voltage monitor
- Introduction and measurement of edge trigger and level trigger of 51 single chip microcomputer
- Improved design of Linux system software shell protection technology
- What to do if the ABB robot protection device stops
- Analysis of the application of several common contact parts in high-voltage connectors of new energy vehicles
- Wiring harness durability test and contact voltage drop test method
- From probes to power supplies, Tektronix is leading the way in comprehensive innovation in power electronics testing
- From probes to power supplies, Tektronix is leading the way in comprehensive innovation in power electronics testing
- Sn-doped CuO nanostructure-based ethanol gas sensor for real-time drunk driving detection in vehicles
- Design considerations for automotive battery wiring harness
- Do you know all the various motors commonly used in automotive electronics?
- What are the functions of the Internet of Vehicles? What are the uses and benefits of the Internet of Vehicles?
- Power Inverter - A critical safety system for electric vehicles
- Analysis of the information security mechanism of AUTOSAR, the automotive embedded software framework
- Comparison table of domestic 32-bit MCU and ST, GD compatible models
- Foxconn insider steals iPhone parts and resells them for 300 million yuan, alarming Cook, Apple is investigating
- [MM32 eMiniBoard Review] Part 2: Environment Construction and Program Burning
- Principles of Automatic Control (Shiqun)
- The impact of water depth on power supply and communications.
- 【CH579M-R1】3. ADC internal temperature measurement, external channel and touch button test
- How to migrate from GCC Linker to SEGGER Linker in Embedded Studio?
- Based on PSOC6 development board simulation I2C solution X-NUCLEO-IKS01A3 LPS22HH
- 【CH579M-R1】+OTA first experience
- I created a project with stm32cubemx and then used the module generated by keil RTE, but the code generated by RTE is repeated. How can I disable the duplication?