[置顶] Android系统移植与调试之------->Amlogic方案编译步骤
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构成 |
[置顶] Android系统移植与调试之------->Amlogic方案编译步骤的更多相关文章
- Android系统移植与调试之------->Amlogic方案编译步骤
1. 拷贝Amlogic的SourceCode 切换目录到 /home/roco/work/amlogic/SourceCode/mx0831-0525下将mx0831-0525.tgz拷贝到 / ...
- [置顶] Android系统移植与调试之------->build.prop文件详细赏析
小知识:什么是build.prop? /system/build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件.这个文件是如 ...
- [置顶] Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示
这两天由于一个客户的要求,将MID竖屏时候的状态条上的音量键去掉.所以尝试修改了一下,成功了,分享一下经验. 先看一下修改后的效果图,如下所示 . 横屏的时候:有音量加减键 竖屏的时候:音量加减键被去 ...
- [置顶] Android系统移植与调试之------->如何修改Android设备添加3G上网功能
1.首先先来看一下修改前后的效果对比图 step1.插上3G设备前 step2.插上3G设备后,获取信号中.... step3.插上3G设备后,获取到信号 step4.使用3G信号浏览网页 2.下面讲 ...
- Android系统移植与调试之------->MTK 标准编译命令
命令格式:./maketek [option] [project] [action] [modules]Option: -t ,-tee :输出log信息到当前终端 -o , -opt=-- ...
- [置顶] Android系统五大布局详解Layout
我们知道Android系统应用程序一般是由多个Activity组成,而这些Activity以视图的形式展现在我们面前,视图都是由一个一个的组件构成的.组件就是我们常见的Button.TextEdit等 ...
- [置顶] Android系统访问控制之Smack安全策略设计与实现
1. 制定smack规则 “Zygote”进程由init进程创建,它负责创建系统服务进程“systemserver”.“radio”进程和APP进程.其中“radio”进程的uid是1001,它能够实 ...
- [置顶] android系统如何在静音模式下关闭camera拍照声音(2)
之前写过一篇“android系统如何在静音模式下关闭camera拍照声音”的博客,今天来写他的续篇,继续探讨这个问题. 公司新需求,要求在camera应用中添加一个开关,可以进行拍照声音的关闭和开启. ...
- Android系统移植与调试之------->如何修改Android手机显示的4G信号强度的格子数
在修改显示的信号强度之前,先了解一下什么是dB,什么是dBm? 1.dB dB是一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,没有单位,当考虑甲的功率相比于乙功率大或小多少个dB时, 按 ...
随机推荐
- JavasScript实现调查问卷插件
原文:JavasScript实现调查问卷插件 鄙人屌丝程序猿一枚,闲来无事,想尝试攻城师是感觉,于是乎搞了点小玩意.用js实现调查问卷,实现了常规的题型,单选,多选,排序,填空,矩阵等. 遂开源贴出来 ...
- JQ优化性能
一.注意定义jQuery变量的时候添加var关键字这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:$loading = $('#loading'); / ...
- 在VS下用C语言连接SQLServer2008
原文:在VS下用C语言连接SQLServer2008 step1:启动SQLSERVER服务 step2:打建立数据库test,在test库中建立test表(a varchar(200),b varc ...
- Installshield脚本拷贝文件常见问题汇总
原文:Installshield脚本拷贝文件常见问题汇总 很多朋友经常来问:为什么我用CopyFile/XCopyFile函数拷贝文件无效?引起这种情况的原因有很多,今天略微总结了一下,欢迎各位朋友跟 ...
- 一个只能用在Win下的密码验证函数(显示星号,可删除)
以前做小程序时图好玩在网上找的代码.输入的密码会以星号显示出来,并且输入错了可以删除.因为用了专有库函数,所以只能在Windows平台使用,少用为好,不过可能还有点用.嗯…就这样了 #include ...
- poj3744高速功率矩阵+可能性DP
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4410 Accepted: 1151 Descr ...
- Crystal Report 在 VS 2010 中的使用和发布
原文:Crystal Report 在 VS 2010 中的使用和发布 使用: 打开CrystalReport官网下载页 目前最新版本为13.0.4 选择“SAP Crystal Reports, v ...
- 使用Windows2003创建AD服务器 - 进阶者系列 - 学习者系列文章
Windows 2003的AD功能不是很强,但是还是提供了不错的功能.下面简要介绍下Windows 2003的AD配置说明. 1. 从添加删除Windows组件安装AD功能项 2. 完成安装.这里 ...
- SSMS2008插件开发(3)--部署调试SSMS2008插件
原文:SSMS2008插件开发(3)--部署调试SSMS2008插件 上一次说到VS2008中的插件开发,最终结果插件是部署在VS2008中,现在我们将插件部署到SSMS2008(Microsoft ...
- log4net项目中如何配置,以下详解
log4net.config配置文件 <?xml version="1.0" encoding="utf-8"?> <log4net debu ...