为什么库和内核层之间有一个额外的层(HAL)?

时间:2014-10-24 23:59:32

标签: android c linux-kernel kernel hal

对于在x86硬件上运行的Linux OS,要调用内核中作为TCP / IP驱动程序(用于x86)一部分的TCP_listen(),用户空间客户端应用程序调用{​​{1}}接口,这是用户空间的一部分listen()库[GNU distri。]。

glibc在通过listen()软件中断进入内核模式之前调用sys_Listen()来调用内核模式INT 0x80系统调用。

因此,TCP_listen()库层直接提供供应商中性接口,即glibc运行供应商(x86)特定的TCP / IP驱动程序系统调用listen(),这是Linux内核的一部分

enter image description here

我的问题:

在Android世界中,我想了解库(Bionic Libc)和Linux内核之间的额外层(HAL)的目的。

注意:对于Android世界的新用户,可能是TCP_listen()不适合在Android堆栈中使用。

注意:我知道许多线程在SO上回答类似的查询。

1 个答案:

答案 0 :(得分:0)

(免责声明:关于这个问题,我是个新手。我只是试图天真地提供指向其他信息来源的指示。) < / p>

我认为Android Camera界面 - 从Camera HAL的上方和下方查看它,将有助于阐明HAL图层所扮演的角色。

简而言之,HAL的存在是为了提供一个统一的接口(对框架或应用程序)访问特定于供应商的实现。

通过&#34;特定于供应商的&#34;,我并不意味着他们符合任何开放的规范。事实上,他们可能不会。

移动设备中的相机不是USB相机。他们是CSI-MIPI interface cameras。但是,它仍然不会阻止供应商尝试从Android支持USB摄像头。

Android Java编程接口android.hardware.camera2link)是框架和应用程序使用的API。

Camera HAL v3(link)与供应商特定的内容进行对话。

在该图中,在标有&#34; Linux Kernel&#34;的空间下,并不一定意味着相机模块供应商与外部共享任何源代码。它也可能是加载到内核空间并在内核空间中执行的二进制blob(编译代码)。