第一章 Android系统的编译和移植实例

这一章节主要介绍了Android系统的编译和移植技术,作为建立在Linux内核的基础上的Android操作系统,它的编译和移植不论在过程还是技术方面都和嵌入式Linux非常相似。

首先要准备一套可以正常运行Linux系统的一套开发版,需要在其移植Android系统,并能够正常运行。

移植的主要过程为:

1.下载Android Linux 内核

2.安装交叉工具链

3.移植Android Linux 内核支持的平台

4.安装Android SDK

5.获得Android 根文件系统

6.设置系统环境,完成Android 正常启动

具体步骤如下:

7.(1)移植boot-loader和linux2.6内核到目标平台上,让linux内核可以启动起来,基本的驱动允许正常。 此过程完全是嵌入式linux的开发,这里直接跳过。需要注意的是,由于android已经被linux官方开除,因此从 网站上(如http://www.kernel.org/)下载的最新linux内核源代码已经不包含android的专有驱动,因此建议 从google网上下下载Linux内核,android源代码浏览网站如下: http://android.git.kernel.org/ 从该网站上发现内核相关的包如下: kernel/common.git 通用android内核项目 kernel/experimental.git 实验性内核项目 kernel/linux-2.6.git 这个是标准的Linux内核,没有android的驱动 kernel/lk.git 微内核项目 kernel/msm.git 这个是高通msm7xxx系列芯片所用内核 kernel/omap.git kernel/tegra.git NVIDIA Tegra系列芯片所用内核 下载内核代码的方法如下: git clone git://android.git.kernel.org/kernel/common.git 下载完后用git branch -a查看所有git分支,结果如下:   android-2.6.27   origin/HEAD   origin/android-2.6.25   origin/android-2.6.27   origin/android-2.6.29   origin/android-2.6.32   origin/android-2.6.35   origin/android-2.6.36   origin/android-goldfish-2.6.27   origin/android-goldfish-2.6.29 然后切换到最新分支git checkout origin/android-2.6.36 (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=/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部分的代码,将     # Mount /system rw first to give the filesystem a chance to save a checkpoint     mount yaffs2 mtd@system /system     mount yaffs2 mtd@system /system ro remount     # We chown/chmod /data again so because mount is run as root + defaults     mount yaffs2 mtd@userdata /data nosuid nodev     chown system system /data     chmod 0771 /data 改成     # Mount /system rw first to give the filesystem a chance to save a checkpoint     mount ubifs ubi0_0 /system ro     # We chown/chmod /data again so because mount is run as root + defaults     mount ubifs ubi1_0 /data nosuid nodev     chown system system /data     chmod 0771 /data (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系统到一套EZ6410(基于S3C6410)硬件系统上的典型过程,虽然步骤比较简单,但是涉及的知识比较多,所以应该将上学期的所学知识好好复习一下。

http://www.cnblogs.com/Rain2017/

第一章 Android系统的编译和移植实例的更多相关文章

  1. 第一章 Android系统移植与驱动开发概述

    本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ...

  2. 第一章Android系统移植与驱动开发概述--读书笔记

    以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...

  3. Android深度探索HAL和驱动开发(卷1) 第一章 Android系统移植和驱动开发

    由于Android是基于Linux内核的,因此,Android和其他Linux系统的核心部分差异非常小.然而不同版本的Android使用的Linux内核的版本有细微的差异,所以不同Android驱动可 ...

  4. 第一章 Andorid系统移植与驱动开发概述 - 读书笔记

    Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...

  5. Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触

    第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...

  6. [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍

    注:为了看上去比较清晰这里只转载了中文 原地址:  [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍 本章将引导您完成安装和设置开发环境,然后你就可 ...

  7. ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门

    ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...

  8. Android进阶加密-第1章-Android系统架构-读书笔记

    第 1 章 Android 系统架构 1.1 Android 系统架构 Android 系统架构分为五层,从上到下依次是应用层.应用框架层.系统运行库层.硬件抽象层和 Linux 内核层. 应用层(S ...

  9. 高通MSM8255 GPS 调试分析&&Android系统之Broadcom GPS 移植【转】

    本文转载自:http://blog.csdn.net/gabbzang/article/details/12063031 http://blog.csdn.NET/dwyane_zhang/artic ...

随机推荐

  1. django的RestFramework模块的源码分析

    一.APIView源码分析 查看源码的前提要知道,找函数方法必须先在自己的类中找,没有再往父类找,一层一层网上找,不能直接按ctrl点击 在我们自己定义的类中没有as_view方法的函数,所以肯定是继 ...

  2. c++ sort

    老是搞混 return bool eg. bool cmp(node a,node b) { if (a.score==b.score) ; else return a.score>b.scor ...

  3. 2019阿里校招测评题,光明小学完全图最短路径问题(python实现)

    题目:光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么?光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连.光 ...

  4. echarts图Y周坐标轴文字过长的解决方案

    解决方案  只贴出关键代码 在翻看echarts文档的过程中我看到了坐标轴文字可以自行定义模板,于是想到了我给一个固定12的字数限制,超出部分以省略号代替,这样就不会造成图形范围忽大忽小了. axis ...

  5. Unity 光照着色器

    光照着色器需要考虑光照的分类,一般分为漫反射和镜面反射. 漫反射计算基本光照: float brightness=dot(normal,lightDir)    将法线和光的入射方向进行点积运算,求出 ...

  6. 剑指Offer_编程题_3

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(i ...

  7. 6-(基础入门篇)学会编译lua固件,固件的合成

    http://www.cnblogs.com/yangfengwu/p/9336274.html 基础教程源码链接请在淘宝介绍中下载,由于链接很容易失效,如果失效请联系卖家,谢谢 https://it ...

  8. Elastic Stack之Redis集群使用

    Elastic Stack之Redis集群使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客数据流走向:FileBeat ===>Redis  ===>lo ...

  9. Elastic Stack之搜索引擎基础

    Elastic Stack之搜索引擎基础 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.搜索引擎概述 1>.什么是搜索引擎 搜索引擎(Search Engine)是指根 ...

  10. passat QA / error code 20190210

    s 帕萨特B5 技术资料下载 https://pan.baidu.com/s/1KXYly7eGDUSI5QiLcz8fiQ 提取码: 1i7u 星期日,10,二月,2019,17:16:16:317 ...