将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浏览器。

注:转自:https://blog.csdn.net/eliot_shao/article/details/50242681

android BSP移植综述的更多相关文章

  1. android BSP与硬件相关子系统读书笔记(1)android BSP移植综述

    从linux驱动转行至Android驱动开发大半年了,一开始就产生了一个很纠结目标和问题,就是不停的google如何porting android!这个问题得到的结果对于初出茅庐的我,感到迷惘.随着工 ...

  2. 第一章 Android系统移植与驱动开发概述

    本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ...

  3. 浅谈Android系统移植、Linux设备驱动

    一.Android系统架构 第一层:Linux内核 包括驱动程序,管理内存.进程.电源等资源的程序 第二层:C/C++代码库 包括Linux的.so文件以及嵌入到APK程序中的NDK代码 第三层:An ...

  4. 第一章:Android系统移植与驱动开发概述

    Android是基于Linux内核的,与Linux内核没有太大的区别,只是增加了一些自己独有的驱动,随着Android发布版本的不断升级,他所使用的Linux内核也在不断升级,以适应新的安卓版本,为他 ...

  5. 第一章Android系统移植与驱动开发概述--读书笔记

    以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...

  6. Android——程序移植 相关知识总结贴

    android 移植笔记有感 http://www.apkbus.com/android-11842-1-1.html   Android振动器系统结构和移植和调试 http://www.apkbus ...

  7. cocos2dx android版本移植时的Error format not a string literal and no format arguments解决方案

    原文地址 : http://www.cnblogs.com/hhuang2012/p/3336911.html cocos2dx android版本移植时的Error format not a str ...

  8. 将 Android 应用移植到 BlackBerry PlayBook 上

    美国西部时间18号早上,也就是我们的19号凌晨,BlackBerry DevCon活动隆重举行,PlayBook 2.0开发测试版随之发布.PlayBook 2.0的一个重要功能就是支持Android ...

  9. Android系统移植与驱动开发----第一章

    第一章 Android系统移植与驱动开发 Android源代码定制完全属于自己的嵌入式系统,但是支持的设备不多,所以要移植,而在移植的过程中使用的不得不提的是驱动开发. Android系统构架主要包括 ...

随机推荐

  1. 我理解的NODE

    简介:NODE不是我们想象中的后台语言,它不是一门语言,它是一个和浏览器类似的工具或者平台,在NODE平台中,可以把我们写的JS代码解析出来,而且NODE和谷歌浏览器一样都是采用V8引擎渲染解析的. ...

  2. PHP函数总结 (七)

    <?php /** * 匿名函数(闭包函数): * php>=5.3 * 允许临时创建一个没有指定名称的函数,常作为回调函数参数的值 * * 闭包的另一个概念: * 在内部函数中可以使用外 ...

  3. oracle11g中SQL优化(SQL TUNING)新特性之Adaptive Cursor Sharing (ACS)

    1.   ACS简介 Oracle Database 11g提供了Adaptive Cursor Sharing (ACS)功能,以克服以往不该共享的游标被共享的可能性.ACS使用两个新指标:sens ...

  4. JVM笔记(一) Java内存区域

    Java 内存区域 总概 java虚拟机在执行java程序的过程中,会把它管理的内存划分为几个不同的数据区域.每当运行一个java程序时,就会启动一个虚拟机. 具体的区域如图所示: 同时,方法区 与 ...

  5. zabbix项目实践

    一,Zabbix生产环境监测案例概述 1.1 项目规划 [x] :主机分组 交换机 Nginx Tomcat MySQL Apache PHP-fpm redis(也有状态页, 自己研究) memca ...

  6. HDU 2767 Proving Equivalences (Tarjan)

    Proving Equivalences Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other ...

  7. python函数def

    #函数就是实现一个特定功能的程序块 #下面这个函数实现了打印helloworld的功能 def print_hello(): print('hello world!') #这是调用方法 print_h ...

  8. (C/C++学习笔记) 九. 变量的存储类型

    九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...

  9. DevExpress v18.1新版亮点——WPF篇(二)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载& ...

  10. compile——生成ast

    刘涛 生成ast的函数是src/compiler/parser/index.js文件中的parse函数, 从这里入手,我们一起来看看一段html字符串,是如何一步步转换成抽象语法树的. 这一部分会涉及 ...