android系统移植之概述

本篇文章主要介绍了"android系统移植之概述",主要涉及到android系统移植之概述方面的内容,对于android系统移植之概述感兴趣的同学可以参考一下。

1. 概述
移植工作一般的主要不外乎做以下这些事情:
A、有的现成好的直接选配
这个工作主要是熟悉该源码的编译系统,就是源码自动化编译是怎么组织的。linux环境下不外乎是Makefile及脚本。所以得熟悉这两个方面的知识。
B、有的不好的代码修改好后选配
这个工作不仅仅是要熟悉编译系统,还要熟悉别人的代码结构。一般牛X的软件架构也牛X,所以主要是学习牛X的人设计的代码结构,所谓的框架。框架懂了,再熟悉里面的细节,就可以改了。
C、添加新代码并选配
这个工作同样要熟悉编译系统及源码结构。这个时候对框架可能不能仅仅限于知道,而且要深刻理解,按照牛人的思路来设计代码。

所以android的移植就可以简单的说成有以下方面的工作:
A、熟悉android的编译系统
主要是.mk文件的规则,这个官网及源码中有文档说明(development/Ndk/Docs/android-mk.txt),得好好研究清楚。就源码中的脚本,譬如:build/envsetup.sh
B、熟悉android的源码目录结构
system:根文件系统相关的一些代码
packages:android的一些APP的源码
frameworks:framework层代码,不改动android源码的话,主要就是app层调用hal层代码的接口实现的源码
hardware:hal层代码
devices和vendor:厂商定制代码
build:编译系统的一些mk文件
out:是编译输出目录
主要的一些目录就是上面了,对于初学的话,差不多就足够了。当然所有的都熟悉是最好了。
C、三个层次的代码
要向android添加代码的话,一般主要熟悉三个层次的代码就差不多了。
APP<--->framework<--->HAL
APP:应用程序层次,主要是java代码,通过跨平台的java编写的代码来完成需求逻辑对系统提出功能性要求,让系统去完成相应的动作。
framework:cpp代码,主要是提供给java调用的接口,这些接口通常是去调用到hal层的代码。
HAL:登记一组供framework回调的函数,来完成一定的功能。

2. 厂商代码定制
公司目录——demo
设备目录——demopad
(1)创建目录
device/demo
device/demo/demoPad
OR
vendor/demo
vendor/demo/demoPad
(2)mk文件编写
这个比较复杂一点,但是简单地说:找到mk中的一些定义的变量,要选择要编译什么?怎么编译?或是要拷贝什么?怎么拷贝?等等方面的问题。简而言之就是熟悉mk规则。
①厂商配置
A、AndroidBoard.mk范例:
LOCAL_PATH := $(call my-dir) #指定本地编译目录
②产品配置
A、AndroidProducts.mk内容范例:
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/demoPad.mk #指定demoPad.mk为产品定制的Makefile
③demoPad.mk内容范例:
$(call inherit-product, device/.../xxx.mk) #指把xxx.mk中的变量添加进来

DEVICE_PACKAGE_OVERLAYS := device/.../overlay #指定目录下的资源替换系统的资源

PRODUCT_COPY_FILES += \ #指定拷贝内容:源——>目标
source_path:destination_path

PRODUCT_PROPERTY_OVERRIDES += \ #
key=value

PRODUCT_PACKAGES += \ #定制软件
xxx

$(call inherit-product-if-exists, device/.../xxx.mk)#指把xxx.mk(xxx.mk要存在)中的变量添加进来

PRODUCT_CHARACTERISTICS := tablet #产品特性——平板

# Overrides
PRODUCT_BRAND := demo
PRODUCT_NAME := demoPad #要编译的产品名称选项的前缀一致
PRODUCT_DEVICE := demoPad #要编译的设备目录一致
PRODUCT_MODEL := demo

(3)设备配置
BoardConfig.mk范例:
include device/.../xxx.mk #包含xxx.mk中的定义
TARGET_CPU_ABI := armeabi-v7a#指定cpu
TARGET_CPU_ABI2 := armeabi #支持eabi
TARGET_ARCH_VARIANT := armv7-a-neon 
ARCH_ARM_HAVE_TLS_REGISTER := true

