通过和标准的Linux 2.6.25 Kernel的对比,我们可以发现,其主要增加了以下的内容:
基于ARM架构增加Gold-Fish平台,相应增加的目录如下:
kernel/arch/arm/mach-goldfish kernel/include/asm-arm/arch-goldfish 。
Gold-Fish平台采用的是ARM926T CPU作为BaseBand处理器, 该CPU主频至少为200M HZ. 采用MSM7201A CPU(ARM 11)作为主CPU, 其主频为528M HZ.
增加了yaffs2 FLASH文件系统,相应增加的目录为:
kernel/fs/yaffs2 实际上,Android包经过编译后生成的system.img和ramdisk.img文件就是yaffs2格式的包.
增加了Android的相关Driver,相应目录为:
Kernel/drivers/android
Android内核主要分为:
Android IPC系统: Binder
Android 日志系统: Logger
Android 电源管理: Power
Android 闹钟管理: Alarm
Android 内存控制台: Ram_console
Android 时钟控制的GPIO: Timed_gpio
增加了switch处理, 相应的目录为:
kernel/drivers/switch/
增加了一种新的共享内存处理方式, 相应增加的文件为:
kernel/mm/ashmem.c
其他的Android内核为Linux-2.6.25内核所做的补丁等等,例如BlueTooth, 在此不做详细分析
GoldFish平台相关的驱动文件如下:
字符输出设备:
kernel/drivers/char/goldfish_tty.c
图象显示设备: (Frame Buffer)
kernel/drivers/video/goldfishfb.c
键盘输入设备:
kernel/drivers/input/keyboard/goldfish_events.c
RTC设备: (Real Time Clock)
kernel/drivers/rtc/rtc-goldfish.c
USB Device设备:
kernel/drivers/usb/gadget/android_adb.c
SD卡设备:
kernel/drivers/mmc/host/goldfish.c
FLASH设备:
kernel/drivers/mtd/devices/goldfish_nand.c kernel/drivers/mtd/devices/goldfish_nand_reg.h
LED设备:
kernel/drivers/leds/ledtrig-sleep.c
电源设备:
kernel/drivers/power/goldfish_battery.c
音频设备:
kernel/arch/arm/mach-goldfish/audio.c
电源管理:
kernel/arch/arm/mach-goldfish/pm.c
时钟管理:
kernel/arch/arm/mach-goldfish/timer.c
㈡ 关于学习安卓底层,懂得进
我干了3年Android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径。根据前辈的经验,Android底层完全入门需要两年。
先说下我的入门过程:
第零步,下载源码,我下的4.2的,框架层源码10G,内核2G多,ctags给框架层建的标签文件都有600M,当时让我有点震撼,用的vim+ctags+cscope来阅读,还算不错,架构挺清晰的。
第一步,我找到了一本好书《Android的设计与实现 第一卷》它讲了Android框架层的启动,初始化,服务框架初始化,Binder,消息循环,PackageManagerService,ActivityManagerService。据作者说后面会出讲UI子系统的第二卷,拭目以待。其实这本书看了几十页我就发现需要第二步的知识,否则看不下去,于是跳去第二步。
第二步,学习Linux系统编程,在看《Android的设计与实现》的时候我发现,框架层的Native部分,全是Linux编程。为了掌握这部分知识,我花了4个月学习了《Linux系统编程手册》(TLPI)这本1000多页的书,我以前是搞WIndows文件系统这块的,所以C语言还比较熟,TLPI的习题很有意思,量也比较大,坚持下来还是收获很多。
第三步,花了4个月学习了一些Linux内核的知识,看了LKD,PLKA看了一半多。越学越没底,觉得不懂得越来越多,不过这个也正常,只有靠慢慢磨,估计以后要不断的磨这块。
第四步,回头看Android源码,这次一口气看完了《Android的设计与实现 第一卷》,终于对框架层有了谱。同时真的数次把我看晕,前面看Linux内核源码都没这么晕,不断在Java层和Native层之间跳有点磨脑浆。其中我又觉得Java的基础没有打太牢,回去补了一个月的《Core Java》第八版。但是这书没有涉及UI子系统,于是又看了《Android内核剖析》
第五步,《Android内核剖析》(这本书实际上是讲框架层的,作者也是个搞嵌入式的,所以他在写框架层的时候文笔不太好,很罗嗦,不过还是有很多看点,到他后来写做ROM,玩开发板时估计是说到了他的本行,一下子遛起来了看得出还是挺有水平的,这本书知识有点旧毕竟讲的是2.3很多代码已经过时,但是作者很多点子很有参考价值)这本书讲UI子系统和按键/触摸消息处理系统还是很有分量的,尤其13章View绘制那里,结合源码研究很有收获。而后面他讲编译框架和ROM相关的东西都是挺宝贵的资料。
第六步,为了再补一下其他诸如电源管理模块等子系统的知识看了,《深入理解android》系列,个人认为这个系列看起来有点不太舒服,不过作为补充印证还是比较有价值。
第七步,《Android系统源代码情景分析》,罗升阳的源码分析大作,比《Android的设计与实现》分析得更细致,但缺点是涉及到模块比较少,选用的源码也比《Android的设计与实现》更旧一点。看完书后需要去研究作者的博客,东西挺多的,一定让你满意。
第八步,买块开发板自己玩。这步我还没走到,原因是我觉得我还差点准备知识。可能要再几个月,到时准备入块6410或者树莓派。
最后,由于我11年以前都是搞Windows这块的,所以对Linux知识不是很了解,不得已看了这么些书,如果是一直做Linux的人,很多步骤估计可以省掉了。直接上源码才是正道。
我本身做着移动GIS开发的工作,学框架层全是因为兴趣,但招聘平台Android框架层开发人员还是蛮有竞争力的有不少定制ROM,智能电视的工作都处于人才难求状态,毕竟有一定的门槛,现在各种ios培训,让奔着钱干开发的人纷纷涌入,而ios只能干sdk开发的缺点就暴露出来了,一堆新手老手,菜鸟大牛全挤在SDK开发这块,我觉得不太妙。 反观Android这边,虽然入门菜鸟没有搞ios来钱,但是可持续性很好,从sdk-》框架》驱动》内核这样干下去。干着干着发现自己渐渐变成了Linux开发者/嵌入式开发者的人也不少,新人,老手,菜鸟大牛各居其位,层次性很好。
㈢ android内核、wp7内核、wp8内核、windows 8内核 他们之间有什么区别和联系 它们和 linux 又有什么联系
wp8采用windows8内核 windows8基于windows NT开发 windows系统其实是微软和IBM合作开发的后来一键产生分歧 微软单干了
Android采用linux内核 由谷歌开发
㈣ 怎样评价罗升阳的android系统源代码分析
我干了3年Android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径。根据前辈的经验,Android底层完全入门需要两年。 先说下我的入门过程: 第零步,下载源码,我下的4.2的,框架层源码10G,内核2G多,ctags给框架层建的标签文件都有600M,当时让我有点震撼,用的vim+ctags+cscope来阅读,还算不错,架构挺清晰的。 第一步,我找到了一本好书《Android的设计与实现 第一卷》它讲了Android框架层的启动,初始化,服务框架初始化,Binder,消息循环,PackageManagerService,ActivityManagerService。据作者说后面会出讲UI子系统的第二卷,拭目以待。其实这本书看了几十页我就发现需要第二步的知识,否则看不下去,于是跳去第二步。 第二步,学习Linux系统编程,在看《Android的设计与实现》的时候我发现,框架层的Native部分,全是Linux编程。为了掌握这部分知识,我花了4个月学习了《Linux系统编程手册》(TLPI)这本1000多页的书,我以前是搞WIndows文件系统这块的,所以C语言还比较熟,TLPI的习题很有意思,量也比较大,坚持下来还是收获很多。 第三步,花了4个月学习了一些Linux内核的知识,看了LKD,PLKA看了一半多。越学越没底,觉得不懂得越来越多,不过这个也正常,只有靠慢慢磨,估计以后要不断的磨这块。 第四步,回头看Android源码,这次一口气看完了《Android的设计与实现 第一卷》,终于对框架层有了谱。同时真的数次把我看晕,前面看Linux内核源码都没这么晕,不断在Java层和Native层之间跳有点磨脑浆。其中我又觉得Java的基础没有打太牢,回去补了一个月的《Core Java》第八版。但是这书没有涉及UI子系统,于是又看了《Android内核剖析》 第五步,《Android内核剖析》(这本书实际上是讲框架层的,作者也是个搞嵌入式的,所以他在写框架层的时候文笔不太好,很罗嗦,不过还是有很多看点,到他后来写做ROM,玩开发板时估计是说到了他的本行,一下子遛起来了看得出还是挺有水平的,这本书知识有点旧毕竟讲的是2.3很多代码已经过时,但是作者很多点子很有参考价值)这本书讲UI子系统和按键/触摸消息处理系统还是很有分量的,尤其13章View绘制那里,结合源码研究很有收获。而后面他讲编译框架和ROM相关的东西都是挺宝贵的资料。 第六步,为了再补一下其他诸如电源管理模块等子系统的知识看了,《深入理解android》系列,个人认为这个系列看起来有点不太舒服,不过作为补充印证还是比较有价值。 第七步,《Android系统源代码情景分析》,罗升阳的源码分析大作,比《Android的设计与实现》分析得更细致,但缺点是涉及到模块比较少,选用的源码也比《Android的设计与实现》更旧一点。看完书后需要去研究作者的博客,东西挺多的,一定让你满意。 第八步,买块开发板自己玩。这步我还没走到,原因是我觉得我还差点准备知识。可能要再几个月,到时准备入块6410或者树莓派。 最后,由于我11年以前都是搞Windows这块的,所以对Linux知识不是很了解,不得已看了这么些书,如果是一直做Linux的人,很多步骤估计可以省掉了。直接上源码才是正道。 我本身做着移动GIS开发的工作,学框架层全是因为兴趣,但招聘平台Android框架层开发人员还是蛮有竞争力的有不少定制ROM,智能电视的工作都处于人才难求状态,毕竟有一定的门槛,现在各种ios培训,让奔着钱干开发的人纷纷涌入,而ios只能干sdk开发的缺点就暴露出来了,一堆新手老手,菜鸟大牛全挤在SDK开发这块,我觉得不太妙。 反观Android这边,虽然入门菜鸟没有搞ios来钱,但是可持续性很好,从sdk-》框架》驱动》内核这样干下去。干着干着发现自己渐渐变成了Linux开发者/嵌入式开发者的人也不少,新人,老手,菜鸟大牛各居其位,层次性很好。 转载
㈤ 深入理解android内核设计思想 怎么样
《深入理解Android内核设计思想》适用于Android 4.3以上的版本。全书从操作系统的基础知识入手,全面剖析进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统等核心技术在Android中的实现原理。书中讲述的知识点大部分来源于工程项目研发,因而具有较强的实用性,希望可以让读者“知其然,更知其所以然”。全书分为编译篇、系统原理篇、应用原理篇、系统工具篇共4篇22章,基本涵盖了参与Android开发所需具备的知识,并通过大量图片与实例来引导读者学习,以求尽量在源代码分析外为读者提供更易于理解的思维方式。 《深入理解Android内核设计思想》既适合Android系统工程师,也适合于应用开发工程师来阅读提升Android开发能力。读者可以在《深入理解Android内核设计思想》潜移默化的学习过程中更深刻地理解Android系统,并将所学知识自然地应用到实际开发难题的解决中。
㈥ 基于android的内核与系统架构源码分析怎么样
如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱。不过,在智能手机占据主要地位的今天,挑选手机的主要因素就是挑选一款性能高的手机操作系统,Android就是其中的一个必然选择。Android系统架构和其操作系统一样,采用了分层的架构。Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。 Android系统架构之应用程序 Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。 Android系统架构之应用程序框架 开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 隐藏在每个应用后面的是一系列的服务和系统, 其中包括; * 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。 * 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据 * 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。 * 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 * 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 有关更多的细节和怎样从头写一个应用程序,请参考 如何编写一个 Android 应用程序. Android系统架构之系统运行库 1)程序库 Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库: * 系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。 * 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。 * Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。 * LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。 * SGL - 底层的2D图形引擎 * 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。 * FreeType -位图(bitmap)和矢量(vector)字体显示。 * SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。 2)Android 运行库 Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。 每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。 Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。 Android系统架构之Linux 内核 Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。
㈦ 如何评价《1616深入理解Android内核设计思想 第2版》
、《深入理解Android内核设计思想(第2版)(册)》
本书既适合Android系统工程师适合于应用发工程师阅读提升Android发能力读者本书潜移默化习程更深刻理解Android系统并所知识自应用实际发难题解决
二、《Android Studio应用发实战详解》
本书适合Android初级读者、Android应用发员、Android者、Android Studio发员、Android智能家居、Android穿戴设备研发员习作相关培训校专院校相关专业教用书
三、《深入解析Android 虚拟机》
本书几乎涵盖Dalvik VM系统所主要内容并且讲解通俗易懂特别利于读者习并消化
四、《Android传器发与智能设备案例实战》
本书几乎涵盖Android传器外设发所需所主要内容讲解通俗易懂
五、《构建安全Android App》
本书介绍主流Android安全技术发并应用整Android应用发代码
六、《Android 应用测试指南》
《Android应用测试指南》本移测试实用工具书本书针前流行技术、框架工程质量改进工具进行介绍步步清晰指导家何写应用程序测试用例利用各种测试手段保证Android项目质量
七、《精通Android网络发》
本书几乎涵盖Android网络应用所主要内容讲解通俗易懂
㈧ 深入理解android内核设计思想 第2版 多少页
都是好书啊,我都有,linux内核设计比较理论,讲述操作系统的一些基本概念但结合linux这个特定的OS,从总体上把握linux内核的设计思想,而深入理解Linux内核则比较具体的讲解内核的设计实现引用的代码比较多,比较细,比较杂,要细细分析。都挺不错,如何你比较入门,可以先看linux内核设计,但要结合代码分析,不然也很难入门,深入理解比较难,如果有一定水平,可以入手。
㈨ 安卓内核与rom有什么区别
安卓内核与rom的区别:
1、android 的内核都是linux的内核。
(1)Android内核是基于Linux2.6内核的(目前最新开发版本是2.6.31),它是一个增强内核版本,除了修改部分Bug外,它提供了用于支持Android平台的设备驱动。
(2)AndroidBinder,基于OpenBinder
框架的一个驱动,用于提供 Android 平 台 的 进 程 间 通 讯 (IPC, inter-processcommunication)。
(3)源代码位于drivers/staging/android/binder.c Android电源管理(PM),一个基于标准Linux电源管理系统的轻量级的Android电源管理驱动,针对嵌入式设备做了很多优化。
2、rom和每个手机厂商有关,每个rom都有对应手机型号、系统本版的驱动程序。
(1)安卓ROM是手机重新刷入系统的一个程序包,安卓系统在手机市场里占有率很高,所以安卓ROM发展很快,国内比较知名的安卓ROM有米柚,乐蛙,网络云,深度等。
(2)ROM是一种只能读出事先所存数据的固态半导体存储器。其是。通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失。
(3)ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。除少数品种的只读存储器(如字符发生器)可以通用之外,不同用户所需只读存储器的内容不同。
㈩ Android内核剖析的作品目录
第1部分 基础篇
第1章 Linux基础 2
1.1 Linux文件系统概述 2
1.2 Linux启动过程 4
1.3 常用Linux 命令 6
1.4 Shell脚本备忘 9
1.5 Make脚本备忘 15
第2章 Java基础 26
2.1 类装载器DexClassLoader 26
2.2 JNI调用机制 32
2.3 异步消息处理线程 37
第3章 Android源码下载及开发环境配置 44
3.1 Mac系统的配置 44
3.2 在Linux中配置USB连接 46
3.3 在Eclipse中调试Framework 46
第4章 使用git 51
4.1 安装git 52
4.2 git仓库管理 52
4.3 git merge用法 57
4.4 git rebase用法 58
4.5 git cherry-pick用法 61
4.6 git reset用法 62
4.7 恢复到无引用提交 63
4.8 git remote用法 65
4.9 git 配置 67
4.10 同时使用git和svn 71
4.11 其他git常用命令示例 72
第2部分 内核篇
第5章 Binder 78
5.1 Binder框架 78
5.2 设计Servier端 80
5.3 Binder客户端设计 81
5.4 使用Service类 82
5.5 系统服务中的Binder对象 88
第6章 Framework概述 92
6.1 Framework框架 92
6.2 APK程序的运行过程 94
6.3 客户端中的线程 94
6.4 几个常见问题 95
第7章 理解Context 98
7.1 Context是什么 98
7.2 一个应用程序中包含多少个Context对象 99
7.3 Context相关类的继承关系 99
7.4 创建Context 100
第8章 创建窗口的过程 106
8.1 窗口的类型 106
8.2 token变量的含义 108
8.3 创建应用窗口 111
8.4 创建子窗口 121
8.5 系统窗口Toast的创建 136
8.6 创建窗口示例 139
第9章 Framework的启动过程 142
9.1 Framework运行环境综述 142
9.2 Dalvik虚拟机相关的可执行程序 143
9.3 zygote的启动 147
9.4 SystemServer进程的启动 155
第10章 AmS内部原理 160
10.1 Activity调度机制 160
10.2 内存管理 192
10.3 对AmS中数据对象的理解 211
10.4 ActivityGroup的内部机制 214
第11章 从输入设备中获取消息 221
11.1 Android消息获取过程概述 221
11.2 与消息处理相关的源码文件分布 223
11.3 创建InputDispatcher线程 226
11.4 把窗口信息传递给InputDispatcher线程 227
11.5 创建InputChannel 229
11.6 在WmS中注册InputChannel 232
11.7 在客户进程中注册InputChannel 233
11.8 WmS中处理消息的时机 234
11.9 客户窗口获取消息的时机 235
第12章 屏幕绘图基础 237
12.1 绘制屏幕的软件架构 237
12.2 Java客户端绘制调用过程 239
12.3 C客户端绘制过程 241
12.4 Java客户端绘制相关类的关系 244
第13章 View工作原理 247
13.1 导论 247
13.2 用户消息类型 249
13.3 按键消息派发过程 252
13.4 按键消息在WmS中的派发过程 263
13.5 触摸消息派发过程 266
13.6 导致View树重新遍历的时机 274
13.7 遍历View树performTraversals()的执行过程 293
13.8 计算视图大小(measure)的过程 296
13.9 布局(layout)过程 308
13.10 绘制(draw)过程 313
13.11 动画的绘制 331
第14章 WmS工作原理 340
14.1 概述 340
14.2 WmS主要内部类 348
14.3 窗口的创建和删除 355
14.4 计算窗口的大小 371
14.5 切换窗口 379
14.6 ()的执行过程 398
14.7 窗口动画 406
14.8 屏幕旋转及Configuration的变化过程 409
第3部分 系统篇
第15章 资源访问机制 414
15.1 定义资源 414
15.2 存储资源 415
15.3 styleable、style、attr、theme的意义 417
15.4 AttributeSet与TypedArray类 420
15.5 获取Resources的过程 425
15.6 Framework资源 431
第16章 程序包管理(Package Manager Service) 439
16.1 包管理概述 439
16.2 packages.xml文件格式 442
16.3 包管理服务的启动过程 446
16.4 应用程序的安装和卸载 455
16.5 intent匹配框架 463
第17章 输入法框架 467
17.1 输入法框架组成概述 468
17.2 输入法中各Binder对象的创建过程 469
17.3 输入法主要操作过程 477
17.4 输入法窗口内部的显示过程 490
17.5 向编辑框传递字符 503
17.6 输入法相关源码清单 504
第4部分 编译篇
第18章 Android编译系统 508
18.1 Android源码文件结构 509
18.2 从调用make命令开始说起 509
18.3 编译所需脚本文件之间的协同关系 512
18.4 如何增加一个proct 523
18.5 如何增加一个项目 528
18.6 APK编译过程 533
18.7 Framework的编译 544
18.8 编译android.jar 547
18.9 编译adt插件 553
18.10 总结 554
第19章 编译自己的Rom 555
19.1 嵌入式系统的内存地址空间 555
19.2 各种映像(Image)文件的作用 559
19.3 编译Nexus S(NS)的Image文件 562
19.4 使用fastboot写入Image文件 566
19.5 最后验证 567
第5部分 硬件驱动篇
第20章 基于TI OMAP处理器的 Techshine 开发板介绍 573
20.1 Techv-35XX开发板概述 574
20.2 交叉编译环境配置 575
20.3 x-loader编译 578
20.4 u-boot编译 578
20.5 Techv-35XX Linux驱动和内核配置及编译 579
20.6 Techv-35XX Android驱动编写 584
20.7 Techv-35XX Android开发环境建立 589
20.8 编译Android Donut 590
20.9 Android根文件系统的制作 591
20.10 相关Image文件的烧写 591
20.11 Android 根文件系统安装 593