1. 拷贝Amlogic的SourceCode

切换目录到  /home/roco/work/amlogic/SourceCode/mx0831-0525下将mx0831-0525.tgz拷贝到  /home/pyou/ 目录下,解压,生成mx0831-0525目录。此目录就是将来的工作目录。  tar.bz2 命令: tar -jxvf  *.tar.bz2

2. 配置环境变量

2.1 准备工作

切换目录到 /home/roco/work/amlogic/Document中,拷贝amlogic-tool.zip到 /home/pyou下解压生成 amlogic-tool目录

该目录下有以下3个压缩文件

1. arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

2. arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu1.tar.bz2

3. gnutools-arc2.3-p0-ubuntu-9.04-2010-5-10.tar.bz2

由于前面两个解压的目录相同,所以新建一个目录188,并将arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2移到188目录下,解压生成目录/amlogic-tool/188/arm-2010q

切换目录到/amlogic-tool,分别解压gnutools-arc2.3-p0-ubuntu-9.04-2010-5-10.tar.bz2文件和arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu1.tar.bz2 文件,生成目录/amlogic-tool/arm-2010q1和目录/amlogic-tool/opt

2.2 修改.bashrc 文件添加环境变量

切换目录到 /home/pyou目录下,使用ll命令查文件列表,然后使用vim命令修改.bashrc 文件,在该文件最后添加环境变量。如下所示:

PATH="$PATH:/home/pyou/amlogic-tool/188/arm-2010q1/bin:/home/pyou/amlogic-tool/arm-2010q1/bin:/home/pyou/amlogic-tool/opt/gnutools/arc2.3-p0/elf32-4.2.1/bin:/home/pyou/amlogic-tool/opt/gnutools/arc2.3-p0/uclibc-4.2.1/bin"


3. 编译u-boot

切换目录到~/mx0831-0525/uboot目录下

使用make help |grep roco 查看项目配置,查看命令列表,然后再命令列表中查找到make m6_roco_1212_config命令并使用该命令进行编译,编译完后再使用make命令进行编译,在~/mx0831-0525/uboot/build目录下会生成u-boot.bin文件

1. make m6_roco_1212_config

2. Make

3. cp build/u-boot.bin  ../device/other/TBDG1073

4. 编译项目

切换目录至~/mx0831-0525

4.1 使用source build/envsetup.sh命令

这个命令是用来将envsetup.sh里的所有用到的命令加载到环境变量里去,我们来分析下它。

envsetup.sh里的主要命令如下:

function help() # 显示帮助信息

function get_abs_build_var()# 获取绝对变量

function get_build_var()# 获取绝对变量

function check_product()# 检查product

function check_variant()# 检查变量

function setpaths()                # 设置文件路径

function printconfig()# 打印配置

function set_stuff_for_environment()        # 设置环境变量

function set_sequence_number()            # 设置序号

function settitle()                # 设置标题

function choosetype()               # 设置type

function chooseproduct()              # 设置product

function choosevariant()              # 设置variant

function tapas()                  # 功能同choosecombo

function choosecombo()               # 设置编译参数

function add_lunch_combo()             # 添加lunch项目

function print_lunch_menu()            # 打印lunch列表

function lunch()# 配置lunch

function m()# make from top

function findmakefile()              # 查找makefile

function mm()                   # make from current directory

function mmm()                   # make the supplied directories

function croot()# 回到根目录

function cproj()

function pid()

function systemstack()

function gdbclient()

function jgrep()# 查找java文件

function cgrep()                  # 查找c/cpp文件

function resgrep()

function tracedmdump()

function runhat()

function getbugreports()

function startviewserver()

function stopviewserver()

function isviewserverstarted()

function smoketest()

function runtest()

function godir () # 跳到指定目录 405

# add_lunch_combo函数被多次调用,就是它来添加Android编译选项

 # Clear this variable.  It will be built up again when the vendorsetup.sh

 406 # files are included at the end of this file.
 # 清空LUNCH_MENU_CHOICES变量,用来存在编译选项

 407 unset LUNCH_MENU_CHOICES

 408 function add_lunch_combo()   

 409 {

 410     local new_combo=$1         # 获得add_lunch_combo被调用时的参数

 411     local c

     # 依次遍历LUNCH_MENU_CHOICES里的值,其实该函数第一次调用时,该值为空

 412     for c in ${LUNCH_MENU_CHOICES[@]} ; do 

 413         if [ "$new_combo" = "$c" ] ; then    # 如果参数里的值已经存在于LUNCH_MENU_CHOICES变量里,则返回

 414             return

 415         fi

 416     done

     # 如果参数的值不存在,则添加到LUNCH_MENU_CHOICES变量里

 417     LUNCH_MENU_CHOICES=(${LUNCH_MENU_CHOICES[@]} $new_combo)

 418 }

