- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android固件移植和开发选编
Android固件移植和开发
主要内容
开发环境搭建
固件的编译
以太网
LCD
USB
Wifi
3G
Android的启动流程
Android的启动流程
Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。
Android的启动流程
两个阶段:Linux的启动+Android的启动;
启动过程
Init进程的启动:rc文件解析和服务启动
ServiceManager启动:ServiceManager用来管理系统中所有的binder service,不管是本地的c++实现的还是java语言实现的都需要这个进程来统一管理,最主要的管理就是,注册添加服务,获取服务。所有的Service使用前都必须先在servicemanager中进行注册。
Zygote进程的启动:Zygote这个进程是非常重要的一个进程,Zygote进程的建立是真正的Android运行空间,初始化建立的Service都是Navtive service. Zygote就建立好了,利用Socket通讯,接收请求,Fork应用程序进程,进入Zygote进程服务框架中。
SystemServer启动:startSystemServer( )、RuntimeInit.java、SystemServer.java
Home界面启动:然后就启动了Home界面,完成了整个Android启动流程
3.总结:linux的init在启动若干守护进程之后,就启动了Android的runtime和zygote,zygote再启动虚拟机,系统 服务,系统服务再启动完本地服务后,又启动了若干Android服务,并完成向ServiceManager的注册工作,最后系统启动完成。
Android的启动流程
开发环境搭建
64bit PC机准备,最好是搭建一台服务器,在服务器上安装好ubuntu-12.04.4-desktop-amd64.iso,本项目开发需要用64bit机和64bit Ubuntu。否则可能导致编译错误。
Xshell/Xftp工具
源码包解压和安装sun-Java6-jdk等;
依赖库:apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libxml2-utils uboot-mkimage
源码编译
可单独编译u-boot、内核和文件系统,生成镜像然后烧写;也可根据源码包进行整体编译,一般在开发板的源码包都有说明;
通常在u-boot移植时,需要针对自己的板子选择一个相近的源码包,然后根据打印信息和电路图,来修改和移植Flash、ddr等部分的代码;
有时候不同的芯片解决方案厂商将各个外围模块的配置和使能集中在了一个配置文件中,比如A20,将各个模块的引脚配置和使能等放在了sys_config.fex文件中,用户只需要简单修改即可使能对应模块;
固件的编译过程-文件解读
Kconfig:arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件
Makefile:Linux内核根目录下的makefile文件、各层目录下的makefile文件
.config:Linux内核根目录下的.config文件、arm/$ARCH/下的config文件
内核根目录下的 include/generated/autoconf.h文件
固件编译
Make ARCH=arm menuconfig
.config
include/generated/autoconf.h
kconfig
Makefile
Uboot
Android Linux Kernel
Android Filesystem
U-boot.img
uImage
root and system folders
举例
假设想把自己写的一个flash的驱动程式加载到工程中,而且能够通过
menuconfig配置内核时选择该驱动该怎么办呢?能够分三步:
第一:将flashtest.c文档添加到/driver/mtd/maps/?目录下。
第二:修改/driver/mtd/maps目录下的kconfig文档:
config MTD_flashtest
tristate “ap71?flash?
这样当make?me
文档评论(0)