The hardware abstraction layer (HAL) is (AFAIK) the lowest level software within a computing system. Thus, is it a set of functions implemented in assembly language (specific for a particular processor) which are called by some routines from the OS installed "over" it? If it is so, then, who is the one who provides it? The hardware manufacturer? Or, whether it is not separate from the OS, then, how does the OS developer know all the particularities of all the processors from the entire world and what is its purpose if the OS developer has to write a HAL for every OS?
Related Questions in KERNEL
- Simulate WeChat scanning short connection redirection, but the QQ display result is different from WeChat?
- Validating a client from kernel in Windows
- Yocto kernel patch fails with git am
- Nuke BlinkScript: Why does the convolution kernel scale down the image?
- EKS AMI kernel debug symbols
- Unexpected OS Shutdown
- create_ap wlan0: Could not connect to kernel driver
- QEMU i386 pmio addresses
- Simple programming of VGA cursor
- How to compile and install kernel modules with dependencies and device tree?
- android camera driver rotate 90°
- Is there any way to get the WiFi contention window (CW) min and max value in Linux 80211 subsystem?
- How to reduce cached memory used by Linux kernel on embedded linux platform
- How can I get current cpufreq in kernel code?
- Print Inode or file data, using path name
Related Questions in DEVICE-DRIVER
- How to allocate 500MB+ physically contiguous memory in a Linux kernel module and copy data to that memory from a userspace process?
- How to enable Swap APO in SYSVAD sample driver without enhancement tab in windows 11?
- Issue retrieving buffer from the device on a custom device driver in MacOS
- A bus error that occurs when mmap memory is used with memcpy
- Create Dummy CPU Performance counter register for Unit Testing of Driver
- I am trying to emulate a board which has a OLED display, but can't see anything. Can you tell me if there is something important I am not considering?
- Error code 0xC1 when trying to create a file mapping
- Do POSIX writes block until the DMA device has finished writing data?
- How does the operating system handle I/O writes, that are not a multiple of the block device's sector-size?
- How to wait for Callback response in C++ on Windows
- How do you debug a bootloader video driver on an ARM (Rockchip RK3588) computing machine?
- Why is the VOP (Video Output Processor) on the Rockchip RK3588 acting inaccessible?
- Linux TTY Operation sequence
- Unable to see any /sys/devices/xx interface created from kernel module loaded through k_vendor_module.rc
- How to natively build Windows 11 device drivers for ARM64 on an ARM64 system?
Related Questions in HARDWARE-INTERFACE
- What could be causing TPM_RC_COMMAND_SIZE error (0x80010000000a00000142) in response to TPM_GETRANDOM?
- Python Serial: WinError 10053 on a hardware connection (DOBOT MG400)
- How can I programmatically decide what class to create an object as?
- Adjust STEM detectors gain
- USBIP appears to send and receive extra URBs compared to what’s actually being sent by the device
- How to create an event listener in java to check hardware changes in MacOS operating systems?
- Is there any way to get serial number of ledger nano devices| Ledger Nano S,Ledger Nano X|Using Golang
- Receive data from serial port on higher baud rates using C#
- CAN Bus RX Errors
- Linux device interaction
- Detect "Windows" key of qwerty keyboard in Android
- tornado blocked by tight loop inside async function on windows but not linux
- What is an OS' HAL?
- Advice dealing with Undefined Behavior in Python using Ctypes - OSError:exception:access violation reading 0x00000000000000000
- CK (tCK, nCK) unit ambiguity in DDR3 standard/datasheets?
Related Questions in HARDWARE
- Is cartopy projections are computaionally heavy?
- Memory location changing from 0 to 1 consistently on Mac
- How to adjust differences of hardwares while executing code
- Read/write data to DS1642
- How can I get current cpufreq in kernel code?
- Is it possible to fetch iPhone device model number (MT552GR/A) programatically?
- The problem with running the Simulink model on arduino uno
- In VSC and other apps, when i scroll the text becomes black and turns normal after a very short delay 100ms. It is really annoying
- ERROR in rc_mpu_calibrate_accel_routine, center of fitted ellipsoids(in beagle bone blue)
- Will the 16n prefetch in DDR5 affect the bandwidth of small-granularity memory accesses?
- suppose a program is running on 5 threads.If an extra thread is added,what factors should be considered?
- Signed Driver rejected by Windows 10
- How to randomly simulate keypresses for special keys
- How does a TLB manage memory translation for addresses that cross page boundaries?
- Get number of RAM channels as a property of the system
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
I believe it's safe to think of the HAL roughly as an I/O driver for your CPU. In any reasonable circumstance, you should expect the manufacturer of an I/O device to provide you with its driver. The same applies to a CPU and its HAL.
You asked:
This is actually what the HAL is intended to address. At one point, the OS was roughly expected to handle everything. But, as hardware became more complex, an additional abstraction layer was introduced.