嵌入式linux 移植安卓,Android系统内核移植流程详解
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系统内核移植流程详解相关推荐
- android zygote启动流程,Android zygote启动流程详解
对zygote的理解 在Android系统中,zygote是一个native进程,是所有应用进程的父进程.而zygote则是Linux系统用户空间的第一个进程--init进程,通过fork的方式创建并 ...
- 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 ...
- Android App启动流程详解
前言:在之前的文章中已经写了apk的打包流程.安装流程,今天就是梳理一下apk系列的最后的流程--app启动流程.经过今天的梳理以后咱们就可以对apk包是怎么编译生成的.apk是怎么被安装到安卓手机的 ...
- 文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解
作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...
- 嵌入式 linux下proc目录下的文件详解
http://blog.csdn.net/skdkjzz/article/details/19566717 目录 ----------------- 0 序言 0.1 简介 0.2 责任 1 收集系统 ...
- android 事件派发流程详解
Android 5.0(Lollipop)事件输入系统(Input System) 2014-12-15 23 个评论 来源:世事难料,保持低调 收藏 我要投稿 其实Androi ...
- 《嵌入式 - 深入剖析STM32》STM32 启动流程详解(GCC)
开发环境: 处理器:STM32F103 GCC:10.3.1 对于我们常用的桌面操作系统而言,我们在开发应用时,并不关心系统的初始化,绝大多数应用程序是在操作系统运行后才开始运行的,操作系统已经提供了 ...
- Linux 创建文件系统及挂载文件系统流程详解(转)
作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...
- 移植uboot-分析uboot启动流程(详解)
本节总结: uboot启动流程如下: 1)设置CPU为管理模式 2)关看门狗 3)关中断 4)设置时钟频率 5)关mmu,初始化各个bank 6)进入board_init_f()函数 (初始化定时器, ...
最新文章
- springCloud全家桶
- JavaScript在离开页面是提示用户
- boost::hash_combine模块实现json哈希值的测试程序
- 2021阿里巴巴研发效能峰会来啦!
- 自制一个害羞的口罩,见人就闭嘴,戴着可以喝奶茶
- Qt工作笔记-QTableWidget设置委托(使用QStyledItemDelegate画3只小猪)
- 加分二叉树(洛谷-P1040)
- C++学习札记(1)
- zabbix分布式监控部署proxy安装
- 《linux核心应用命令速查》连载六:batch:在系统负载水平允许的时候执行命令
- 关于:在 Office 2021 中自定义模板
- 拼多多带货视频是什么?拼多多带货视频如何上传
- 常犇_武汉大学管理学院2019年工商管理硕士(MBA)第三批复试通知
- 关于js中的then()
- 2022年房地产市场趋势展望
- iOS生成gif图片
- 给新程序员的10条建议
- C语言循环输出能被3整除的数
- Google官方网络框架Volley实战——QQ吉凶测试,南无阿弥陀佛!
- ENVI5.3 影像数据辐射定标及大气校正实验处理-多光谱遥感数据
热门文章
- 【PRUNING FILTERS FOR EFFICIENT CONVNETS】半译笔记
- python turtle库画七彩蟒蛇_Python学习之turtle库和蟒蛇绘制程序
- 基于Anusplin对气象站点数据进行插值
- PowerPmac上位机开发C#(一)_组件安装与环境配置
- 入侵必学:SQL语句大全
- 电气simulink常用模块_【电气学习】电工入门的干货,都知道才算是合格的维修电工!...
- 【路径规划】OSQP曲线平滑 公式及代码
- 线性代数速览(一)行列式
- 别看!看就是不会!(拓展欧几里德求最小正数解)
- c语言如何求1到100的和?