zoukankan      html  css  js  c++  java
  • android BSP与硬件相关子系统读书笔记(1)android BSP移植综述

    从linux驱动转行至Android驱动开发大半年了,一开始就产生了一个很纠结目标和问题,就是不停的google如何porting android!这个问题得到的结果对于初出茅庐的我,感到迷惘。随着工作的需要,自己的经验也就慢慢的增加,这些迷雾也慢慢解开,这里要多谢我自己的努力和老大高工的精心栽培。


    言归正传,将android移植到特定硬件平台上,其核心是bsp的搭建工作,bsp是板级支持包,并不是特定某个文件,而是从功能上理解的一种硬件适配软件包,它的核心就是: 
    1. linux内核硬件相关部分(主要是linux device drivers); 
    2. android用户空间的硬件抽象层。(HAL,hardware abstract layer). 
    linux驱动程序工作在内核空间,android的HAL工作在用户空间,有了这两个部分的结合,就可以让庞大的android系统运行在特定的硬件平台上。 
    在具有了特定的硬件平台之后,为了适应不同版本的android系统,其BSP部分代码通常需要重写或者修改,此时设备驱动程序可以重用,硬件抽象层则需要修改。 
    BSP工作和核心应该是原始的硬件底层。例如蓝牙耳机,蓝牙传输文件,蓝牙聊天等程序最终依赖的硬件是蓝牙;照相机、摄像机、条形码识别器等程序都依赖于底层的摄像头;自动转屏,晃动屏幕控制的各种游戏、都同样依赖于加速度传感器。 
    目前一般的处理器或者硬件平台的BSP(board support package)都是由芯片厂商统一完成的,并且已经趋于成熟。因此开发者的主要工作不再是构建完整的BSP,而是调试和修改现有的BSP。其实每个芯片厂家都会有一个硬件平台的参考设计,如PMU,EMMC,WIFI,CODEC,CTP等。如果没有太大的改动,原厂的BSP一般都是可以跑起来的,针对某一块的硬件变化修改驱动和HAL就可以了,对于新增加的硬件,编写相关的驱动程序,然后提供给JAVA的本地框架层的接口就可以了。对于一些简单的设备驱动,可以不用写HAL的代码,实际上很多时候也不用去写,一种常见的情况是由JNI的部分代码直接调用驱动程序的设备节点或者使用sys文件系统。也可以直接把/sys/的属性文件(可以通过cat和echo读写)的文件接口直接提供给java层代码调用。


    android的主要驱动有: 
    1. 显示驱动 display driver:常用于基于linux的帧缓冲frame buffer 驱动程序。 
    2. flash内存驱动flash memory driver :基于MTD的flash驱动程序。 
    3. 照相机驱动camera driver :基于linux的v4l video for linux驱动。 
    4. 音频驱动 audio driver :基于ALSA advanced linux sound architechure驱动。 
    5. wifi驱动:基于IEEE801.31标准的驱动程序。 
    6. 键盘驱动keyboard driver:作为输入设备的键盘驱动。 
    7. 蓝牙驱动 bluetooth diver :基于IEEE801.35.1标准的无限传输技术。 
    8. binder IPC驱动:android一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。 
    9. power management能源管理:管理电池电量等信息。 
    android**主要的库**有: 
    1. C库,基于linux系统调用实现的库,C语言标准库,也是系统最底层的库。 
    2. 多媒体框架 media framwork 
    3. SGL:2D图像引擎 
    4. SSL secure socket layer:为数据通信提供安全支持 
    5. open GL:对3D提供支持 
    6. 界面管理工具 surface management 
    7. SQLite:一种通用的嵌入式数据库 
    8. Webkit:网络浏览器的核心 
    9. free type位图和矢量字体的功能 
    android主要framework有: 
    1. active 活动 
    2. boardcast Intent Receiver广播意图接收者 
    3. content Provider 内容提供者 
    4. Intent and Intent filter 意图和意图过滤器 
    android的application framework是为APP开发提供的API,实际上是一个应用程序框架,有谷歌规定好的API,JAVA开发人员直接使用。这一层提供的首先包涵UI程序所需要的控件,如View(视图控件),其中要包涵list,grid,text,box,button等,甚至一个嵌入式的web浏览器。

  • 相关阅读:
    Vue.Js(html5) + Java实现文件分片上传
    进程、线程基础知识全家桶,30 张图一套带走
    20 张图揭开「内存管理」的迷雾,瞬间豁然开朗
    面试官:换人!他连 TCP 这几个参数都不懂
    TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?
    实战!我用 Wireshark 让你“看得见“ TCP
    IP 基础知识全家桶,45 张图一套带走
    写了Bug,误执行 rm -fr /*,我删删删删库了,要跑路吗?
    你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了
    硬不硬你说了算!35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/7454659.html
Copyright © 2011-2022 走看看