Lichee(三) Android4.0该产品的目标文件夹,Lichee链接---extract-bsp
小贴士:
1、vmlinux 编译出来的最原始的内核文件,未压缩。
2、zImage 是vmlinux经过gzip压缩后的文件。
3、bzImage
bz表示“big zImage”,不是用bzip2压缩的。
两者的不同之处在于。zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。假设内核比較小,那么採用zImage或bzImage都行,假设比較大应该用bzImage。
4、uImage
U-boot专用的映像文件。它是在zImage之前加上一个长度为0x40的tag。
5、vmlinuz 是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
6、initrd 是“initial
ramdisk”的简写。
一般被用来暂时的引导硬件到实际内核vmlinuz可以接管并继续引导的状态
在sun4i_crane平台下的编译》一文中有益没有展开。首先本文还是沿着Lichee这条主线去探讨与Lichee相关的Android编译的过程,具体的Android编译的原理将在以后讨论。
source build/envsetup.sh
lunch 9
extract-bsp
make -j8
- 一、 创建目标产品文件夹
这就是我们自己创建的
add_lunch_combo crane_mt7332-eng
xxx-user xxx-userdebug等这样的格式来命名。crane代表的是全志A10中的Android的项目
小贴士:
* Installs modules tagged with: eng, debug, user, and/or development.
* Installs non-APK modules that have no tags specified.
* Installs APKs according to the product definition files, in addition to tagged APKs.
* ro.secure=0
* ro.debuggable=1
* ro.kernel.android.checkjni=1
* adb is enabled by default.
* Setupwizard is optional
user make user
This is the flavor intended to be the final release bits.
* Installs modules tagged with user.
* Installs non-APK modules that have no tags specified.
* Installs APKs according to the product definition files; tags are ignored for APK modules.
* ro.secure=1
* ro.debuggable=0
* adb is disabled by default.
* Enable dex pre-optimization for all TARGET projects in default to speed up device first boot-up
userdebug make userdebug
The same as user, except:
* Also installs modules tagged with debug.
* ro.debuggable=1
* adb is enabled by default.
- 二、指定目标产品(target product)
source build/envsetup.sh
lunch
小贴士:
source在当前bash环境下运行命令。而scripts是启动一个子shell来运行命令。这样假设把环境变量设置(或alias等等)的命令写进scripts中,就仅仅会影响子shell,无法改变当前的BASH,所以通过文件(命令列)环境变量设置时,要用source 命令。build/envsetup.sh脚本的工作最主要就是要环境变量设置,所以必须带source
这2条命令看似简单,事实上蕴含着极大的智慧。
它能够让Android独立于不同的架构、不同的处理器、不同的屏幕尺寸和朝向、不同的外设驱动等等。始终就是一套代码,所以编译Android之前必需要选择到底编译的是哪一款目标产品。
function print_lunch_menu() # 打印lunch列表
function lunch() # 配置lunch,选择目标产品
function m() # Android根文件夹编译, 必须在lunch之后才干使用,用的较少,由于在根文件夹下编译一般使用make
function findmakefile() # 查找makefile
function mm() # 编译当前文件夹下的Android.mk。 必须在lunch之后才干使用,使用方法演示样例 cd packages/apps/Music && mm
function mmm() # 编译指定文件夹下Android.mk。 必须在lunch之后才干使用 mmm packages/apps/Music 等用于 cd packages/apps/Music && mm
function lunch()
{
local answer
#假设你明白地知道lunch后的结果能够直接lunch $1 $1代表目标产品的编号 比方我通常就是使用lunch 9
if [ "$1" ] ; then
answer=$1
else
# 假设不知道是第几个,就调用print_lunch_menu,打印出全部的目标产品。然后read你的输入
print_lunch_menu
echo -n "Which would you like? [full-eng] "
read answer
fi local selection= if [ -z "$answer" ]
then
selection=full-eng
#假设lunch后有输入。仅仅接受前2个字符的数字。忽略后面的字符
elif (echo -n $answer | grep -q -e "^[0-9][0-9]*$")
then
if [ $answer -le ${#LUNCH_MENU_CHOICES[@]} ]
then
selection=${LUNCH_MENU_CHOICES[$(($answer-1))]}
fi
# 正則表達式 ^[^\-][^\-]*-[^\-][^\-]*$ 表示 字符串中间仅仅能有一个字符'-' 比如 a-b符合条件, 而-a-b , a-b- a--b这些都不符合条件
elif (echo -n $answer | grep -q -e "^[^\-][^\-]*-[^\-][^\-]*$")
then
selection=$answer
fi #选择是无效字符
if [ -z "$selection" ]
then
echo
echo "Invalid lunch combo: $answer"
return 1
fi export TARGET_BUILD_APPS=
# sed -e "s/-.*$//") 是将字符'-'后面的都去掉。剩下前面的内容, 演示样例:crane_mt7332-eng 通过 sed -e "s/-.*$//"后。变成了crane_mt7332
local product=$(echo -n $selection | sed -e "s/-.*$//")
check_product $product
if [ $? -ne 0 ]
then
echo
echo "** Don't have a product spec for: '$product'"
echo "** Do you have the right repo manifest?"
product=
fi
# sed -e "s/^[^\-]*-// 表示将字符 '-'之前的内容都去掉,仅仅剩下后面的编译版本号,演示样例:crane_mt7332-eng 通过 sed -e "s/-.*$//"后。变成了eng
local variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")
check_variant $variant
if [ $? -ne 0 ]
then
echo
echo "** Invalid variant: '$variant'"
echo "** Must be one of ${VARIANT_CHOICES[@]}"
variant=
fi if [ -z "$product" -o -z "$variant" ]
then
echo
return 1
fi
# 将获取的目标产品,VARIANT和类型写入到环境变量
export TARGET_PRODUCT=$product
export TARGET_BUILD_VARIANT=$variant
export TARGET_BUILD_TYPE=release echo set_stuff_for_environment
printconfig
}
实际步骤例如以下:
$ source build/envsetup.sh
- 三、 extract-bsp
extract-bsp是一个脚本函数,在device/softwinner/common/vendorsetup.sh 他也是在lunch的时候被运行的,也就是说假设先不运行lunch 。extract-bsp是无效的
让我们来看看extract-bsp
function lunch()
{
local answer
#假设你明白地知道lunch后的结果能够直接lunch $1 $1代表目标产品的编号 比方我通常就是使用lunch 9
if [ "$1" ] ; then
answer=$1
else
# 假设不知道是第几个。就调用print_lunch_menu,打印出全部的目标产品。然后read你的输入
print_lunch_menu
echo -n "Which would you like? [full-eng] "
read answer
fi local selection= if [ -z "$answer" ]
then
selection=full-eng
#假设lunch后有输入,仅仅接受前2个字符的数字。忽略后面的字符
elif (echo -n $answer | grep -q -e "^[0-9][0-9]*$")
then
if [ $answer -le ${#LUNCH_MENU_CHOICES[@]} ]
then
selection=${LUNCH_MENU_CHOICES[$(($answer-1))]}
fi
# 正則表達式 ^[^\-][^\-]*-[^\-][^\-]*$ 表示 字符串中间仅仅能有一个字符'-' 比如 a-b符合条件, 而-a-b , a-b- a--b这些都不符合条件
elif (echo -n $answer | grep -q -e "^[^\-][^\-]*-[^\-][^\-]*$")
then
selection=$answer
fi #选择是无效字符
if [ -z "$selection" ]
then
echo
echo "Invalid lunch combo: $answer"
return 1
fi export TARGET_BUILD_APPS=
# sed -e "s/-.*$//") 是将字符'-'后面的都去掉,剩下前面的内容。 演示样例:crane_mt7332-eng 通过 sed -e "s/-.*$//"后,变成了crane_mt7332
local product=$(echo -n $selection | sed -e "s/-.*$//")
check_product $product
if [ $? -ne 0 ]
then
echo
echo "** Don't have a product spec for: '$product'"
echo "** Do you have the right repo manifest?"
product=
fi
# sed -e "s/^[^\-]*-// 表示将字符 '-'之前的内容都去掉。仅仅剩下后面的编译版本号,演示样例:crane_mt7332-eng 通过 sed -e "s/-.*$//"后,变成了eng
local variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")
check_variant $variant
if [ $? -ne 0 ]
then
echo
echo "** Invalid variant: '$variant'"
echo "** Must be one of ${VARIANT_CHOICES[@]}"
variant=
fi if [ -z "$product" -o -z "$variant" ]
then
echo
return 1
fi
# 将获取的目标产品,VARIANT和类型写入到环境变量
export TARGET_PRODUCT=$product
export TARGET_BUILD_VARIANT=$variant
export TARGET_BUILD_TYPE=release echo set_stuff_for_environment
printconfig
}
总的来说,经行分析extract-bsp脚本发现。事实上就是将lichee编译的结果输出到device/softwinner/vendor文件夹下,事实上这个过程是为了android的编译在做准备。而Android的编译过程很复杂,由于我们是要沿着Lichee这条主线继续走下去,可是不正确Android的编译过程以及目标产品的概念进行简单地分析,又不能充分了解到function extract-bsp()这个函数的用处。实际上本文的真正用意就是要了解extract-bsp的过程和背景,这个函数也是联系Lichee和Android之间的纽带。本文在这个系列中第一次提到了Android
BSP相关的知识,可能理解起来就有点困难了。Android的BSP是后面的重中之重,到时候可能还会花大力气分析本文已经提到的一某些内容(例如,创建目标文件夹),在这里,我们简单地接管。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Lichee(三) Android4.0该产品的目标文件夹,Lichee链接---extract-bsp的更多相关文章
- 【HDFS API编程】查看目标文件夹下的所有文件、递归查看目标文件夹下的所有文件
使用hadoop命令:hadoop fs -ls /hdfsapi/test 我们能够查看HDFS文件系统/hdfsapi/test目录下的所有文件信息 那么使用代码怎么写呢?直接先上代码:(这之后 ...
- 根据txt中的文件名将文件复制到目标文件夹中
功能如标题,之所以这么做是有的时候文件数目较多,一个一个复制太复杂了,代码如下: # -*- coding:utf-8 -*- #2018_03_18 #实现功能:根据文件名字将对应的文件复制到目标地 ...
- ubuntu去除带锁文件的锁 sudo chown 用户名 目标文件夹/ -R
sudo chown 用户名 目标文件夹/ -R sudo chown han dir/ -R
- 【操作系统作业—lab1】linux shell脚本 遍历目标文件夹和所有文件 | 包括特殊字符文件名的处理
要求:写一个linux bash脚本来查看目标文件夹下所有的file和directory,并且打印出他们的绝对路径. 运行command:./myDir.sh input_path output_ ...
- .net网站上传图片换电脑不显示 当不用网站的IP地址访问图片,只用相对路径访问时,在发布网站的时候,将上传图片的目标文件夹,包含在项目中再发布即可。
.net网站上传图片换电脑不显示 当不用网站的IP地址访问图片,只用相对路径访问时,在发布网站的时候,将上传图片的目标文件夹,包含在项目中再发布即可.
- C# 1.将整个文件夹复制到目标文件夹中 2.将指定文件复制到指定目标文件夹中
].Items.Clear(); string filePath = Application.StartupPath; string sourcePath = Path.Combine(filePat ...
- 【转载】C#指定文件夹下面的所有内容复制到目标文件夹下面
在涉及到文件夹操作的过程中,有时候需要将文件夹下的所有内容复制拷贝到另一个文件夹,在C#的开发中有时候会遇到这个功能需求将指定文件夹下所有的内容复制到另一个文件夹,这个过程需要遍历所有的文件和目录.此 ...
- 使用mac 终端 用sublime 目标文件或目标文件夹
首先,打开终端 执行命令 vim ~/.bash_profile在.bash_profile里输入以下命令alias subl="'/Applications/Sublime Text.ap ...
- centos 7.0 查看根目录下所有文件夹
centos 7.0最小化安装 第一行是登录 [root@localhost ~]# [root@localhost ~]# cd ../ [root@localhost /]# ls bin dev ...
随机推荐
- 6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化
1组函数 avg(),sum(),max(),min(),count()案例: selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from ...
- openstack之nova-api服务流程分析
nova-api公布api服务没实用到一个些框架,基本都是从头写的.在不了解它时,以为它很复杂,难以掌握.花了两三天的时间把它分析一遍后,发现它本身的结构比較简单,主要难点在于对它所使用的一些类库不了 ...
- MyEclipse中“擅自乱改”项目名导致项目报错的处理
最近几天培训的过程中,经常有同学手一抖,默默的修改了本来配置部署好的项目名,导致项目报错…… 遇到这种事情,我一般会做的处理就是重新新建项目,然后把包和各种文件ctrl+c ctrl+v,遇到项目小还 ...
- 辛星一起了解下后续PHP性能功能
关于第一个发言,这篇文章是我的原创.但,这些数据不被总结出来我,你可以搜索下"百度project师HDK",这些数据提供了他,我只是给一个总结.因为他很长的文章,我在这里提炼几点. ...
- 行人检测(Pedestrian Detection)资源整合
一.纸 评论文章分类: [1] D. Geronimo, and A. M.Lopez. Vision-based Pedestrian Protection Systems for Intellig ...
- 通常编译亲测56Y国际象棋源代码,精仿56Y国际象棋完整的源代码下载!
今天公布亲测通常应编译56Y国际象棋源代码,精仿56Y牌源代码.喜欢的能够拿去研究.论坛资源太多.我们会把好的资源都公布出来,同一时候欢迎很多其它的程序猿增加我们! 增加我们的共同学习交流! ...
- SQL注入问题
斌斌 (给我写信) 原创博文(http://blog.csdn.net/binbinxyz),转载请注明出处! 背景:对于ibaits参数引用可以使用#和$两种写法,其中#写法会采用预编译方式,将转义 ...
- MySQL初步研究数据库
我用的是环境Win7.开始学习PHP和MySQL,而买了这<Head First PHP & MySQL>,从能Head First Labs官网获得HeadFirst系列书籍的相 ...
- java自学者的福音
谈到自学对于程序员来说并不陌生,自从我们离开校门就开始了自学之路.这一路上绝大部分都是 百步止于九十 步, 不是因为他们不够坚持,而是没有找到学习的方法和资源.当然这一路上我也走得很辛苦,刚毕业后自学 ...
- java战斗系列-战斗MAVENPW结构
实战中MAVEN私服的搭建 利用maven来管理项目的构建,报告和文档已经成为了我们如今的共识,不论什么开源软件基本都在使用,当然我们如今的大部分公司也基本都在使用,我把曾经使用maven的一些经 ...