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

时间: 2024-08-04 14:12:41

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

【读书笔记-《Android游戏编程之从零开始》】8.Android 游戏开发常用的系统控件(系统控件常见问题)

Android 中常用的计量单位Android有时候需要一些计量单位,比如在布局Layout文件中可能需要指定具体单位等.常用的计量单位有:px.dip(dp).sp,以及一些不常用的pt.in.mm.下面详细介绍下这些计量单位之间的区别和联系.in:英寸(长度单位):mm:毫米(长度单位):pt:磅/点,1/72英寸(一个标准的长度单位):sp:全名 scaled pixels-best for text size,放大像素,与刻度无关,可以根据用户的字体大小就行缩放,主要用来处理字体的大小:

【读书笔记-《Android游戏编程之从零开始》】6.Android 游戏开发常用的系统控件(TabHost、ListView)

3.9 TabSpec与TabHost TabHost类官方文档地址:http://developer.android.com/reference/android/widget/TabHost.html Android 实现tab视图有2种方法,一种是在布局页面中定义<tabhost>标签,另一种就是继承tabactivity.但是我比较喜欢第二种方式,应为如果页面比较复杂的话你的XML文件会写得比较庞大,用第二种方式XML页面相对要简洁得多. <?xml version="1

【读书笔记-《Android游戏编程之从零开始》】3.Android 游戏开发常用的系统控件(Button、Layout、ImageButton)

3.1 Button Button这控件不用多说,就是一个按钮,主要是点击后进行相应事件的响应. 给组件添加ID属性:定义格式为 android:id="@+id/name",这里的name是自定义的,不是索引变量."@+"表示新声明,"@"表示引用,例如:"@+id/tv" 表示新声明一个id,是id名为tv的组件:"@id/tv" 表示引用id名为tv的组件. 给按钮添加点击事件响应  想知道按钮是否被

【读书笔记-《Android游戏编程之从零开始》】1.Android 平台简介与环境搭建

简单的记录下笔记,具体可百度! Android SDK (Software Development Kit)- Android 软件开发工具包,用于辅助Android 操作系统软件开发,是开发Android 软件.文档.范例.工具的一个集合.Android NDK (Native Development Kit) - 类似 Android SDK,可用C/C++语言编写Android程序. developer.android.com - 可查阅到 Android SDK. 开发指南.API说明等

【读书笔记-《Android游戏编程之从零开始》】5.Android 游戏开发常用的系统控件(ProgressBar、Seekbar)

3.7 ProgressBar ProgressBar类官方文档地址:http://developer.android.com/reference/android/widget/ProgressBar.html 在Android应用开发中,ProgressBar(运行进度条)是比较常用到的组件,例如下载进度.安装程序进度.加载资源进度显示等.在Android中提供了两种样式来分别表示在不同状态下显示的进度条,下面来实现这两种样式.默认进度条是圆形,通过style属性来指定系统进度条的大小:sty

【读书笔记-《Android游戏编程之从零开始》】4.Android 游戏开发常用的系统控件(EditText、CheckBox、Radiobutton)

3.4 EditText EditText类官方文档地址:http://developer.android.com/reference/android/widget/EditText.html EditText继承TextView,所以EditText具有TextView的属性特点,下面主要介绍一些EditText的特有的输入法的属性特点android:layout_gravity="center_vertical":设置控件显示的位置:默认top,这里居中显示,还有bottomand

Android深度探索——第六章读书笔记及心得

单词个数统计程序 ——第六章读书笔记及心得 通过本章的学习,学会了使用多种平台测试linux驱动开发.学会了统计单词个数的程序,通过该程序知道了该算法的实现技术为linux驱动,因为该程序的单词是封装在linux驱动中的.在此之前还对linux有了深入的了解.知道了linux驱动程序编写的步骤.了解到了一些重要的函数.学会了注册和注销设备文件.学会了制定回调函数.知道了如何在eclipse中开发和测试linux驱动程序. Linux系统将每一个驱动都映射为一个文件,称为设备文件或驱动文件,都保存

《Android源码设计模式解析》读书笔记——Android中你应该知道的设计模式

断断续续的,<Android源码设计模式解析>也看了一遍,书中提到了很多的设计模式,但是有部分在开发中见到的几率很小,所以掌握不了也没有太大影响. 我觉得这本书的最大价值有两点,一个是从设计模式的角度去理解Android源码,结合着日常开发中的常用类,对设计模式的理解会更加的深刻:另外一个好处就是了解常用模式,再看其他人写的代码的时候,更容易理解代码思路.下面是我的读书笔记和一些思考,设计模式只整理我认为重要的部分. 建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常

Android深度探索——第五章读书笔记及心得

搭建S3C6410开发板的测试环境 ——第五章读书笔记及心得 通过本章的学习学会了如何在开发板上安装Android.开发板是学习和开发嵌入式技术的主要硬件设备,想要顺利的通过linux驱动访问硬件,是不能在PC板上模拟的,需要在卡发板上进行调试和测试.其相对于手机更适合与对程序进行测试,尤其是对底层linux程序进行测试.还了解了S3C6410开发板的基本信息.知道了如何安装串口调试工具以及烧写Android系统.知道了如何配置有线网络. S3C6410是一款低功耗.高性价比的精简指令集计算机处