浅谈编译高通android5.1源代码

为什么会编译高通5.1源代码,原因很简单,因为公司做高通平台的手机,所以有必要编译下

Linux基础学习篇

1.常用指令

ls 显示文件或目录

–l  列出文件详细信息

l(list)   –a   列出当前目录下所有文件及目录,包括隐藏的a(all)

mkdir 创建目录

-p 创建目录,若无父目录,则创建p(parent)

  • cd 切换目录
  • touch 创建空文件
  • echo 创建带有内容的文件。
  • cat 查看文件内容
  • cp 拷贝
  • mv 移动或重命名
  • rm 删除文件

-r 递归删除,可删除子目录及文件

- f 强制删除

  • find 在文件系统中搜索某文件
  • wc 统计文本中行数、字数、字符数
  • grep 在文本文件中查找某个字符串
  • rmdir 删除空目录
  • tree 树形结构显示目录,需要安装tree包
  • pwd 显示当前目录
  • ln 创建链接文件
  • more、less 分页显示文本文件内容
  • head、tail 显示文件头、尾内容
  • ctrl+alt+F1 命令行全屏模式

2.系统管理命令

  • stat 显示指定文件的详细信息,比ls更详细
  • who 显示在线登陆用户
  • whoami 显示当前操作用户
  • hostname 显示主机名
  • uname 显示系统信息
  • top 动态显示当前耗费资源最多进程信息
  • ps 显示瞬间进程状态
  • ps -aux du 查看目录大小
  • du -h /home带有单位显示目录信息
  • df 查看磁盘大小
  • df -h 带有单位显示磁盘信息
  • ifconfig 查看网络情况
  • ping 测试网络连通
  • netstat 显示网络状态信息
  • man 命令不会用了,找男人 如:man ls
  • clear 清屏
  • alias 对命令重命名 如:alias showmeit="ps -aux" ,另外解除使用unaliax showmeit kill 杀死进程,可以先用ps 或 top命令查看进程的id,然后再用kill命令杀死进程。

3.打包压缩相关命令

gzip: bzip2: tar: 打包压缩 -c 归档文件 -x 压缩文件 -z gzip压缩文件 -j bzip2压缩文件 -v 显示压缩或解压缩过程 v(view) -f 使用档名 例: tar -cvf /home/abc.tar /home/abc 只打包,不压缩 tar -zcvf /home/abc.tar.gz /home/abc 打包,并用gzip压缩 tar -jcvf /home/abc.tar.bz2 /home/abc 打包,并用bzip2压缩 当然,如果想解压缩,就直接替换上面的命令 tar -cvf / tar -zcvf / tar -jcvf 中的“c” 换成“x” 就可以了。

4.关机/重启机器

shutdown

-r 关机重启

-h 关机不重启

now 立刻关机

halt 关机

reboot 重启