# 这是系统自动增加了一个默认的编译项 generic-eng

 420 # add the default one here

 421 add_lunch_combo generic-eng    # 调用上面的add_lunch_combo函数,将generic-eng作为参数传递过去

 422 

 423 # if we're on linux, add the simulator.  There is a special case

 424 # in lunch to deal with the simulator

 425 if [ "$(uname)" = "Linux" ] ; then

 426     add_lunch_combo simulator

 427 fi

# 下面的代码很重要,它要从vendor目录下查找vendorsetup.sh文件,如果查到了,就加载它

1037 # Execute the contents of any vendorsetup.sh files we can find.

1038 for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/build/vendorsetup.sh 2> /dev/null`

1039 do

1040     echo "including $f"

1041    . $f       # 执行找到的脚本,其实里面就是厂商自己定义的编译选项

1042 done

1043 unset f

envsetup.sh其主要作用如下:

  1. 加载了编译时使用到的函数命令,如:help,lunch,m,mm,mmm等

  2. 添加了两个编译选项:generic-eng和simulator,这两个选项是系统默认选项

  3. 查找vendor/<-厂商目录>/和vendor/<厂商目录>/build/目录下的vendorsetup.sh,如果存在的话,加载执行它,添加厂商自己定义产品的编译选项

 其实,上述第3条是向编译系统添加了厂商自己定义产品的编译选项,里面的代码就是:add_lunch_combo xxx-xxx。

根据上面的内容,可以推测出,如果要想定义自己的产品编译项,简单的办法是直接在envsetup.sh最后,添加上add_lunch_combo myProduct-eng,当然这么做,不太符合上面代码最后的本意,我们还是老实的在vendor目录下创建自己公司名字,然后在公司目录下创建一个新的vendorsetup.sh,在里面添加上自己的产品编译项

#mkdir vendor/farsight/

#touch vendor/farsight/vendorsetup.sh

#echo "add_lunch_combo fs100-eng" > vendor/farsight/vendorsetup.sh

这样,当我们在执行source build/envsetup.sh命令的时候,可以在shell上看到下面的信息:

including vendor/farsight/vendorsetup.sh

4.2 使用lunch命令


按数字17,因为该项目是17对应的项目TBG1073-user 。

lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译项,来定义Product和编译过程中用到的全局变量。

我们一直没有说明前面的fs100-eng是什么意思,现在来说明下,fs100是我定义的产品的名字,eng是产品的编译类型,除了eng外,还有user, userdebug,分别表示:

eng: 工程机,

user:最终用户机

userdebug:调试测试机

tests:测试机

由此可见,除了eng和user外,另外两个一般不能交给最终用户的,记得m8出来的时候,先放出了一部分eng工程机,然后出来了user机之后,可以用工程机换。

那么这四个类型是干什么用的呢?其实,在main.mk里有说明,在Android的源码里,每一个目标(也可以看成工程)目录都有一个Android.mk的makefile,每个目标的Android.mk中有一个类型声明:LOCAL_MODULE_TAGS,这个TAGS就是用来指定,当前的目标编译完了属于哪个分类里。

PS:Android.mk和Linux里的makefile不太一样,它是Android编译系统自己定义的一个makefile来方便编译成:c,c++的动态、静态库或可执行程序,或java库或android的程序,

4.3 使用make custom1 命令

清除make clean

打补丁make custom1

打完补丁后记得执行以下命令

find . -name *.xml.orig | xargs rm

find . -name *.xml.reg | xargs rm

find . -name *.xml.rej | xargs rm

4.4 使用make otapackage –j8 命令

执行完该命令后会在out/target/product/TBDG1073/目录下生成一些zip升级压缩包,如:out/target/product/TBDG1073/TBDG1073-ota-20130708.v016.zip

生成的目标平台的相关的文件在out/target/product/board_name/中(board_name要与目标平台相匹配)。

目录或文件

描述

gxxref-ota-eng.[linux user name].zip

升级包

obj/

存放中间文件的目录

recovery/

recovery的rootfs目录,和ramdisk.img相对应

res-package.img

uboot使用的一些资源(充电图片等)

root/

正常启动的rootfs目录,和ramdisk-recovery.img相对应

symbols/

存放符号表的目录

system/

存放大多数目标文件的目录

u-boot.bin

uboot,就是自己项目目录下的uboot文件

boot.img

正常启动的镜像,

由header+kernel(uImage)+ramdisk.img构成

recovery.img

recovery模式启动的镜像,

由header+kernel(uImage)+ramdisk-recovery.img构成

==================================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址:http://blog.csdn.net/ouyang_peng

==================================================================================================


Android系统移植与调试之------->Amlogic方案编译步骤的更多相关文章

  1. [置顶] Android系统移植与调试之------->Amlogic方案编译步骤

    1. 拷贝Amlogic的SourceCode 切换目录到  /home/roco/work/amlogic/SourceCode/mx0831-0525下将mx0831-0525.tgz拷贝到  / ...

  2. Android系统移植与调试之------->MTK 标准编译命令

    命令格式:./maketek [option] [project] [action] [modules]Option:   -t ,-tee :输出log信息到当前终端   -o , -opt=-- ...

  3. [置顶] Android系统移植与调试之------->build.prop文件详细赏析

    小知识:什么是build.prop?   /system/build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件.这个文件是如 ...

  4. Android系统移植与调试之------->build.prop文件详细赏析

    小知识:什么是build.prop?   /system/build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件.这个文件是如 ...

  5. Android系统移植与调试之------->如何修改Android手机显示的4G信号强度的格子数

    在修改显示的信号强度之前,先了解一下什么是dB,什么是dBm? 1.dB dB是一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,没有单位,当考虑甲的功率相比于乙功率大或小多少个dB时, 按 ...

  6. Android系统移植与调试之------->build.prop生成过程分析

    本文简要分析一下build.prop是如何生成的.Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编 ...

  7. Android系统移植与调试之------->如何添加一个adb wifi无线调试的功能【开发者选项】-【Wifi调试】

    首先弄懂怎么设置adb wifi无线调试的功能,如下所示. 1. 手机端开启adb tcp连接端口 :/$setprop service.adb.tcp.port :/$stop adbd :/$st ...

  8. Android系统移植与调试之------->如何修改Android系统默认显示【开发者选项】并默认打开【USB调试】和【未知来源】开关

    今天有个用户对[设置]有个特殊的要求,即: 1.开机的时候默认显示[开发者选项]并打开[USB调试]开关    ([Developer options]-->[USB debugging]) 2 ...

  9. Android系统移植与调试之------->如何修改开机动画的两种方式剖析

    首先,我们先来分析一下源码: frameworks/base/cmds/bootanimation/BootAnimation.cpp 首先看一下定义的常量: BootAnimation::ready ...

随机推荐

  1. 自定义ios NSLog

    #ifdef DEBUG #define MyLog(FORMAT, ...) fprintf(stderr,"Time:%s\t File:%s\t Methods:%s\t Line:% ...

  2. .NET 环境中使用RabbitMQ RabbitMQ与Redis队列对比 RabbitMQ入门与使用篇

    .NET 环境中使用RabbitMQ   在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...

  3. C语言学习笔记(四) 流程控制

    流程控制 流程控制,说通俗一点就是程序代码执行的顺序.不管对于哪门语言来说,流程控制都是很重要的一部分内容: 流程控制的分类,可以分为三大类: 1.顺序 这个很好理解,顺序执行就是代码从上往下一行行的 ...

  4. Cocos2d-x 3.x版2048游戏开发

    Cocos2d-x 3.x版2048游戏开发 本篇博客给大家介绍怎样高速开发2048这样一款休闲游戏,理解整个2048游戏的开发流程.从本篇博客你将能够学习到下面内容: 这里注明一下,本教程来自极客学 ...

  5. Verilog HDL test bench 문법에 관한

    16bit ripple carry adder test bench `timescale 1ns/1ns module testbench2; reg [15:0] a, [15:0] b, c_ ...

  6. android studio- java注释自己动手弄起来

    今天写段子...程序段子.突然觉得AS默认的注释太简洁,不适合自己.于是,自己琢磨半天,大概知道了途径.结果,好好的一个coding之夜也无疾而终了...明天继续跟着包工头学搬砖. 注释设置途径: 1 ...

  7. Java Resource路径小结

    首先一点很重要,Java中不存在标准的相对路径,各种相对路径取资源的方式都是基于某种规则转化为绝对路劲 然后一点也很重要,绝对不要直接使用绝对路径,否则死得很难看 基于以上两点,总结Resource路 ...

  8. ext2文件系统了解

    一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息.下以ext2文件系统为例说明文件 ...

  9. 2017-5-14 湘潭市赛 Strange Optimization

    Strange Optimization Accepted : Submit : Time Limit : MS Memory Limit : KB Strange Optimization Bobo ...

  10. Swift 开源 Linux Ubuntu Install

    Swift 开源了,它现在变成跨平台的了,开源后的 Swift 不止能运行在 MAC 和 iOS 平台,现在也可以运行在 Linux 平台了.swift.org 网站上面提供了在 Linux 上面安装 ...