TARGET_BOARD_PLATFORM := exDroid
TARGET_BOOTLOADER_BOARD_NAME := demoPad
......

3. 编译步骤
(1)环境搭建
主要是安装java SDK和一些支持库(应用程序移植就是麻烦,往往需要一堆支持环境,不像内核或是u-boot这样的底层代码,仅仅要自己的代码,不需要其他支持)。这个到官网看下就知道了,官网有详细的说明。不过直接照着官网的做,有可能也会有点小问题。譬如android4.0需要ubuntu 64bits环境及gcc要是4.4版本的。那么相应的库安装就g++-multilib就不对,需要是g++-4.4-multilib。这样的问题,只能在编译出错后才能够知道。详见:http://source.android.com/source/initializing.html
(2)配置java到环境变量
# export PATH=$PWD/jdk-xxx/bin:$PATH
# export CLASSPATH=$PWD/jdk-xxx/lib
其中jdk-xxx指的是java SDK安装好后的目录名
(3)编译
生成一个vendorsetup.sh脚本
# touch device/demo/demoPad/vendorsetup.sh
把add_lunch_combo demoPad-eng添加到vendorsetup.sh中
add_lunch_combo是build/envsetup.sh脚本的一个函数,其功能是生成一个选项,即可以选择编译我们定制的厂商目录下的东西
# echo "add_lunch_combo demoPad-eng" > device/demo/demoPad/vendorsetup.sh
导出build/envsetup.sh脚本中的函数
# source build/envsetup.sh
选择我们定制厂商目录,以便定制编译
# lunch demoPad-eng
拷贝内核
# extract-bsp
编译,这里可以加-j2这样的参数,意思是可以多线程编译,这个根据你的机器来。
# make
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[14本经典Android开发教程]-11-Android系统移植技术详解 -------------------------------------------------- (1)安装如下软件包 sudo apt-get install git-core sudo apt-get install gnupg sudo apt-get install sun-java5-jdk sudo apt-get install flex sudo apt-get install bison sudo apt-get install gperf sudo apt-get install libsdl-dev sudo apt-get install libesd0-dev sudo apt-get install build-essential sudo apt-get install zip sudo apt-get install curl sudo apt-get install libncurses5-dev sudo apt-get install zlib1g-dev .... -------------------------------------------------- 已上传9本: [14本经典Android开发教程]-1-Android开发从入门到精通 http://download.csdn.net/detail/cleopard/8355245 [14本经典Android开发教程]-2-Android开发手册—API函数详解 http://download.csdn.net/detail/cleopard/8374487 [14本经典Android开发教程]-3-Android SDK 中文开发文档 http://download.csdn.net/detail/cleopard/8380429 [14本经典Android开发教程]-4-Android应用程序开发36技 http://download.csdn.net/detail/cleopard/8380495 [14本经典Android开发教程]-5-linux Android基础知识总结 http://download.csdn.net/detail/cleopard/8380529 [14本经典Android开发教程]-6-Android驱动开发入门及手机案例开发分析教程 http://download.csdn.net/detail/cleopard/8388019 ....... 剩余3本稍后上传!@或直接从这里寻找@ http://download.csdn.net/user/cleopard/album @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com 17份软件测试文档 http://download.csdn.net/album/detail/1425 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#桌面编程入门篇] http://download.csdn.net/album/detail/957 C#资料合辑一[C#入门篇] http://download.csdn.net/album/detail/669 [Csharp高级编程(第6版)](共8压缩卷) http://download.csdn.net/album/detail/667 10个[精品资源]Java学习资料合辑[一] http://download.csdn.net/album/detail/663 10个C#Socket编程代码示例 http://download.csdn.net/album/detail/631 6份GDI+程序设计资源整合[全零分] http://download.csdn.net/album/detail/625 2014年移动游戏行业数据分析 http://download.csdn.net/detail/cleopard/8340331 一文读懂2014年全球互联网广告新生态 http://download.csdn.net/detail/cleopard/8340303

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值