`

Android系统移植(一)-让android系统在目标平台上运行起来

 
阅读更多

Android系统由于用的是linux内核,因此内核移植和嵌入式linux内核移植差异不大,过程如下:

(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初步移植工作已经完成,当然,系统还有很多问题,需要下一步继续修改。

总结: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目录下

分享到:
评论

相关推荐

    Android系统移植技术详解

    - **让Android系统在目标平台上运行**:这包括适配硬件平台,如CPU架构、内存管理、GPU驱动等,以及调整内核参数以确保系统启动。 - **按键移植**:移植Android系统时,需要将设备的按键驱动程序整合到系统中,...

    [14本经典Android开发教程]-11-Android系统移植技术详解

    Android系统移植技术是Android开发中的一个重要环节,它涉及到将Android操作系统适配到不同的硬件平台,以便在各种设备上运行。本文将重点解析Android系统移植的关键步骤和技术要点。 首先,进行Android系统移植...

    android 系统移植讲解

    Android系统移植是一个复杂而精细的过程,它涉及到操作系统内核、硬件驱动、用户界面...每个环节都需要细致入微的调整和优化,才能让Android系统在新的硬件平台上流畅运行。这个过程既是对技术的挑战,也是创新的机遇。

    Android系统移植

    Android系统移植是一个复杂而精细的过程,它涉及到操作系统层面的深度理解和硬件平台的适配工作。在本文中,我们将深入探讨Android系统移植的关键知识点,包括前期准备、内核移植、驱动程序开发、用户空间应用程序...

    深入浅出-Android系统移植与平台开发(2)_准备Android开发环境[收集].pdf

    根据提供的文件内容,本部分将围绕Android系统移植与平台开发的前期准备工作进行详细的知识点介绍。 首先,在准备Android开发环境之前,需要对Android系统的构建过程有所了解。Android系统的构建是基于Linux环境的...

    Android系统移植文档

    在IT领域,Android系统移植是一项复杂且至关重要的工作,它涉及到将Android操作系统适应不同的硬件平台,使其能够在各种设备上运行。这份"Android系统移植技术详解.pdf"文档将为我们揭示这一过程中的关键步骤和技术...

    android-移植调试-openMax多媒体引擎

    它是一个无授权费的、跨平台的应用程序接口(API),旨在为媒体加速组件提供跨操作系统和处理器硬件平台的可移植性。OpenMax的目标是简化多媒体编解码器和应用程序的开发、集成和编程过程。 **官方网站**: ``` ...

    android系统移植资料集锦

    综上所述,Android系统移植是一个涉及硬件、软件、驱动、权限管理等多个领域的复杂工程。通过深入学习和实践,可以掌握这一过程,为不同硬件平台提供定制化的Android体验。提供的压缩包“资料”可能包含了这些方面的...

    Android系统移植和驱动开发

    首先,Android系统移植涉及到将Android操作系统安装到不同的硬件平台上,如手机、平板电脑甚至智能设备。这一过程包括硬件适配、内核编译、Bootloader定制、HAL(硬件抽象层)编写等多个环节。理解这些步骤是进行...

    Android系统级深入开发——移植与调试 pdf

    1. **Android系统移植**:Android系统移植涉及到将Android操作系统安装到不同的硬件平台上,包括处理器架构适配(如ARM、x86)、驱动程序开发和优化、Bootloader配置等。开发者需要理解Android的HAL(硬件抽象层)和...

    Android NDK移植jpeg-turbo库

    Android NDK(Native Development Kit)是Google提供的一个工具集,允许开发者用C/C++编写原生代码,然后在Android平台上运行。为了在NDK环境中构建jpeg-turbo,我们需要准备以下步骤: 1. **配置环境**:确保已...

    android内核移植之我见

    Android系统移植(一)-让android系统在目标平台上运行起来 Android系统由于用的是linux内核,因此内核移植和嵌入式linux内核移植差异不大,过程如下: (1)移植boot-loader和linux2.6内核到目标平台上,让linux内核...

    dropbear移植到android9.0系统

    在Android 9.0(Pie)系统上移植Dropbear,能够为设备提供安全的远程访问和管理功能,使得开发者或者高级用户可以通过SSH协议进行远程控制和维护。 移植过程主要包括以下几个步骤: 1. **获取源代码**:首先,你...

    移植Gstreamer 和gst-rtsp-server到Android实例

    在Android平台上进行多媒体处理时,有时需要利用开源的Gstreamer框架和gst-rtsp-server来实现复杂的流媒体服务。Gstreamer是一个强大的、模块化的多媒体处理库,而gst-rtsp-server则提供了RTSP(Real Time Streaming...

    移植到 android 下的 ntfs-3g

    为了解决这一问题,开发者们将ntfs-3g驱动程序进行了移植,使其能够在Android平台上运行,极大地扩展了Android设备的数据兼容性。 ntfs-3g是一个开源的、完全读写NTFS文件系统的驱动程序,最初由Tuxera公司开发并...

    Android--开发--_Porting台湾 移植与研究实行.rar

    8. **测试**:移植完成后,进行全面的功能和性能测试至关重要,确保移植后的系统或应用在目标平台上稳定运行。 9. **法律与合规性**:移植到台湾市场,需要考虑当地的法律法规,如隐私保护、版权法等,确保产品符合...

    Android系统移植开发概述

    Android移植是指将Android系统适配到不同硬件平台的过程。这个过程涉及多个层面的技术细节: 1. **硬件抽象层(HAL)**:HAL位于Linux内核与Android框架之间,它的作用是对硬件进行抽象,为上层应用提供统一的接口...

    《Android系统级深入开发---移植与调试》2

    9. **性能优化**:移植不仅仅是让系统运行起来,还要考虑性能和稳定性。了解如何通过调整内核参数、优化驱动程序以及使用能耗管理策略来提升设备的性能和电池寿命。 10. **测试与验证**:移植完成后,需要进行详尽...

    i.MX51平台的Android系统移植.pdf

    在i.MX51平台上移植Android系统涉及以下关键步骤: 1. **获取源码**:首先,需要从Android开放源代码项目(AOSP)获取Android的源代码。 2. **源码裁剪**:根据目标平台的需求,对源码进行定制和裁剪,删除不适用的...

Global site tag (gtag.js) - Google Analytics