5. Linux管道 将一个命令的标准输出作为另一个命令的标准输入。也就是把几个命令组合起来使用,后一个命令除以前一个命令的结果。 例:grep -r "close" /home/* | more 在home目录下所有文件中查找,包括close的文件,并分页输出。

6. Linux软件包管理

dpkg (Debian Package)管理工具,软件包名以.deb后缀。这种方法适合系统不能联网的情况下。 比如安装tree命令的安装包,先将tree.deb传到Linux系统中。再使用如下命令安装。 sudo dpkg -i tree_1.5.3-1_i386.deb 安装软件 sudo dpkg -r tree 卸载软件 注:将tree.deb传到Linux系统中,有多种方式。VMwareTool,使用挂载方式;使用winSCP工具等; APT(Advanced Packaging Tool)高级软件工具。这种方法适合系统能够连接互联网的情况。 依然以tree为例 sudo apt-get install tree 安装tree sudo apt-get remove tree 卸载tree sudo apt-get update 更新软件 sudo apt-get upgrade 将.rpm文件转为.deb文件 .rpm为RedHat使用的软件格式。在Ubuntu下不能直接使用,所以需要转换一下。 sudo alien abc.rpm

7.vi命令

  • vi filename:打开或新建文件,并将光标置于第一行首
  • vi +n filename:打开文件,并将光标置于第n行首
  • vi + filename:打开文件,并将光标置于最后一行首 v
  • i +/pattern filename:打开文件,将光标置于第一个与pattern匹配的串处
  • vi -r filename:在上次正用vi编辑时发生系统崩溃,恢复filename
  • vi filename...filename:打开多个文件,依次进行编辑
  • i:在光标前
  • I:在当前行首
  • a:光标后
  • A:在当前行尾
  • o:在当前行之下新开一行
  • O:在当前行之上新开一行
  • r:替换当前字符
  • R:替换当前字符及齐后的字符,直至按ESC键
  • s:从当前光标位置处开始,以输入的文本替代指定数目的字符
  • S:删除指定数目的行,并以所输入文本代替之
  • ncw或nCW:修改指定数目的字
  • nCC:修改指定数目的行

环境配置篇

一、安装和配置虚拟机

  1. 安装virtualbox直接下一步就可以
  2. 配置虚拟机的参数如下硬盘300G+;内存8G+
  3. 安装ubuntu镜像

二、环境搭建(以Ubuntu 14.04为例)

1.安装openjdk $ sudo apt-get update $ sudo apt-get install openjdk-7-jre-headless $ sudo apt-get install openjdk-7-jre $ sudo apt-get install openjdk-7-jdk

2.安装所需要的包 $ sudo apt-get install git-core gnupg flex bison gperf build-essential \   zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \

lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \   libgl1-mesa-dev libxml2-utils xsltproc unzip

如果用到SElinux时,有时也要安装 python-networkx 提示:如遇到安装问题,可以单个单个安装即可

三、编译(编译android原生代码可到android source这个网站,需要翻墙)

  1. source 整个工程
  2. ./go.sh
  3. 编译成功后进行打包make_unsparse_image.sh Android 编译系统(三)Main.mk分析

Main.mk分析

Main.mk主要包含如下几个部分的内容

1. SHELL设置

2. 编译环境配置

3. 编译环境检查

4. 包含必要的宏

5. 根据make参数设置编译时的变量

6. 包含需要编译的Android.mk

7. 设置编译系统Target:prerequisites 控制整个编译流程

下面对上面几点进行必要解释:

有了前面小节对Android编译系统架构的分析,如果需要修改Android编译系统,就可以不至于盲目找问题,修改代码了。今天分析下main.mk,看它能为我们Android编译提供什么有价值的信息,以及如何自己定制我们的Android编译系统。

Main.mk的第一句就根据ANDROID_BUILD_SHELL来包裹编译系统用到的Shell,如果我们不想使用bash,而想使用sh,那么就可以在它前面写上ANDROID_BUILD_SHELL := /bin/sh,或者在build/envsetup.sh中添加相关定义。

定义完SHELL之后,就是对MAKE_VERSION的检查,然后定义了默认的编译目标droid!

如果我们敲入make之后,不加任何参数,默认的目标就是droid。注意虽然后面的include $(BUILD_SYSTEM)/config.mk写在默认目标droid依赖之后,但其和之后的语句都是要执行的,这是Makefile的语法决定的。

后面会include config.mk cleanbuild.mk对编译系统进行必要的配置。后面就是对编译环境的检查,包括是否大小写敏感、路径检查、java版本检查、javac版本检查。Android对编译环境的检查如果符合条件,在下次编译的时候,不会再次进行检查。

检查完版本之后,会包含进definations.mk,如前所述,definations.mk中定义了很多编译系统中用到的宏,这些宏在编译时需要经常调用,因此在编译的很靠前的阶段,就将之包含了进来。

然后就是针对make时传入的编译类型(eng user userdebug showcommands等)进行编译配置,这些配置会影响到最终编译目标所包括的模块。对于eng user userdebug sdk win_sdk tests等编译目标的区别,读者可以通过查看main.mk的代码找出其中到底有什么不同。

此处略去部分部分不重要的内容,直接跳到

Ifeq($(SDK_ONLY),true)处,大概368行附近,这个判断语句一直到这个语句块结束,都是对subdirs变量的设置,subdirs变量决定了哪些子文件夹最终被编译。

在后面的subdir_makefiles变量的设置,决定了哪些Android.mk被编译。紧接着include $(subdir_makefiles)就会添加所有这些Android.mk文件的依赖。这其中包含了droid的依赖,后面我们会发现。

然后就会根据这些Makefile,找出所有需要编译的模块(module),以及进行必要的分类(eng_MODULES/debug_MODULES/tests_MODULES等、modules_to_check/modules_to_install等),用以区别对待。

紧接着是定义了一系列的隐含目标:prebuilt、all_copied_headers、files、checkbuild、ramdisk、systemtallball、userdataimage、userdatatarball、bootimg、droidcore等。最重要的一点,是会发现droid依赖于droidcore,而droidcore依赖于

droidcore: files \

systemimage \

$(INSTALLED_BOOTIMAGE_TARGET) \

$(INSTALLED_RECOVERYIMAGE_TARGET) \

$(INSTALLED_USERDATAIMAGE_TARGET) \

$(INSTALLED_FILES_FILE)

遇到的问题

1.编译时遇到提示不支持openjdk,只支持oracle jdk 解决方法:

从oracle官网下载jdk版本,以jdk-7u45-linux-x64.tar.gz

举例: sudo tar zxvf jdk-7u45-linux-x64.tar.gz -C /usr/lib/jvm

环境变量 sudo gedit /etc/profile export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_65

export CLASSPATH=".:$JAVA_HOME/lib:$CLASSPATH"

export PATH="$JAVA_HOME/bin:$PATH"

更改默认jdk

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_65/bin/java 300

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_5/bin/javac 300

sudo update-alternatives --config java 验证命令

java –version

2.编译时用./go.sh遇到以下提示out/target/...kill,更cpu有关

解决方法:用i7,16G的电脑即可

时间: 2024-10-23 14:53:20

浅谈编译高通android5.1源代码的相关文章

浅谈编译原理

什么是编译原理? 编译原理顾名思义,编译就是将源语言(高级程序语言)翻译成等价的目标语言(机器语言即计算机可以识别的语言即0和1或汇编语言)的过程.原理就是研究这一过程的思想方法.理论和技术.从本质上来讲编译是一个算法问题,但由于它的问题相当复杂,导致设计解决这个问题的算法也十分复杂.这里的算法和我们学习的数据结构和算法中的算法有些不同,后者讲述的是基础算法,是解决我们生活中遇到的问题,而编译中的算法则是在人与计算机交流时需要解决的“沟通”问题的算法,比较专注解决一种的算法.编译的过程包括:源程

浅谈编译过程和符号表重定位问题

对于代码的编译问题千头万绪从何说起呢,首先来说一下计算机是如何处理应用程序的,实质上应用程序是通过操作系统来应用机器指令操控硬件设施完成各种任务的,就从编译的环节开始谈起吧,众所周知,程序开发人员所写的代码实际上计算机是没有办法去认识的,那么就必须通过编译将其转换为计算机可以认识的机器指令,在有操作系统根据具体指令从硬件上分配内存处理程序段.以下从预编译,编译,汇编,链接,来简单的说一下程序的编译过程. 2.1编译预处理 在这个阶段主要是宏定义的展开,以及头文件的递归处理,即展开所有的以#开头的

浅谈编译kernel+busybox构建拥有远程ssh登录和web功能最小linux系统

实验环境win7+VM11.1 本文的源码的版本了 dropbear-2013.58.tar.bz2    busybox-1.21.1.tar.bz2 linux-3.13.6.tar.xz  nginx-1.4.7 大致过程总揽 1,硬件准备以及查看硬件设备型号(不用担心,这些都是VM虚拟出来的) 2,编译环境的配置以及下载内核源码以及编译内核 3,编译busybox,以及提供系统正常运行的配置文件,初步运行linux系统 4,编译安装dropbear提供ssh服务 5,安装nginx:提供

浅谈JS高阶函数

引入 我们都知道函数是被设计为执行特定任务的代码块,会在某代码调用它时被执行,获得返回值或者实现其他功能.函数有函数名和参数,而函数参数是当调用函数接收的真实的值. 今天要说的高阶函数的英文为Higher-order function, 高阶函数的高阶是什么意思呢? 定义 至少满足下列一个条件的函数 接收一个或多个函数作为输入 输出一个函数 怎么理解这么个东西呢?引言里说过了,函数实际上都是指向某个变量.既然变量可以是一个向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这

【转】高通平台android 环境配置编译及开发经验总结

原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流程分析 qcril 流程分析,设置sim卡锁 python scons 语法学习 Python 语言之 scons 工具流程分析: 1.2 搭建高通平台环境开发环境 高通and

浅谈高并发架构

本篇文章主要是浅谈一些高并发的方案,指出一个大致方向,如果有需要优化提高系统性能,可以从以下方法中找出合适的使用. 随着淘宝.京东.唯品会等很多电商的出现,所谓互联网公司也就经常听到了,这些互联网公司给我们的第一印象,用户活跃交易量大.为了给用户一个好的交互体验,我们需要根据具体的业务场景来设计适合自己的高并发处理方案.服务器的架构我们在网上也看到过很多文档描述,像美团的火热.饿了么的崛起都有提到服务器的架构演变,基本都是从相对单一到集群,再到分布式服务.从一开始交易量小知名度低软件开发工期紧张

浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 全Socket层(SSL)等等,目前互联网主要使用它做静态资源服务器,也可以做代理服务器转发请求(如:图片链等),结合tomcat等 servlet容器处理jsp.1.2.ngnix     —— 俄罗斯人开发的一个高性能的 HTTP和反向代理服务器.由于Nginx 超越 Apache 的高性能和稳

浅谈mysql主从复制的高可用解决方案

1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID",开源软件,由 LINBIT 公司开发.DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中.他是有内核 模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能.也就是说当你将数据写入本地的DRBD设备上的文件系统 时, 数据会同时被发送到网

浅谈:SEO拼的就是高质量的原创文章

说来说去都是这个话题SEO.那么怎样能把SEO给做好呢,邵连虎信任许多兄弟都想晓得的.咱们为了把SEO学好,拼命的学习,实习.但是,有些SEO我感觉我现已做的够好了,为何网站即是没有作用呢.录入不多,关键字排行低.假如咱们换个方位思考一下的话,你就会理解啥才是真实的SEO. 换个思想思考啥是SEO 比如邵连虎搏客这个网站.我站在站长的方位思考SEO的话即是想尽一切办法度录入,让关键字排行让升.每天不断的发外链,不断的做伪自创.没事啰嗦一些自个烦躁的心里.假如我站在用户的方位上看到这样的网站文章都