Android系统移植工作的目的是为了在特定的硬件上运行Android系统,由于Android系统用的是linux内核,因此内核移植和嵌入式linux移植差异不大,过程如下:

(1)移植boot-loader和linux2.6内核到目标平台上,让linux内核可以启动起来,基本的驱动允许正常。

(2)修改内核配置文件,打开Android必须的驱动(日志和BINDER)如下:

CONFIG_ANDROID=y

CONFIG_ANDROID_BINDER_IPC=y

CONFIG_ANDROID_LOGGER=y

此部分的代码在内核drivers/staging/android目录下。

(3)为了提高启动速度,采用ramdisk,将android文件系统的部分内容压缩到内核中。

首先打开内核驱动:

CONFIG_BLK_DEV_INITRD=y

CONFIG_INITRAMFS_SOURCE="root"

CONFIG_INITRAMFS_ROOT_UID=0

CONFIG_INITRAMFS_ROOT_GID=0

然后在android源代码编译出来的out/target/product/merlin/root目录复制到内核目录下。

(4)根据android文件系统的要求对nand flash进行重新分区,举例如下:

将nand flash分区以下8个分区

NTIM

OBM

U-boot

Kernel

System

UserData

Mass Storage

BBT

(5)根据分区表修改内核启动参数如下:

CONFIG_CMDLINE="ubi.mtd=4 ubi.mtd=5 ubi.mtd=6 root=ubi0_0 rootfstype=ubifs console=ttyS1,115200 uart_dma init=http://www.eda-china.com/init"

参数的意思是:载入的文件系统部分有3个分区,分别为nand flash的第4,5,6分区(从0编号),文件系统采用ubifs格式,控制台设备为ttyS1,波特率为115200

启动的第一个应用程序是/init

(6)确保控制台的设置和硬件保持一致,如:硬件上串口用的是UART1,则内核启动参数中设置有console=ttyS1,而且android的启动过程中设要设置正确,修改部分位于android源代码system/core/init/init.c文件中,

staTIc char *console_name = "/dev/console";

修改成

staTIc char *console_name = "/dev/ttyS1";

(7)修改android源代码system/core/rootdir目录下的init.rc文件,作如下修改(android默认yaffs2文件系统):

首先将android文件系统修改成可读写,

mount rootfs rootfs / ro remount

修改成

mount rootfs rootfs / rw remount

然后修改挂载system和userdata部分的代码,

(8)完成后编译内核,可以启动文件系统,控制台可用,但是没有显示启动log,而且不停的重启。

(9)系统不停的重启,因此控制台已经可用了,自然而然的想到看到logcat日志,一看,发现logcat设备居然没起来,配置文件里面都定义了

居然没起来,查看了下内核drivers/staging/android目录,没有.o文件,证明是没编译到,在看内核目录下的.config文件,发现居然没有了

logcat和binder的宏定义,配置文件里面有定义而.config文件中无定义,肯定是相关Kconfig文件的问题,通过分析drivers/staging目录下的

Kconfig文件发现是因为STAGING_EXCLUDE_BUILD宏默认是y,在配置文件中否定此宏即可,在配置文件中CONFIG_STAGING定义后加上即可,如下:

CONFIG_STAGING=y

# CONFIG_STAGING_EXCLUDE_BUILD is not set

修改后重新编译发现系统完成正常启动,启动过程中启动log也显示正常。

至此,android初步移植工作已经完成,当然,系统还有很多问题,需要下一步继续修改。

android系统移植流程小结:(华清远见android培训内部资料)

(1)android linux内核的普通驱动移植,让内核可以在目标平台上运行起来。

(2)正确挂载文件系统,确保内核启动参数和android源代码system/core/rootdir目录下的init.rc中的文件系统挂载正确。

(3)调试控制台,让内核启动参数中的console参数以及android源代码system/core/init/init.c中的console_name设置和硬件保持一致

(4)打开android相关的驱动(logger,binder等),串口输入logcat看logger驱动起来,没有的话调试logger驱动。(ARM的内核配置文件定义在内核arch/arm/configs目录下。)

