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可以接管并继续引导的状态
source build/envsetup.sh
lunch 9
extract-bsp
make -j8
- 一、 创建目标产品文件夹
add_lunch_combo crane_mt7332-eng
小贴士:
* 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 9if [ "$1" ] ; thenanswer=$1else# 假设不知道是第几个,就调用print_lunch_menu,打印出全部的目标产品。然后read你的输入print_lunch_menuecho -n "Which would you like? [full-eng] "read answerfilocal selection=if [ -z "$answer" ]thenselection=full-eng#假设lunch后有输入。仅仅接受前2个字符的数字。忽略后面的字符elif (echo -n $answer | grep -q -e "^[0-9][0-9]*$") thenif [ $answer -le ${#LUNCH_MENU_CHOICES[@]} ]thenselection=${LUNCH_MENU_CHOICES[$(($answer-1))]}fi
# 正則表達式 ^[^\-][^\-]*-[^\-][^\-]*$ 表示 字符串中间仅仅能有一个字符'-' 比如 a-b符合条件, 而-a-b , a-b- a--b这些都不符合条件elif (echo -n $answer | grep -q -e "^[^\-][^\-]*-[^\-][^\-]*$")thenselection=$answerfi#选择是无效字符if [ -z "$selection" ]thenechoecho "Invalid lunch combo: $answer"return 1fiexport TARGET_BUILD_APPS=# sed -e "s/-.*$//") 是将字符'-'后面的都去掉。剩下前面的内容, 演示样例:crane_mt7332-eng 通过 sed -e "s/-.*$//"后。变成了crane_mt7332local product=$(echo -n $selection | sed -e "s/-.*$//")check_product $productif [ $? -ne 0 ]thenechoecho "** 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/-.*$//"后。变成了englocal variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")check_variant $variantif [ $? -ne 0 ]thenechoecho "** Invalid variant: '$variant'"echo "** Must be one of ${VARIANT_CHOICES[@]}"variant=fiif [ -z "$product" -o -z "$variant" ]thenechoreturn 1fi# 将获取的目标产品,VARIANT和类型写入到环境变量export TARGET_PRODUCT=$productexport TARGET_BUILD_VARIANT=$variantexport TARGET_BUILD_TYPE=releaseechoset_stuff_for_environmentprintconfig
}
实际步骤例如以下:
$ 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 9if [ "$1" ] ; thenanswer=$1else# 假设不知道是第几个。就调用print_lunch_menu,打印出全部的目标产品。然后read你的输入print_lunch_menuecho -n "Which would you like? [full-eng] "read answerfilocal selection=if [ -z "$answer" ]thenselection=full-eng#假设lunch后有输入,仅仅接受前2个字符的数字。忽略后面的字符elif (echo -n $answer | grep -q -e "^[0-9][0-9]*$") thenif [ $answer -le ${#LUNCH_MENU_CHOICES[@]} ]thenselection=${LUNCH_MENU_CHOICES[$(($answer-1))]}fi
# 正則表達式 ^[^\-][^\-]*-[^\-][^\-]*$ 表示 字符串中间仅仅能有一个字符'-' 比如 a-b符合条件, 而-a-b , a-b- a--b这些都不符合条件elif (echo -n $answer | grep -q -e "^[^\-][^\-]*-[^\-][^\-]*$")thenselection=$answerfi#选择是无效字符if [ -z "$selection" ]thenechoecho "Invalid lunch combo: $answer"return 1fiexport TARGET_BUILD_APPS=# sed -e "s/-.*$//") 是将字符'-'后面的都去掉,剩下前面的内容。 演示样例:crane_mt7332-eng 通过 sed -e "s/-.*$//"后,变成了crane_mt7332local product=$(echo -n $selection | sed -e "s/-.*$//")check_product $productif [ $? -ne 0 ]thenechoecho "** 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/-.*$//"后,变成了englocal variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")check_variant $variantif [ $? -ne 0 ]thenechoecho "** Invalid variant: '$variant'"echo "** Must be one of ${VARIANT_CHOICES[@]}"variant=fiif [ -z "$product" -o -z "$variant" ]thenechoreturn 1fi# 将获取的目标产品,VARIANT和类型写入到环境变量export TARGET_PRODUCT=$productexport TARGET_BUILD_VARIANT=$variantexport TARGET_BUILD_TYPE=releaseechoset_stuff_for_environmentprintconfig
}
总的来说,经行分析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相关推荐
- Lichee(三) Android4.0的目标产品目录与Lichee的纽带---extract-bsp
通过<Lichee(二) 在sun4i_crane平台下的编译>介绍了编译lichee的基本情况,我们最终得到了编译后的结果如下: out/ ├── android │ ├── bIm ...
- vc2010+openCV1.0实现将指定目录下的所有jpg文件缩放后存放到目标文件夹
开发环境:winXP + vc2010 + OpenCV1.0 OpenCV1.0安装目录: D:\opensource\opencv1.0 源代码: /*功能:将指定目录下的所有JPG文件进行缩放后 ...
- 递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小
递归的一个典型应用就是遍历目标文件夹,把该文件夹下的所有文件和文件夹打印或显示出来,还可以递归计算目标文件夹的总大小. 1: class Program 2: { 3: static void Mai ...
- java怎么更改目标文件夹_java – IntelliJ无法同步目标文件夹中的更改
Linux Mint 13上的Intellij 12.0.4(build 123.169). 当我从命令行运行maven测试时,我可以在文件资源管理器中看到目标文件夹的更改内容,但在IntelliJ中 ...
- 根据txt中的文件名将文件复制到目标文件夹中
功能如标题,之所以这么做是有的时候文件数目较多,一个一个复制太复杂了,代码如下: # -*- coding:utf-8 -*- #2018_03_18 #实现功能:根据文件名字将对应的文件复制到目标地 ...
- shell脚本:遍历指定文件夹下.jar后缀的文件,并备份到目标文件夹
shell脚本:遍历指定文件夹下.jar后缀的文件,并备份到目标文件夹 批量备份源文件夹下的所有jar包 并用原名+日期时间重命名 过程如下: 创建一个sh文件: vim test.sh 按 i 进入 ...
- python编写代码实现文件的拷贝功能_python从一个文件夹自动拷贝文件到目标文件夹的代码...
这里为大家提供一个python操作文件的例子,实现功能:从一个文件夹自动拷贝文件到目标文件夹. 供python爱好者学习参考. 代码如下: # Filename: CopyPictures.py im ...
- python判断一个文件夹里面是否为空_Python碎片化学习教程 @8. 判断目标文件夹是否为空...
代码功能:判断目标文件夹是否为空 代码如下:import os # 导入负责处理操作系统相关事务的os模块 tar_dir = "D:\\666" # 指定目标文件夹 if l ...
- 使用多线程将多个变量导出到目标文件夹
使用多线程将多个变量导出到目标文件夹 工作需求:在处理海量数据时(数据库.数据文件等),单线程操作往往速度非常慢,为提高效率,可以使用多线程来处理. 这里做个记录,将多个变量使用多线程导入到目标文件夹 ...
最新文章
- 把「光」存储1小时,中科大新研究破世界纪录,保真度高达96.4% | Nature子刊
- Hive表路径修改和分区表数据加载命令
- 人工智能学习实战之路
- bootstrap insertrow始终插入到最后一行_HBase put命令:插入数据
- 3.2.3 OS之页面置换算法(最佳置换算法、先进先出置换算法、最近最久未使用置换算法、普通时钟置换算法、改造型时钟置换算法)
- 基于B/S模式的推送
- java 反射 new class_Java高级特性-反射:不写死在代码,还怎么 new 对象?
- c语言利用参数方程绘图,CG实验1-利用C语言图形函数绘图概要1.doc
- mysql5建函数报1064错误_Mysql创建表过程中报1064错误
- Next主题美化博客
- golang test测试使用
- 弘辽科技:淘宝改SKU图片会影响权重吗?
- 如何利用python盗qq_一个团队为了让我帮他提高流量,竟然盗我QQ,没办法,我只好帮他用python刷了刷流量!...
- 视频下载软件Annie的安装及使用
- 组合数学——插板模型
- 使用Python将Word表格嵌入Excel中!
- 水贝风机远程控制app
- 转载java基础总结大全(使用)
- 关于防火墙的这些问题,你知道多少?
- eclipse applet 解决java.lang.ClassNotFoundException: sun.applet.AppletViewer
热门文章
- 扬州市大学计算机专业录取分数线,“计算机网络技术”专业录取分数线
- 图片转字符 android,转字符图app下载-转字符图 安卓版v2.4-PC6安卓网
- Mysql常用词汇_mysql 数据库常用单词
- iis伪静态排除css_魔众系统伪静态规则怎么配
- 张仰彪第二排序法_C语言中的最常用的两种排序算法你知道吗?
- Java的注释(详细版)
- [微信小程序]实现一个自定义遮罩层组件(完整示例代码附效果图)
- 拜托,面试别再问我时间复杂度了!!!
- MYSQL体系结构-来自期刊
- 让资源管理器不显示最近常用文件夹