第一章 我们先了解什么是android系统

        我们都知道android系统实际内核是一个Linux内核。所以android系统和Linux系统的内核实际上是一样的。只不过在Linux内核的上谷歌为了达到定制功能做了一些裁剪和拓展,比如在里面运行ART Java虚拟机,使系统可以运行Java程序。

        看到这里可能有点不好理解,什么是内核?什么又是系统?

        内核就是硬件调用抽象层,他提供调用硬件的API。包括存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。内核是抽象层,具体实际实现调用硬件的是驱动。

        那么什么是系统呢?

借用Window系统的一张图来帮助理解

 

        再来一张adnroid系统的图

 我们再来看一下操作系统的定义:操作系统(operating system,简称OS)是管理计算机硬件软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

        就是说虽然内核已经可以实现存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

        但是对于普通用户和开发软件者来说还是太复杂了。所以需要操作系统来封装内核调用和实现用户交互界面。

说完内核与系统,让我们回归到android系统本身。android系统既然是linux内核,那么它与linux系统有什么不一样呢?

        1.Android除了Linux内核具备的常用核心驱动外,还增加了自己专有的内核驱动程序,如显示驱动、蓝牙驱动、相机驱动、内存卡驱动、Binder IPC驱动等。

        2.另外,Android系统为了保护硬件厂商的知识产权,增加了HAL层,可将驱动具体的实现部分抽取发到HAL中去实现,从而规避了硬件驱动开源的风险,所以android的驱动程序是分为两部分,一部分写入内核中,一部分写入HAL层中。
Android除要实现底层驱动的开发外,还需要根据JNI规则将驱动程序封装为JNI层接口,以达到应用程序(JAVA程序) 可通过JNI来调用内核驱动程序。

        3.而且,Linux与android还有应用层软件的差异
        Android应用程序是使用java语言写的,不能直接调用C语言实现的系统接口,而Linux系统中可以用C语言调用系统接口来与内核进行通信,于是Android系统中就有了一个叫做JNI的概念,用实现java与C/C++程序之间的信息交互。

(1)Android应用程序访问Android内核驱动程序的方式:

        APP—>JNI—>Android内核驱动程序 (JNI可以直接访问内核)
        APP—>硬件访问服务—>Android内核驱动程序(硬件访问服务可以提供有限的内核访问)
(2)Linux应用程序访问linux驱动程序的方式

        APP(C程序)—> Linux内核驱动程序
        APP—>C库—>Linux内核驱动程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闽农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值