嵌入式linux 移植安卓,Android系统内核移植流程详解相关推荐

  1. android zygote启动流程,Android zygote启动流程详解

    对zygote的理解 在Android系统中,zygote是一个native进程,是所有应用进程的父进程.而zygote则是Linux系统用户空间的第一个进程--init进程,通过fork的方式创建并 ...

  2. S5PV210 Uboot开发与移植03:Uboot启动流程详解

    目录 1. start.S解析 1.1 uboot入口分析 1.2 头文件包含 1.2.1 config.h 1.2.2 version.h 1.2.3 asm/proc/domain.h 1.2.4 ...

  3. Android App启动流程详解

    前言:在之前的文章中已经写了apk的打包流程.安装流程,今天就是梳理一下apk系列的最后的流程--app启动流程.经过今天的梳理以后咱们就可以对apk包是怎么编译生成的.apk是怎么被安装到安卓手机的 ...

  4. 文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解

    作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...

  5. 嵌入式 linux下proc目录下的文件详解

    http://blog.csdn.net/skdkjzz/article/details/19566717 目录 ----------------- 0 序言 0.1 简介 0.2 责任 1 收集系统 ...

  6. android 事件派发流程详解

    Android 5.0(Lollipop)事件输入系统(Input System) 2014-12-15      23 个评论   来源:世事难料,保持低调   收藏   我要投稿 其实Androi ...

  7. 《嵌入式 - 深入剖析STM32》STM32 启动流程详解(GCC)

    开发环境: 处理器:STM32F103 GCC:10.3.1 对于我们常用的桌面操作系统而言,我们在开发应用时,并不关心系统的初始化,绝大多数应用程序是在操作系统运行后才开始运行的,操作系统已经提供了 ...

  8. Linux 创建文件系统及挂载文件系统流程详解(转)

    作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...

  9. 移植uboot-分析uboot启动流程(详解)

    本节总结: uboot启动流程如下: 1)设置CPU为管理模式 2)关看门狗 3)关中断 4)设置时钟频率 5)关mmu,初始化各个bank 6)进入board_init_f()函数 (初始化定时器, ...

最新文章

  1. springCloud全家桶
  2. JavaScript在离开页面是提示用户
  3. boost::hash_combine模块实现json哈希值的测试程序
  4. 2021阿里巴巴研发效能峰会来啦!
  5. 自制一个害羞的口罩,见人就闭嘴,戴着可以喝奶茶
  6. Qt工作笔记-QTableWidget设置委托(使用QStyledItemDelegate画3只小猪)
  7. 加分二叉树(洛谷-P1040)
  8. C++学习札记(1)
  9. zabbix分布式监控部署proxy安装
  10. 《linux核心应用命令速查》连载六:batch:在系统负载水平允许的时候执行命令
  11. 关于:在 Office 2021 中自定义模板
  12. 拼多多带货视频是什么?拼多多带货视频如何上传
  13. 常犇_武汉大学管理学院2019年工商管理硕士(MBA)第三批复试通知
  14. 关于js中的then()
  15. 2022年房地产市场趋势展望
  16. iOS生成gif图片
  17. 给新程序员的10条建议
  18. C语言循环输出能被3整除的数
  19. Google官方网络框架Volley实战——QQ吉凶测试,南无阿弥陀佛!
  20. ENVI5.3 影像数据辐射定标及大气校正实验处理-多光谱遥感数据

热门文章

  1. 【PRUNING FILTERS FOR EFFICIENT CONVNETS】半译笔记
  2. python turtle库画七彩蟒蛇_Python学习之turtle库和蟒蛇绘制程序
  3. 基于Anusplin对气象站点数据进行插值
  4. PowerPmac上位机开发C#(一)_组件安装与环境配置
  5. 入侵必学:SQL语句大全
  6. 电气simulink常用模块_【电气学习】电工入门的干货,都知道才算是合格的维修电工!...
  7. 【路径规划】OSQP曲线平滑 公式及代码
  8. 线性代数速览(一)行列式
  9. 别看!看就是不会!(拓展欧几里德求最小正数解)
  10. c语言如何求1到100的和?