| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> binder(一)Linux必备知识篇 -> 正文阅读 |
|
[系统运维]binder(一)Linux必备知识篇 |
对linux操作系统中某些概念做简单预习,旨在为后续Android学习提供前提铺垫。例如学习binder、锁机制等等。 进程Linux操作系统将运行中的程序成为进程。而Linux内核控制这Linux操作系统如何管理运行在系统上的所有进程。 内核创建了第一个进程(init进程)来启动系统上所有其他进程。 当内核启动时,他会将init进程加载到虚拟内存中。内核在启动任何进程时都会在虚拟内存中为该进程分配一块专有区域用于存储该进程用到的数据和代码。 进程隔离
如何做到进程隔离?如何在各个进程共享内核空间?
图中是简化过方便理解的映射,真实情况中物理内存地址极可能是离散的而不是这样连续的内存片段。 设备文件
Linux系统将硬件设备当成特殊的文件,称之为设备文件。例如键盘、鼠标、硬盘等等在Linux中都当成文件来处理,Linux提供了一套统一的操作接口来让开发者操作它们。
设备节点:Linux系统会将所有的设备文件(网络设备除外)在/dev目录下生成对应的设备节点,生成的设备节点可以理解为设备文件的操作入口,我们可以Linux提供的统一操作接口(如open()、read()、write()、close()…)来操作这些设备节点来达到对设备的操作。 这样大大的降低了应用程序操作设备的复杂度。 网络设备之所以不和其他设备一样是因为网络设备的工作是采用报文传输,无法做到和其他设备统一接口,所以并未在/dev下生成设备节点。 虚拟设备虚拟设备是Linux动态虚拟出来的一种设备,Linux会为其分配内存,但其并不存在真实的物理设备。为了进行某些功能的现实化,让操作更加具象化。这就使得用户能像操作一个真实设备一样去做想要的操作。举个例子就像app中的小键盘它不是一个真实的物理键盘,但是你能像操作一个真实物理键盘一样打字。 Android中的binder就是一个虚拟设备,它的设备节点是/dev/binder 设备号每个设备节点都包含了2个设备号:
可以通俗理解为:主设备号是你家单元号,次设备号是你家门牌号 设备驱动设备驱动程序是一种可以使系统和设备进行交互的特殊程序,相当于硬件的接口,系统只有通过驱动程序中的接口才能控制设备的工作。加入某设备的驱动程序未能正确工作则系统也无法正确操作设备。因此,驱动程序是设备和系统之间的桥梁。 设备驱动的工作原理Linux中访问/dev目录下的设备节点时,Linux内核会把这些对设备节点的操作通过主设备号找到对应的驱动程序,然后将操作映射到驱动程序中的对应代码上,然后驱动程序可根据次设备号执行对指定设备的操作。
所以在Android中打开/dev/binder设备节点时,会执行binder驱动中的相关逻辑。后续的操作都会映射到binder驱动中。 参考文献: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 20:37:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |